計算機作業系統(湯小丹第四版)程式同步
程式同步
1.程式同步的基本概念
兩種制約關係
在多道程式環境下,對於處於一個系統中的多個程式,由於他們共享資源,或為完成某一任務而相互合作,他們之間可能存在著以下兩種形式的制約關係:
1)
間接相互制約:多個程式在併發執行時,由於共享系統資源,如CPU,I/O裝置等,致使這些併發執行的程式之間形成相互制約的關係。為了保證這些程式的能有序執行,對於系統中的這類資源,必須由系統統一分配,即使用者在使用之前,應先提出申請,而不允許使用者程式直接使用。
這種制約關係源於對該類資源的共享。
2)
直接相互制約關係:為了完成某任務而建立的兩個或者多個程式。這些程式將為完成同一項任務而相互合作。例如生產者——消費者問題就存在著相互制約關係
程式間的直接制約關係源於他們之間的相互合作。
在多道程式環境下,由於存在著上述兩類相互制約關係,程式執行過程中是否能獲得處理機執行以及以怎樣速度執行,並不是程式自身能控制的,此即程式的 非同步性。
臨界資源和臨界區
在計算機中有許多資源一次只能允許一個程式使用,如果多個程式同時使用則可能造成系統的混亂,這些資源被稱作 臨界資源(比如印表機)。多個程式同時使用臨界資源會使其結果具有不可再現性。
在每個程式中,訪問臨界資源的那段程式碼稱作 臨界區。為了使程式能有效共享臨界資源,並使程式的執行具有可再現性,系統必須保證程式互斥的使用臨界資源,即保證他們互斥的進入臨界區。因此,必須在臨界區前面加一段程式碼,用來檢查對應的臨界資源是否正被其他程式訪問,這段程式碼稱為 進入區;相應的在臨界區後邊也要加一段程式碼稱為 退出區,用於將臨界區從正在被訪問的標誌恢復為未被訪問的標誌。
同步機制應該遵循的規則
用來實現互斥的共享機制必須遵守以下四個規則:
1)
空閒讓進:臨界區空閒時,應允許一個請求進入臨界區的程式立即進入臨界區,以便有效的利用資源。
2)
忙則等待:當臨界資源正在訪問時,其他要求進入臨界區的程式必須等待,以保證對臨界資源的互斥訪問。
3)
有限等待:任何要求訪問臨界資源的程式應能在有限時間內進入臨界區。
4)
讓權等待:不能進入臨界區的程式應立即釋放CPU資源,以免“忙等”。
2.訊號量機制
整型訊號量
最初由Dijkstra把整型訊號量定義為一個用於表示資源數目的整型量S,除了初始化外,它僅能透過兩個標準的原子操作wait(P)和signal(V)來訪問。演算法如下:
記錄型訊號量
記錄型訊號量除了需要一個用於代表資源數目的整型變數value外,還增加了一個程式連結串列指標list,用於連結所有等待該資源的程式。其演算法如下:
3.訊號量應用
利用訊號量實現前趨關係
前趨關係在上一篇文章已將這裡就不多說,直接上圖寫關係
程式碼框架如下:
利用訊號量實現互斥
為了使多個程式能互斥地訪問某個臨界資源,只需為該資源設定一互斥訊號量mutex ,並將其訊號量設定為1,然後將訪問該臨界區的資源放wait(mutex)和signal(mutex)之間。下面演算法描述瞭如何利用訊號量實現程式P1和P2的互斥:
在利用訊號量機制實現程式互斥時需要注意,wait(mutex)和signal(mutex)必須成對出現,(成對出現不一定在一個程式中成對出現)缺少wait(mutex)將會導致系統混亂,不能保證對臨界資源的互斥訪問;而缺少signal(mutex)j將會使臨界資源永遠不被釋放,從而使因等待該資源的程式不能被喚醒。
4.經典程式的同步問題
生產者—消費者問題(個人理解)
(一個緩衝區的就不說了)如果一個生產者一個消費者n個緩衝區:
設定三個訊號量:
互斥訊號量
mutex,用於實現對緩衝池的互斥訪問,初始值為1;
資源訊號量
empty,用來表示空閒緩衝區的數量,初始值n;
資源訊號量
full,用來表示滿緩衝區的數量,初始值為0;
empty和full用來同步生產者和消費者程式。
具體演算法描述如下:
注:n個緩衝池用迴圈佇列
當(in + 1)% n = out,表示進來一圈了,也就是緩衝池滿了;
當in = out表示緩衝池空;
讀者—寫者問題(個人理解)
題述:一個資料物件,如筆記或者記錄,能被多個程式共享,可把那些只要求讀資料物件的程式稱為"讀者",其他程式則稱為寫者。顯然讀者可同時讀一個共享物件,但不允許讀者和寫著同時訪問共享物件,也不允許多個寫著同時訪問共享物件。
如考慮讀者優先,即除非有讀者在讀,或者讀者就不用等待,該問題演算法可描述為:
互斥訊號量mutex:實現Reader和Writer程式間在讀或者寫時的互斥。
互斥訊號量rmutex:實現對readcount互斥訪問。
整型變數readcount:記錄讀者數量。
生產者—消費者問題變形(個人理解)
問題描述:桌子上有能盛的下5個水果的空盤子,爸爸不停的向盤子中放蘋果或者橘子,兒子不停的從盤子中取走橘子,女兒不停從盤中取出蘋果,規定三人不能同時從盤子中取放水果。試用訊號量實現爸爸,兒子和女兒這三個迴圈程式之間的同步。
本題是生產者—消費者問題的變形,為一個生產者,多個緩衝區,多個消費者。
需要設定兩個不同的full變數orange和apple初始值為0。
三人不能同時取放水果,設定互斥訊號量mutex以實現三人對臨界資源的互斥訪問。
還需設定一個empty記錄盤子中的空位置(五個位置)
該問題演算法可描述為:
注:以上僅為個人理解,如有錯誤,還望提出,佔佔積極改正!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2733238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 計算機作業系統 (第四版湯小丹老師) 複習筆記第三章計算機作業系統筆記
- 計算機作業系統計算機作業系統
- 計算機作業系統|作業系統引論計算機作業系統
- 計算機作業系統之程式掃盲計算機作業系統
- 計算機的作業系統計算機作業系統
- 計算機導論作業系統計算機作業系統
- 計算機作業系統掃盲計算機作業系統
- 計算機重灌Windows作業系統計算機Windows作業系統
- 作業系統:計算機的生態系統作業系統計算機
- 961計算機作業系統-2021大綱計算機作業系統
- Linux作業系統——簡單程式同步Linux作業系統
- 對於計算機作業系統的認識計算機作業系統
- [作業系統]程序同步作業系統
- 計算機面試重難點 之 作業系統計算機面試作業系統
- 作業系統筆記(八)程式同步附加篇作業系統筆記
- 聊聊從邏輯閘到作業系統的計算機作業系統計算機
- 計算機作業系統第一章複習計算機作業系統
- 計算機體系結構 - 作業1計算機
- 程式設計作業——系統管理程式設計
- 系統分析設計小組作業1
- 【Dr.Chen的計算機作業系統】Cygwin的安裝計算機作業系統
- 一個故事看懂計算機作業系統的進化史計算機作業系統
- 【高階作業系統-陳渝】Architecture-計算機架構作業系統計算機架構
- 計算機作業系統複習知識點大集合計算機作業系統
- 深入理解計算機系統:程式計算機
- 程式設計必備基礎 計算機組成原理+作業系統+計算機網路,計算機基礎——更適合程式設計師的程式設計必備基礎知識作業系統計算機網路程式設計師
- 計算機---Linux作業系統---C語言---C程式設計---微控制器---計算機網路---電腦保安---資訊保安Linux作業系統C語言C程式程式設計計算機網路
- 只有計算機才能完成的小學數學作業計算機
- 2021秋招面試計算機基礎總結 - 作業系統面試計算機作業系統
- 計算機作業系統處理機排程讀後感—–關於程式概念的剖析。從RING3到RING0(32位作業系統)計算機作業系統
- 計算機系統計算機
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- JAVA程式設計師需要知道的計算機底層基礎10-作業系統載入程式的簡單製作Java程式設計師計算機作業系統
- 作業系統(一)作業系統歷史:從標準函式庫到雲端計算作業系統函式
- 計算機Windows系統最佳化小知識計算機Windows
- 作業系統-程式管理作業系統
- 從作業系統角度看錶空間計算方式作業系統
- 作業系統實驗(一)-Shell程式設計作業系統程式設計