信號量
信號量是最早出現(xiàn)的用來解決進(jìn)程同步與互斥問題的機(jī)制,
包括一個(gè)稱為信號量的變量及對它進(jìn)行的兩個(gè)原語操作。
一. 信號量的概念
1.信號量的類型定義
每個(gè)信號量至少須記錄兩個(gè)信息:信號量的值和等待該信號量的進(jìn)程隊(duì)列。它的類型定義如下:(用類PASCAL語言表述)
semaphore = record
value: integer;
queue: ^PCB;
end;
其中PCB是進(jìn)程控制塊,是操作系統(tǒng)為每個(gè)進(jìn)程建立的數(shù)據(jù)結(jié)構(gòu)。
s.value>=0時(shí),s.queue為空;
s.value<0時(shí),s.value的絕對值為s.queue中等待進(jìn)程的個(gè)數(shù);
2.PV原語
對一個(gè)信號量變量可以進(jìn)行兩種原語操作:p操作和v操作,定義如下: procedure p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procedure v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}
其中用到兩個(gè)標(biāo)準(zhǔn)過程:
asleep(s.queue);執(zhí)行此操作的進(jìn)程的PCB進(jìn)入s.queue尾部,進(jìn)程變成等待狀態(tài)
信號量是最早出現(xiàn)的用來解決進(jìn)程同步與互斥問題的機(jī)制,
包括一個(gè)稱為信號量的變量及對它進(jìn)行的兩個(gè)原語操作。
一. 信號量的概念
1.信號量的類型定義
每個(gè)信號量至少須記錄兩個(gè)信息:信號量的值和等待該信號量的進(jìn)程隊(duì)列。它的類型定義如下:(用類PASCAL語言表述)
semaphore = record
value: integer;
queue: ^PCB;
end;
其中PCB是進(jìn)程控制塊,是操作系統(tǒng)為每個(gè)進(jìn)程建立的數(shù)據(jù)結(jié)構(gòu)。
s.value>=0時(shí),s.queue為空;
s.value<0時(shí),s.value的絕對值為s.queue中等待進(jìn)程的個(gè)數(shù);
2.PV原語
對一個(gè)信號量變量可以進(jìn)行兩種原語操作:p操作和v操作,定義如下: procedure p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procedure v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}
其中用到兩個(gè)標(biāo)準(zhǔn)過程:
asleep(s.queue);執(zhí)行此操作的進(jìn)程的PCB進(jìn)入s.queue尾部,進(jìn)程變成等待狀態(tài)