臨界資源
臨界資源
各進程採取互斥的方式,實現共享的資源稱作臨界資源。
屬於臨界資源的硬體有印表機、磁帶機等,軟體有消息緩衝隊列、變數、數組、緩衝區等。諸進程間應採取互斥方式,實現對這種資源的共享。
每個進程中訪問臨界資源的那段代碼稱為臨界區。顯然,若能保證諸進程互斥地進入自己的臨界區,便可實現諸進程對臨界資源的互斥訪問。為此,每個進程在進入臨界區之前,應先對欲訪問的臨界資源進行檢查,看它是否正被訪問。如果此刻該臨界資源未被訪問,進程便可進入臨界區對該資源進行訪問,並設置它正被訪問的標誌;如果此刻該臨界資源正被某進程訪問,則本進程不能進入臨界區。
在操作系統中,有臨界區的概念。臨界區內放的一般是被1個以上的進程或線程(以下只說進程)共用的數據。
臨界區內的數據一次只能同時被一個進程使用,當一個進程使用臨界區內的數據時,其他需要使用臨界區數據的進程進入等待狀態。
操作系統需要合理的分配臨界區以達到多進程的同步和互斥關係,如果協調不好,就容易使系統處於不安全狀態,甚至出現死鎖現象。
例如,印表機不可能同時列印多個進程的結果,若將一個進程的結果列印幾行,再列印另一個進程的結果,這會使列印的結果變得無法使用。所以兩個或兩個以上進程由於不能同時使用同一臨界資源,只能一個進程使用完了,另一進程才能使用。
除了物理設備外,還有很多軟資源如變數、表格、隊列等也都屬於臨界資源,如果同時使用,同樣會引起與時間相關的錯誤。例如,有兩個進程P1和P2共享一個變數count,P1或P2的功能是,每執行完某些操作后,將count的值取出加1,R1和R2是工作寄存器。當兩個進程按下述順序執行時:
P1:操作序列;
Rl=count;
R1=R1+1;
count=R1;
P2:操作序列;
R2=count;
R2=R2+1;
count=R2;
其結果使count的值增加了2;倘若P1和P2按另一種順序執行,例如:
P1:R1=count;
P2:R2=count;
P1:Rl=Rl+1;count=Rl;
P2:R2=R2+1;count=R2;
按此執行序列,雖使P1和P2都各自對count做了加1操作,但最後的count值卻只增加了1,即出現了結果不確定的錯誤。顯然這種錯誤與執行順序有關,又叫與時間相關的錯誤。之所以出現這種錯誤,是由於變數count是臨界資源,P1和P2不能同時使用,即僅當進程P1對count進行修改並退出后,才允許進程P2訪問和修改,那麼就可以避免上述的錯誤結果。