操作系統:管程理解

来源:http://www.cnblogs.com/Forever-LJX/archive/2016/08/24/5803528.html
-Advertisement-
Play Games

最近開始看操作系統的書(本身不是這個方向的),單看書本管程還是不能完全理解,現在簡單總結一下吧。 1.管程 (英語:Monitors,也稱為監視器) 是一種程式結構,結構內的多個子程式(對象或模塊)形成的多個工作線程互斥訪問共用資源。這些共用資源一般是硬體設備或一群變數。管程實現了在一個時間點,最多 ...


最近開始看操作系統的書(本身不是這個方向的),單看書本管程還是不能完全理解,現在簡單總結一下吧。

1.管程 (英語:Monitors,也稱為監視器) 是一種程式結構,結構內的多個子程式(對象或模塊)形成的多個工作線程互斥訪問共用資源。這些共用資源一般是硬體設備或一群變數。管程實現了在一個時間點,最多只有一個線程在執行管程的某個子程式。與那些通過修改數據結構實現互斥訪問的併發程式設計相比,管程實現很大程度上簡化了程式設計系統中的各種硬體資源和軟體資源,均可用數據結構抽象地描述其資源特性,即用少量信息和對資源所執行的操作來表徵該資源,而忽略了它們的內部結構和實現細節。利用共用數據結構抽象地表示系統中的共用資源,而把對該共用數據結構實施的操作定義為一組過程。

像一個中介站,程式利用共用資源要通過這個的子程式(操作具體共用資源的一個過程,已經將具體硬體軟體資源抽象成一種數據結構,對這個過程進行操作相當於使用資源),最多一個線程執行保證互斥。

2.管程的條件變數:條件變數是在管程內部的數據結構,且只有在管程內才能被訪問,它對管程內所有過程是全局的,只能通過wait(),signal()兩個操作訪問。

wait():掛起調用進程並釋放管程,直至另一進程在條件變數上執行signal()。 signal():如果有其他進程因對條件變數執行wait()而被掛起,便釋放之,如果沒有進程等待,則信號被忽略,不保存。 wait和signal是利用資源的內部語句,條件變數相當於要用的資源,如果已經被別的調用,就wait改變數,用好了別的資源會signal,然後這個程式再利用 3.管程有一個很重要的特性,即任一時刻管程中只能有一個活躍進程,這一特性使管程能有效地完成互斥。管程是編程語言的組成部分,編譯器知道它們的特殊性,因此可以採用與其他過程調用不同的方法來處理對管程的調用。典型的處理方法是,當一個進程調用管程過程時,該過程中的前幾條指令將檢查在管程中是否有其他的活躍進程。如果有,調用進程將被掛起,直到另一個進程離開管程將其喚醒。如果沒有活躍進程在使用管程,則該調用進程可以進入。 4. 從語言的角度看,管程主要有以下特性:
  (1)模塊化。管程是一個基本程式單位,可以單獨編譯; 
  (2)抽象數據類型。管程是中不僅有數據,而且有對數據的操作; 
  (3)信息掩蔽。管程外可以調用管程內部定義的一些函數,但函數的具體實現外部不可見;  5.簡單點說就是只能被單個線程執行的代碼了,舉個例子假如一個管程類叫atm(取款機),裡面有兩個方法叫提款 取款,不同的人為不同的線程,但是atm只允許一個人在一個時間段中進行操作,也就是單線程,那麼這個atm就需要一個鎖,單一個人在使用時,其他的人只能wait。再者一個人如果使用的時間太長也不行,所以需要一個條件變數來約束他。條件變數可以讓一個線程等待時讓另一線程進入管程,這樣可以有效防止死鎖 6.因為調用wait原語後,使進程等待的原因有多種,為了區別它們,引入了條件變數,就是為了排不同wait的隊列(等待原因不同)
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在windows主機安裝centos虛擬機後,遇到虛擬機連接外網問題。 解決方案:http://blog.csdn.net/pang040328/article/details/12427359 經過如上操作,確認可以ping 8.8.8.8,表示虛擬機可以連接外網了。不過,ping www.bai ...
  • 首先根據書中講解的實例代碼(標準實例來源於UCOS ii經典教程 邵貝貝) 並且在另一個任務中進行消息發送,如下代碼 無論是斷點調試,還是從輸出的調試信息中都可以確定每次都有消息發送,但是在OSMboxPend中始終沒有接收到消息導致err一直等於OS_TIMEOUT而無法進行正確消息處理 但是只要 ...
  • 最近公司團隊的項目用到ESP8266,使用的是stm32c8t6晶元,軟體使用MDK,於是寫下調試過程中的一些註意點。具體代碼和涉及思路不能外泄,這裡只給出我們調試過程中的註意的方面。 關於ESP8266,我們首先做一些說明,這些都是我們團隊在調試過程中總結出來的,都是經過實際的測試,而不是談論或是 ...
  • 簡要複習一下ARM9中斷控制器的控制過程: 1.首先能識別觸發的中斷(對應中斷源必須打開,然後查詢當前中斷狀態寄存器),硬體會操控PC跳到中斷向量入口(IRQ_HANDLE,硬體控制的只要是IRQ中斷類型就會進入),在中斷跳轉函數裡面保存現場(保存R0等等工作寄存器)--跳到服務函數(裡面進行中斷源 ...
  • 文件描述符 可以理解為linux跟蹤打開文件,而分配的一個數字,這個數字有點類似c語言操作文件時候的句柄,通過句柄就可以實現文件的讀寫操作 用戶可以自定義文件描述符範圍是:3 num,這個最大數字,跟用戶的:ulimit –n 定義數字有關係,不能超過最大值 查看系統文件描述符最大值 linux系統 ...
  • Centos6.2代碼 CentOS 6.0沒有預設沒有裝語言支持(Language Support),因此很不方面。 終於發現了有效的方法: su root yum install "@Chinese Support" exit 最後一步:logout,註意是註銷,然後再次登錄此用戶。 當然這裡安... ...
  • 在ubuntu下網路管理器Network Manager莫名奇妙出現無法連接無線網的情況,於是昨天就開始著手解決這一問題: 一 :卸載 1.第一步卸載Network-Manager (具體字母的大小寫我沒註意,如果Network-Manager不能成功,那就換成network-manager試試,卸 ...
  • 熟悉 CDN 行業主流技術的朋友應該都比較清楚,雖然 Nginx 近幾年發展的如日中天,但是基本上沒有直接使用它自帶的 proxy_cache 模塊來做緩存的,原因有很多,例如下麵幾個: 不支持多盤 不支持裸設備 大文件不會切片 大文件的 Range 請求表現不盡如人意 Nginx 自身不支持合併回 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...