有關訊號量和PV操作的易(粗)懂(淺)理解
阿新 • • 發佈:2018-12-13
大概只有作業系統老師佈置的作業(要交)能讓我認真學習吧……
-
訊號量Semaphore
1.有關訊號量的一些說明: 訊號量S是一個整數,S大於等於零時代表可供併發程序使用的資源實體數,但S小於零時則表示正在等待使用共享資源的程序數。 在多程序環境下,程序在進入一個臨界程式碼段之前,程序必須獲取一個訊號量;一旦臨界程式碼段完成了,釋放一個訊號量。其他想進入臨界程式碼段的程序必須等待直到那個程序釋放訊號量。 用訊號量實現程序互斥的演算法如下:
semaphore S=1; Parbegin Process1:Begin Repeate while S<=0 do no-ops; S=S-1; Critical section;//兩個程序的臨界區是互斥的 S=S+1; Until false; End Process2:Begin Repeate while S<=0 do no-ops; S=S-1; Critical section; S=S+1; Until false; End Parend.
2.Windows下訊號量包含的幾個操作原語: CreateSemaphore() 建立一個訊號量
OpenSemaphore() 開啟一個訊號量
ReleaseSemaphore() 釋放訊號量
-
PV操作
1.PV操作的一些概念:
由來:PV操作是由荷蘭人狄克斯特拉用荷蘭文定義的,因為在荷蘭文中,通過叫passeren,釋放叫vrijgeven,PV操作因此得名。
作用:實現程序同步與互斥。P操作表示申請一個資源,V操作表示釋放一個資源。
定義: P操作:S=S-1,若S>=0,則執行P操作的程序繼續執行;若S<0,則置該程序為阻塞狀態,並將其插入阻塞佇列。
Wait(S): while S<=0 do no-ops; S=S-1;
V操作:S=S+1,若S>0,則執行V操作的程序繼續執行,此時不喚醒其他程序;若S<0,則從阻塞狀態喚醒一個程序,並將其插入就緒佇列。
Signal(S): S=S+1;
用PV操作實現程序的互斥演算法——在臨界區的前後加上Wait(P操作)和Signal(V操作)函式即可:
Repeate
Wait(S);
Critical Section;
Signal(S);
Until false;
2.PV操作的特點(一組PV操作對應於一個程序 ): 原子性,P和V操作不可分! 連續性,P和V操作是不間斷的。 P自己,V對方:P的是自己的訊號量減1,V的是對方的訊號量加1.