操作系统(八)进程管理——进程同步
進程之間的關系
在多道程序環境下,系統內同時運行的并發進程通常有多個,在這多個進程間必定存在以下兩種情況:
-
相互獨立的進程:這種進程既不影響系統中其它進程的執行,也不受其它進程的影響,它們各自是獨立的。
-
彼此有關的進程:這種進程的執行依賴于其它進程的進展情況,或者說,它們之間存在著相互制約關系。
進程間執行時的相互制約關系又可分為兩種:
- 間接制約關系:共享系統資源? ? ?
- 直接制約關系:相互合作
并發執行的進程間存在這樣的制約關系,以及進程在并發執行時具有異步性會給系統造成混亂。
解決的方法:
(1)保證多個進程采用互斥的方式訪問臨界資源;
(2)其次要協調相互合作的各個進程的執行次序。
?
進程同步
- 進程同步:指多個相關進程在執行次序上的協調。
- 主要任務:對多個相關進程在執行次序上進行協調,以使并發執行的諸進程之間能有效地共享資源和相互合作,從而使程序的執行具有可再現性。
一、進程同步的基本概念
1、臨界資源
在一段時間內只允許一個進程訪問的資源,稱為是臨界資源,對于臨界資源應采用互斥的訪問方式。
2、臨界區
臨界區:
進程中訪問臨界資源時要執行的代碼段。
repeat
entry section; ?? 進入區?
critical section; 臨界區
exit section; ??退出區
remainder section;? ?剩余區
until false;
臨界區的作用:
只有進程進入到臨界區才能訪問臨界資源,也即臨界區就是為了讓進程以互斥的方式訪問臨界資源而設置的。
3、同步機制應遵循的規則
- 空閑讓進:當臨界資源處于空閑狀態,應允許一個請求進入臨界區的進程立即進入臨界區。
- 忙則等待:進程正在訪問某臨界資源則不允許其它的進程再進入到臨界區去訪問這個臨界資源,而是讓它等待。
- 有限等待:進程在等待進入臨界區訪問臨界資源時,應該限制這個等待的時間。
- 讓權等待:權是指處理機的使用權。
二、信號量機制
1、整型信號量
- 信號量S:表示系統某類資源可用的個數。
- 原子操作wait(S):進程申請一個資源; P操作
- 原子操作signal(S):進程釋放一個資源。V操作
在進程對某類臨界資源進行訪問時必須執行而且只能執行這兩個原子操作才能對資源進行訪問。
wait和signal操作可描述為:
wait(S):? ? ? ? ?while S≤0 do no-op? ? ? ? ? ? ? ? ? S≤0表示系統中沒有此類資源
? ? ? ? ? ? ? ? ? ? ?S:=S-1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若系統還有這類資源,則允許進程訪問,并且在進程訪問時將該類資源的個數減少一個。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??—————申請資源的操作/P操作
signal(S):? ? ? S:=S+1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 進程在訪問完資源后要釋放此類資源,系統中的這類資源就增加一個,因此要將信號量S做加一操作
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??—————釋放資源的操作/V操作
P、V操作的性質:
具有原子性,進程只有通過 P操作 或是 V操作 才可以對信號量S進行修改,其它的進程不能同時對信號量S進行修改的。
利用 P、V操作 實現進程對資源的互斥訪問。
利用P、V操作實現對臨界資源的互斥訪問
例如:系統中有兩個進程A和B競爭進入臨界區,用信號量S表示臨界區這種資源的個數,并設S的初始值為1,那么描述如下:
進程A ? 進程B
…… ? ?……
P(S); ? P(S);
臨界區操作; ? ? ? 臨界區操作;
V(S); ? V(S);
利用P、V操作實現進程間的簡單同步。
例如:設S是信號量,表示緩沖區的所存放的信息資源個數,在這里我們讓這一個緩沖區中只能存放一個信息,且初始值為0:
進程A 進程B
…… ??? ……
將信息送到緩沖區; ? P(S);
V(S); ?把信息從緩沖區取走;
型號量機制注意事項
- 如果只有wait操作而沒有signal操作,那么會出現只申請資源而不釋放資源,使得別的進程由于申請不到該類資源而處于阻塞狀態并且有可能一直處于阻塞狀態。
- 如果只有signal操作而沒有wait操作,那么說明任何一個進程都可以修改信號量的值,從而不能保證進程對臨界資源的互斥訪問。
- 這兩個操作是必須成對出現的,但是可以不在一個進程中同時出現,如用P、V操作實現進程同步的例子。
整型信號量的缺點
違反同步機制中 “讓權等待” 的規則
2、記錄型信號量
在信號量機制中,除了一個用于代表資源數目的整型變量value外,還應增加一個進程鏈表L,用于鏈接那些由于申請不到某類臨界資源而暫時等待的所有進程。它所包含的上述兩個數據項可描述為:
type semaphore=record
value: integer ;
L: list of process ;
end
wait和signal操作可描述為:
procedure wait(S)
var S:semaphore;
begin
S.value:=S.value-1;
if S.value<0 then block(S.L)
end
?
procedure signal(S)
var S:semaphore;
begin
S.value:=S.value+1;
if S.value≤0 then wakeup(S.L);
end
?
P操作的功能描述
?
V操作的功能描述
?
記錄型信號量的物理意義
- S.value > 0時, S.value為系統中可用資源的數量;
- S.value = 0時,可用資源量正好用完;
- S.value < 0時,| S.value |為系統中等待使用該資源的隊列長度,即 (在信號量上等待的進程數)。
?3、AND型信號量
?AND同步機制的基本思想
將進程在整個運行過程中需要的所有資源,一次性全部地分配給進程,等進程使用完后再一起將這些資源釋放。
因此可以在wait操作中通過增加一個“AND”條件來實現同時申請操作,即Swait操作, Swait定義如下:
Swait (S1,S2,…,Sn)
if S1≥1 and … and Sn≥1 then
for i:﹦1 to n do
Si:﹦Si﹣1;
endfor
else
place the process in the waiting queue associated with
the first Si found with Si<1, and set the program count of
this process to the beginning of Swait operation
endif
Ssignal (S1,S2,…,Sn)
for i:﹦1 to n do
Si:﹦Si﹢1;
remove all the process waiting in the queue
associated with Si into the ready queue
endfor;
4、信號量集
對AND信號量機制加以擴充,對進程所申請的所有資源以及每類資源不同的資源需求量,在一次P、V原語操作中完成申請或釋放。
其中
- Si:資源信號量,系統目前有的資源數;
- ti:某資源分配的下限;
- di:進程對某資源的需求量。
Swait (S1,t1,d1,…,Sn,tn,dn)
if S1≥t1 and … and Sn≥tn then
for i:﹦1 to n do
Si:﹦Si﹣di;
endfor
else
Place the process in the waiting queue of the first Si with Si<ti and set its program
counter to the beginning of the Swait Operation
endif
Ssignal (S1,d1,…,Sn,dn)
for i:﹦1 to n do
Si:﹦Si﹢di;
Remove all the process waiting in the queue associated with Si into the ready queue
endfor;
在信號量集機制中對于Swait操作有以下幾種特殊情況:
(1)Swait ( S, d, d )
此時在信號量集中只有一個信號量S,但允許它每次申請d個資源,當現有資源數少于d時,不予分配。
(2)Swait ( S, 1, 1 )
此時的信號量集已蛻化為一般的記錄型信號量(S>1時)或互斥信號量(S=1時)。
(3)Swait ( S, 1, 0 )
這是一種很特殊且很有用的信號量操作。當S≥1時,允許多個進程進入某特定區;當S變為0后,將阻止任何進程進入特定區。換言之,它相當于一個可控開關。
5、信號量的作用
(1)利用信號量實現進程互斥
? ??
(2)利用信號量實現前驅關系
例:設有兩個并發執行的進程P1和P2。 P1中有語句S1;P2中有語句S2。要求實現S1先于S2執行。
分析:進程P1和P2兩者之間的關系。
解決:設置公用信號量S,初始值為0。
在進程P1中:
……
執行S1;
signal(S);
……
在進程P2中:
……
wait(S);
執行S2;
……
轉載于:https://www.cnblogs.com/weiyalin/p/10802930.html
總結
以上是生活随笔為你收集整理的操作系统(八)进程管理——进程同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 50126实现
- 下一篇: Windows EC2 Instance