荷蘭科學家
dijkstra(
狄克斯特拉
)提出的一種卓有成效的程序同步機制。 1
) 整型訊號量 1.
訊號量定義為乙個
整型量; 2.
根據初始情況賦相應的值;
3.僅能通過
兩個原子操作
來訪問。
p操作 wait(s):
while s<=0 do no-op;
s:=s-1;
v操作 signal(s):
s:=s+1;
2.記錄型訊號量
整型訊號量符合「有限等待」原則
signal釋放資源後,當cpu被分配給等待程序後,等待程序仍可繼續執行,可以符合「有限等待」。
但整型訊號量不符合「讓權等待」原則
整型訊號量的wait操作,當s ≤0時,當前程序會佔著cpu不斷測試;
訊號量原語不能被打斷,這個占有cpu的程序會一直不斷的佔據cpu迴圈下去,陷入忙等。
3.改進
不僅要有值的處理,還有佇列的處理。
此時形成記錄型資料結構,包括兩部分:
整型變數value(代表資源數目)
程序鍊錶l(鏈結所有等待程序):
**描述:
type semaphore=record
value:integer;
l:list of pcb;
end;
操作:s.value,s.l
p/v操作
p操作wait():
s.value = s.value - 1;
if s.value < 0 then block(s,l)
v操作signal():
s.value = s.value + 1;
if s.value <= 0 then wakeup(s,l)
4.訊號燈
定義訊號量semaphore代表可用資源實體的數量。又叫訊號燈。
當≥0,代表可供併發程序使用的資源實體數
當<0,表示正在等待使用該資源的程序數。
除初值外,訊號量的值僅能由標準原子操作p、v操作來改變。
5.訊號量機制的應用
6.互斥訊號量的注意點
7.實現有序
前趨關係:
為每對前趨關係設定乙個同步訊號量s12
,並賦初值為0。
則只有v
操作所在程序獲得
cpu時能執行
7.控制同步順序的注意點
訊號量值為0的點是限制的關鍵所在;
成對使用p和v原語(在有先後關係的兩個程序中),不能次序錯誤、重複或遺漏,否則同步順序出錯。
8.and型訊號量
出現原因:一些應用往往需要兩個或多個共享資源,而不是前述的乙個資源。程序同時要求的共享資源越多,發生
死鎖可能性越大。
解決思想:一次性分配給程序所需資源,用完一起釋放。wait
操作時對它所有需要的資源都要判斷,有
and條件,故稱「
and同步」、「同時
wait」。
9.
訊號量集
引入原因:
每次只能獲得或釋放乙個單位的資源,低效;
某些時候資源分配有下限的限制;
修改:在大於可分配設定的下界值
t前提下,每次可分配d個。
只有乙個訊號量s的幾種特殊情況:
作業系統 訊號量機制
用乙個整數型的變數作為訊號量,用來表示股系統中某種資源的數量。與普通整數變數的區別 對訊號量的操作只有三種,初始化,p操作,v操作。p操作 相當於wait原語,進入區 v操作 signal原語,相當於退出區。大體實現 wait 方法一氣呵成,避免併發導致的問題。但是不滿足 讓權等待原則 程序會處於忙...
作業系統之 訊號量機制
訊號量機制是一種卓越成效的程序同步工具,訊號量機制已經被廣泛的使用於單處理機,和多處理系統的計算機網路中。訊號量s 是乙個整數,s大於等於零代表可供併發程序使用的資源實體數,當 s小於零時則表示正在等待使用臨界區的程序數,整型訊號量 整型訊號量定義乙個用於表示資源數目的整型量數目s 但是僅能通過兩個...
作業系統之訊號量機制
使用者程序可以使用作業系統提供的原語來操作訊號量,以實現程序的互斥和同步 原語是一塊不可中斷的程式段,由關中斷實現 這對原語是wait signal 又稱為p v操作 訊號量可分為整形訊號量記錄型訊號量 程序的互斥需要遵守 四個原則,空則讓進,忙則等待,有限等待,讓全等待 由圖可以看出,在進行p操作...