第二章 訊號量機制

2021-08-30 06:44:27 字數 2889 閱讀 6771

2.訊號量機制

1) 整型訊號量

1.訊號量定義為乙個整型量;

2.根據初始情況賦相應的值;

3.僅能通過兩個原子操作來訪問。

p操作 wait(s):

while s<=0 do no-op;

s:=s-1;

v操作 signal(s):

2)記錄型訊號量

1.整型訊號量符合「有限等待」原則

signal釋放資源後,當cpu被分配給等待程序後,等待程序仍可繼續執行,可以符合「有限等待」。

但整型訊號量不符合「讓權等待」原則

2.整型訊號量的wait操作,當s ≤0時,當前程序會佔著cpu不斷測試;

訊號量原語不能被打斷,這個占有cpu的程序會一直不斷的佔據cpu迴圈下去,陷入忙等。

3.改進:條件不符時應能夠主動放棄cpu

4.新問題:放棄cpu的程序進入阻塞佇列:因等待某訊號量而放棄cpu的等待程序會有「若干」個,需將它們組織管理起來,並在合適的時候喚醒。

3)訊號量的基本應用

1.實現程序互斥

2.實現程序間的前趨關係(有序)

互斥訊號量注意點:

1互斥訊號量mutex初值為1;

2每個程序中將臨界區**置於p(mutex)和v(mutex)原語之間

3必須成對使用p和v原語(在同一程序中),不能次序錯誤、重複或遺漏:

遺漏p原語則不能保證互斥訪問

遺漏v原語則不能在使用臨界資源之後將其釋放(給其他等待的程序)

實現有序

前趨關係:

併發執行的程序p1和p2中,分別有**c1和c2,要求c1要在c2開始前完成;

為每對前趨關係設定乙個同步訊號量s12,並賦初值為0。則只有v操作所在程序獲得cpu時能執行

控制同步順序的注意點:

訊號量值為0的點是限制的關鍵所在;

成對使用p和v原語(在有先後關係的兩個程序中),不能次序錯誤、重複或遺漏,否則同步順序出錯。

練習:1)如何利用互斥訊號量解決上次課兩個加法程序對共享變數操作的問題?

a: r1=x;

r1=r1+1;

x=r1

b: r2=x;

r2=r2+1;

x=r2

var mutex: semaphore :=1;

x: integer;

process a: begin

repeat

p(mutex);

r1=x;

r1=r1+1;

x=r1;

v(mutex);

until false;

2)民航售票系統問題

n個售票處。每個售票處通過終端訪問系統的公用資料區

假定公用資料區中分別用ri表示某時間i次航班的現存票數。

pi表示某售票處的處理程序,試用訊號量實現程序間的互斥關係。

var s: semaphore :=1;

begin

parbegin

process pi: begin

repeat

p(s);

按旅客定票要求找到ri

if ri >=1 then

ri = ri -1;

輸出一張票;

end if

v(s);

輸出「票已售完」;

until false;

endparend

end3)用訊號量實現司機和售票員的同步。

4)and型訊號量

出現原因:一些應用往往需要兩個或多個共享資源,而不是前述的乙個資源。程序同時要求的共享資源越多,發生死鎖可能性越大。

解決思想:

一次性分配給程序所需資源,用完一起釋放。wait操作時對它所有需要的資源都要判斷,有and條件,故稱「and同步」、「同時wait」。

5)訊號量集

引入原因:

每次只能獲得或釋放乙個單位的資源,低效;

某些時候資源分配有下限的限制;

修改:在大於可分配設定的下界值t前提下,每次可分配d個。

訊號量集的乙個特例:

只有乙個訊號量s的幾種特殊情況:

swait(s, d, d),,允許每次申請d個資源,若現有資源數少於d,不予分配。

swait(s, 1, 1),蛻化為一般的記錄型訊號量,一次申請乙個,至多分配乙個(s>1時可計數,或s=1時可控制互斥)。

swait(s, 1, 0),當s>=1時,允許多個程序進入某特定區,當s變為0後,阻止任何程序進入特定區,相當於可控開關。並不對s資源的數量產生影響。

訊號量題目做題一般方法:

分析問題,找出同步、互斥關係

根據資源設定訊號量變數

寫出**過程,並注意p、v操作的位置

檢查**,模擬機器執行,體驗訊號量的變化和程式執行過程是否正確。

第二章 2 3 訊號量機制

p 操作 wait s while s 0 do no op s s 1 v 操作 整型訊號量符合 有限等待 原則,但不符合 讓權等待 原則 type semaphore record value integer l list of pcb end p v 操作 p操作wait s.value s....

第二章 訊號量

整形訊號量 記錄型訊號量 這些wait 都是 1 signal都是 1 不同的是 整型訊號量wait先判斷小於0然後再 1 signal沒有判斷直接 1 記錄型訊號量wait先 1 再判斷小於0 如果小於0 就從這個小於0的地方鎖上 block 然後signal的時候先 1 然後再從鎖住的地方解鎖。...

訊號量機制

1 訊號量的型別定義 訊號量 semaphore 的資料結構為乙個值和乙個 指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量 當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改變。一般來說,訊...