作業系統臨界區分為幾個部分原理是什麼
作業系統臨界資源是指一次只能被一個程序所佔用的資源,那麼具體執行過程是怎樣的呢?下面由小編為大家整理了作業系統臨界資源的相關知識,希望對大家有幫助。
對於臨界區的訪問過程分為四個部分:
1.進入區:檢視臨界區是否可訪問,如果可以訪問,則轉到步驟二,否則程序會被阻塞
2.臨界區:在臨界區做操作
3.退出區:清除臨界區被佔用的標誌
4.剩餘區:程序與臨界區不相關部分的程式碼
互斥的要求:
必須強制實施互斥,即一次只允許一個程序進入臨界區。一個在非臨界區停止的程式不能干涉其他程式。有限等待,即決不允許需要訪問臨界區的程序被無限延遲的情況,即死鎖或餓死,有空讓進,臨界區空閒時,請求程式可進,對相關程序的執行速度和處理器的速度沒有任何要求和限制。一個程序駐留在臨界區的時間必須是有限的。
互斥的實現:
軟體的方法:由併發執行程序擔任這個責任
機器指令:減少開銷,但不能通用
2.補充資料:作業系統實現臨界區互斥的基本方法
硬體實現方法
中斷禁用
單處理器中併發程序不能重疊只能交替,一個程序一直執行到呼叫系統服務或被中斷。保證互斥只需保證一個程序不被中斷
缺點:一長時間中斷禁止,中斷效率會降低。二不能用於多處理結構中
專用機器指令
用於保證訪問的原子性。1、比較和交換指令***compare and swap***、2、Exchange指令
機器指令方法的特點:
1、適合在單處理器或共享記憶體的多處理器上的任何數目的程序
2、非常簡單且易於證明
3、可用於支援多個臨界區,可用自己的變數定義
缺點
1、忙等待,程序等待進入臨界區,仍然會繼續消耗CPU的時間
2、可能飢餓,當需要等待程式進入時,某些可能被無限拒絕
3、可能死鎖,低優先順序的程序佔用高優先順序的程序所需的資源
訊號量實現方法
解決併發問題基本原理
兩個或多個程序可以通過簡單的訊號進行合作,一個程序可以被迫在某一個位置停止,直到它接到某一個特定的訊號。複雜的合作需求都可以通過適當的訊號結構完成。只需要一個特殊的變數***整數型***:稱為訊號量
訊號量的三個操作
1、訊號量s可以初始化成非負數
用於互斥:s=1
用於同步:s>=0
2、semWait***s***程序請求分配一個資源,操作使訊號量減1,若為負。程序阻塞。否則繼續執行
3、semSignal***s***程序釋放一個資源,操作使訊號量加1,若小於或等於0.則阻塞的程序被解除阻塞
訊號量的使用規則
1、semWait和seSignal必須成對出現
互斥時,位於同一程序,臨界區的前後
同步時,交錯出現在兩個合作程序內
2、多個seWait次序不能顛倒,否則可能導致死鎖
3、用於同步的semWait應出現在用於互斥的semSignal之前
4、多個semSigal次序可以任意
5、在程序對訊號量減1之前無法提前知道該訊號量是否會被阻塞
6、當程序對一個訊號量加1後。另一個程序會被喚醒,兩個程序繼續併發執行
7、在向訊號量發出訊號後,不需要知道是否有另一個程序在正在等待,被解除阻塞的程序數量或者沒有或者是1
管程實現方法
訊號量為實施互斥和程序間合作提供了強大靈活的工具,但存在難點。即semWait和semSignal操作可能分佈在整個程式中,很難看出整體效果,因此提出管程***Monitor***,一個程式設計語言結構,可以鎖定任何物件,提供與訊號量相同的功能,更易於控制
使用訊號的管程
定義:管程由一個或多個程序、一個初始化序列和區域性資料組成的軟體模組
特點:
1、區域性資料變數只能被管程的過程訪問,任何外部過程都不能訪問
2、一個程序通過呼叫管程的一個過程進入管程
3、在任何時候、只能有一個程序在管程中執行,呼叫管程的其他任何程式都被阻塞
管程的幾個要素
1、管程中的共享變數在外部不可見,只能通過管程內所說明的過程間接訪問
2管程必須互斥進入:管程中的資料變數每次只能被一個程序訪問,保證資料完整性
3、管程通常用來管理資源,應當沒有程序等待隊伍、相應的等待及喚醒
4、Q進去管程等待時,釋放管程互斥權,P進入管程,喚醒Q
P等待Q繼續,直到Q退出或等待
P等待Q繼續,直到P退出或等待
規定喚醒為程序中最後一個操作
利