一、臨界區
互相協作的程序之間有共享的資料,於是這裡就有乙個併發情況下,如何確保有序操作這些資料、維護一致性的問題,即程序同步。為了解決合作程序之間的競爭條件,引入臨界區問題模型。 臨界區是包含訪問共享資料指令的相關**段,也是多個程序都包含的**段,在這段**中可能會進行更新資料表、交換變數等操作。從資料一致性的角度來說,當乙個程序進入臨界區後,其他程序就不允許進入臨界區,也就是不能有多個程序同時處於臨界區。
臨界區問題(critical-section problem)是設計乙個以便程序協作的協議。每個程序必須請求允許進入其臨界區。實現請求的**段稱為進入區(entry section),臨界區之後可有退出區(exit section),其他**段成為剩餘區(remainder section)。
臨界區問題的解答必須滿足三項要求:
(1)互斥(mutual exclusion): 如果程序pi在其臨界區內執行,那麼其他程序都不能在其臨界區內執行;
(3)有限等待(bounded waiting): 從乙個程序做出進入臨界區的請求,直到該請求允許為止,其他程序允許進入其臨界區內的次數有上限。
二、訊號量
訊號量s是個整數變數,除了初始化外,它只能通過兩個標準原子操作:wait()和signal()來訪問。即p和v。
wait()就是等待資源的過程,定義可表示為:
wait(s)
signal()就是釋放資源的過程,定義可表示為:
signal(s)
在wait()和signal()操作中,對訊號量整型值的修改必須不可分地執行。即當乙個程序修改訊號量值時,不能有其他程序同時修改同一訊號量的值。另外,對於wait(s),對於s的整數值測試(s≤0)和對其可能的修改(s–),也必須不被中斷地執行。
訊號量的基本用法如下:
do
while(true);
可以看到互斥鎖其實就是訊號量的一種特殊形式(當訊號量為二進位制訊號量時),而從互斥鎖中可以知道其具有忙等待的缺點,可以通過阻塞自己來解決這一缺點。
將訊號量定義為結構體,如下:
typedef struct
semaphore;
wait實現:
wait(semaphore *s)//消耗資源
}
signal實現:
signal(semaphore *s)//釋放資源
}
在具有忙等的訊號量經典定義下,訊號量的值不會為負數,但是本實現可能造成訊號量為負值。如果訊號量為負值,那麼其絕對值就是等待該訊號量的程序的個數。訊號量的關鍵之處是它們原子的執行。必須確保沒有兩個程序能同時對乙個訊號量進行操作,在單處理器情況下,可以在執行wait()和signal()的時候簡單的關閉中斷,保證只有當前程序進行。 作業系統 程序同步問題
1 桌上有一空盤,允許存放乙隻水果。爸爸可向盤中放蘋果也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放乙隻水果供吃者取用,請用p v原語實現爸爸 兒子 女兒三個併發程序的同步。semaphore s 1,sa 0,so 0 main father son daug...
作業系統 程序同步
臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...
作業系統 程序同步
引入程序 提高了資源的利用率和系統的吞吐量 程序的非同步性 會給系統造成混亂 程序同步基本概念 1,兩種形式的制約關係 a 間接相互制約 ab兩程序爭用一台印表機 b 直接相互制約 a程序放資料 緩衝區 b程序從緩衝區取資料 2,臨界資源 硬體臨界資源 軟體臨界資源 印表機,磁帶機,緩衝區。3,臨界...