訊號量機制是一種卓越成效的程序同步工具,訊號量機制已經被廣泛的使用於單處理機,和多處理系統的計算機網路中。
訊號量s
是乙個整數,
s大於等於零代表可供併發程序使用的資源實體數,當
s小於零時則表示正在等待使用臨界區的程序數,
整型訊號量:
整型訊號量定義乙個用於表示資源數目的整型量數目s
,但是僅能通過兩個原子操作
wait(s
)和sigal (s
)來訪問,
while (s)
semaphore;
wait ( s) 與
signl (s)
如下:
wait (
semaphore *s){
s->value --;
if (s->value <= 0 ) block (s->list);
singal (semaphore * s)
s->value ++;
if (s->value++)
wakeup (s->list)
s->value代表系統中某類資源的數目,對其進行
wait
操作,意味著程序請求乙個單位的該類資源,使系統中可供分配的該類資源數目減少乙個,當
s.value<0
表示該資源已經分配完畢,該程序呼叫阻塞原語將自己阻塞,放棄處理機,並插入訊號量鍊錶中,其遵循讓權等待,
此時s->value
表示的絕對值表示在訊號量鏈隊阻塞的程序數目,對訊號量的每次
signl
操作表示執行程序釋放乙個單元的資源,使系統中可供分配的的該類資源數增加乙個。若加1後
s->value<=0
,表示在訊號量鏈隊中仍有等待該資源的程序被阻塞。故應調動
wakeup
原語。
and型訊號量
將程序在整個執行過程中的所有資源,一次性全部分配給程序,程序使用完後再一次性釋放,只要乙個程序尚未分配成功,其他所有為之分配的資源也不分配給它。
訊號量集:
對and
訊號量機制加以擴充,對程序所申請的所有資源以及每類資源不同的資源需求量,在一次
pv原語操作中完成申請或釋放。
作業系統之訊號量機制
使用者程序可以使用作業系統提供的原語來操作訊號量,以實現程序的互斥和同步 原語是一塊不可中斷的程式段,由關中斷實現 這對原語是wait signal 又稱為p v操作 訊號量可分為整形訊號量記錄型訊號量 程序的互斥需要遵守 四個原則,空則讓進,忙則等待,有限等待,讓全等待 由圖可以看出,在進行p操作...
作業系統 訊號量機制
用乙個整數型的變數作為訊號量,用來表示股系統中某種資源的數量。與普通整數變數的區別 對訊號量的操作只有三種,初始化,p操作,v操作。p操作 相當於wait原語,進入區 v操作 signal原語,相當於退出區。大體實現 wait 方法一氣呵成,避免併發導致的問題。但是不滿足 讓權等待原則 程序會處於忙...
作業系統之訊號量機制詳解
使用者程序可以通過使用乙個變數 可以是乙個整數,也可以是更為複雜的記錄型變數 可以用乙個訊號量來表示系統中某種資源的數量。比如 系統中只有一台印表機,就i可以設定乙個初值為1的訊號量。原語是一種特殊的程式段,其執行只能一氣呵成,不可被中斷。原語是由關中斷 開中斷指令實現的。wait s 原語和sig...