操作系统 进程管理(三)——进程同步方法简述
目錄
進程同步的基本概念
1)兩種形式的制約關系
2)Critical section(臨界區)
3)Mutual exclusion(互斥)
4)Dead lock(死鎖)
5)Starvation(饑餓)
6)面包問題(鎖的概念)
同步機制原則
實現進程互斥的方法
方法一 基于軟件的解決方案
算法一 x
算法二 x
算法三 x
算法四——Peterson算法 1981 √
算法五——Backery算法作為補充
方法二? 禁用硬件中斷
(一)鎖方法 TS互斥
(二)交換指令Swap方法
方法三? 信號量機制
1)整型信號量
2).記錄型信號量
3)AND型信號量集機制
?3)一般信號量集機制
在多道系統中,并發執行的諸進程之間,既有獨立性,又有制約性。
獨立性是指各進程都可獨立地向前推進;
制約性是指由于資源共享和進程合作所引起的進程之間的相互依賴和相互制約的關系。進程之間的相互制約關系有兩種:互斥和同步,互斥也可看作是一種同步,一種特殊的同步。
進程同步的基本概念
1)兩種形式的制約關系
(1)間接相互制約關系。
(2) 直接相互制約關系。
2)Critical section(臨界區)
臨界區是指進程中的一段需要訪問共享資源并且當一個進程處于響應代碼區域時編不會被執行的代碼區域。
3)Mutual exclusion(互斥)
當一個進程處于臨界區并訪問共享資源時,沒有其他進程會處于臨界區并且訪問任何相同的共享資源。
4)Dead lock(死鎖)
兩個或以上的進程,在相互等待完成特定任務,而最終沒法將自身任務進行下去。
5)Starvation(饑餓)
一個可執行的進程,被調度器持續忽略,以至于雖然處于可執行狀態卻不被執行。
6)面包問題(鎖的概念)
-Lock (鎖)∶在門、抽屜等物體上加上保護性裝置,使得外人無法訪問物體內的東西,只能等待解鎖后才能訪問。
-Unlock(解鎖):打開保護性裝置,使得可以訪問之前被鎖保護的物體類的東西。
-Deadlock (死鎖)∶A拿到鎖1,B拿到鎖2,A想繼續拿到鎖2后再繼續執行,B想繼續拿到鎖1后再繼續執行。導致A和B誰也無法繼續執行。
同步機制原則:
空閑讓進:當無進程處于臨界區時,表明臨界資源處于空閑狀態,應允許一個請求進入臨界區的進程立即進入自己的臨界區,以有效利用臨界資源
忙則等待:當已有進程進入臨界區時,表明臨界資源正在被占用,因而其他試圖進入臨界區的進程必須等待,以保證對臨界資源的互斥使用
有限等待:對要求訪問臨界資源的進程,應保證在有限時間內能進入到自己的臨界區,以免陷入死等的狀態
讓權等待:當進程不能進入自己的臨界區時,應立即釋放處理機,以避免進程陷入忙等狀態
實現進程互斥的方法
解決臨界區問題的三個必須標準:互斥訪問, 進入(即不死鎖), 有限等待(即不餓死)
方法一 基于軟件的解決方案
?算法一 x
缺點:滿足互斥,但是Starvation。必須輪流使用臨界區,不能同一進程使用兩次
? ? ? ? ? ?一個進程失敗,另一個將被永久阻塞。
算法二 x
缺點:不能互斥,若起初設置flag[i]和flag[j]都為false,那么可以先執行?1再執行2,這樣就同時進入臨界區了。
算法三 x
缺點:? 滿足互斥,但是死鎖先執行1再執行2,兩者都無法進入臨界區
算法四——Peterson算法 1981 √
這個佬講得很好:Peterson‘s Algorithm皮特森算法詳解_我知道你是高手的博客-CSDN博客_皮特森算法
flag數組:為了判定是否有其他進程想要進入臨界區(避免如果沒有其他進程想要進入,當前進程一直空等)
turn變量:為想要進入臨界區的進程進行排序(turn==i則Pj在前,turn==j則Pi在前),先提出申請的進程優先進入臨界區,其他進程等待,就這樣實現了對臨界區訪問的互斥。
若Pi和Pj都想進入臨界區,i先提出申請,j后提出申請,進入while循環判定時turn==i(Pi執行turn=j在前,Pj執行turn=i在后,所以while循環中的turn==i);先提出申請的進程先進入臨界區;Pi走到while循環,此時flag[j]==true,turn==i,不滿足循環條件,跳出(若是Pj不想進入臨界區壓根就沒有提出申請,那么flag[j]==false,更不滿足循環條件),Pi就可以繼續進入critical section;Pj走到while循環,但是因為此時flag[i]==ture且turn==i,Pj陷入while循環中無法進入critical section,Pj需要一直等到Pi退出臨界區時置flag[i]==false才能跳出循環,進入臨界區;
算法五——Backery算法作為補充
方法二? 禁用硬件中斷
?沒有中斷,沒有上下文切換,因此沒有并發
? ? ? ? >硬件將中斷處理延遲到中斷被啟用之后
? ? ? ? >大多數現代計算機體系結構都提供指令來完成
(一)鎖方法 TS互斥
進入臨界區 >禁用中斷
離開臨界區 >開啟中斷
(二)交換指令Swap方法
缺點:一旦中斷被禁用,線程無法被停止,整個系統都會停下,可能導致其他線程starvation
? ? ? ? ???臨界區若可以任意長,無法限制響應中斷所需時間:忙等
方法三? 信號量機制
1)整型信號量
抽象數據類型:一個整形(sem),兩個原子操作
- P(): sem減1,如果sem<0,等待,否則繼續(wait(S))
- v(): sem加1,如果sem<=0,喚醒一個等待的P(signal(S))
ps:
- Sem表示空閑資源數(鎖方法中僅為一個,或一個進程使用)
- P操作申請一個資源,V操作釋放一個資源。
- 缺點: “忙等”,故把這種PV操作稱為“忙等”PV操作。
- P.V操作必須為原子操作,對于單處理機,可用禁止中斷實現, 對于多處理機,要用軟件協助解決。
- P.V操作必須成對出現。
e.g.計算機系統的打印機? 圖from:信號量機制_fFee-ops的博客-CSDN博客_信號量機制
2).記錄型信號量
——為克服“忙等”,重新對信號量和P.V操定義
圖from:?信號量機制_fFee-ops的博客-CSDN博客_信號量機制
注意:
??? S.Value? >0? 表示某類可用資源的數量
? ? ? ? ? ? ? ? ??<0? 其絕對值為因請求該資源而被阻塞的進程數
??? S.Value的初值為1時,表示只允許一個進程訪問臨界資源,此時的信號量轉化為互斥信號量。
3)AND型信號量集機制
基本思想:
- 將進程在整個運行過程中需要的所有資源,一次性全部地分配給進程,待進程使用完后再一起釋放;(類似于數據庫中的事務)
- 對若干個臨界資源的分配,采取原子操作方式要么全部分配到進程,要么一個也不分配;
- 為此,在wait操作中,增加了一個“AND”條件,故稱為AND同步;
定義如下:
?3)一般信號量集機制
每次只能獲得或釋放一個單位的臨界資源太低效;
當資源數量低于某一下限值時,便不予分配;
基于以上兩點對And信號進行擴充。
?特殊情況討論:
(1)Swait(S,d,d)。
??? 此時在信號量集中只有一個信號量,但它允許每次申請d個資源,當現有資源數少于d時,不予分配。
(2)Swait(S,1,1)。
??? 此時的信號量集蛻化為一般的記錄型信號量(S>1時)或互斥信號量(S = 1 時)。
(3)Swait(S,1,0)。??? 相當于一個可控開關
??? 這是一種很特殊且很有用的信號量,不分配資源。
??? 當S>=1時,允許多個進程進入某特定區;
??? 當S=0時,將阻止任何進程進入特定區。
總結
以上是生活随笔為你收集整理的操作系统 进程管理(三)——进程同步方法简述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android没有无线显示器,手机的无线
- 下一篇: 【开源】物联网智慧消防云平台系统,前后端