1. 程式人生 > >程序的互斥與同步

程序的互斥與同步

引入程序,為了描述和實現多個程式的併發執行,以改善資源利用率即提高系統的吞吐量

引入執行緒,減少程式併發執行時系統所付出的額外開銷,使作業系統具有更好的併發性

 

程序的互斥與同步

注意:同步即協調

採用多道程式技術的作業系統,允許多個程序同時駐留記憶體併發執行,若干程序將不可避免的會競爭系統資源。如對處理器,記憶體空間,印表機等資源的競爭。

如何協調多個程序對系統資源(記憶體空間,外部裝置等)的競爭和共享?


如果競爭某資源的程序太多,這些程序還必須等待在一個佇列中。如就緒佇列,阻塞佇列

如果長期得不到資源,程序可能進入死鎖

 

程序競爭資源必須解決“互斥問題”,某些資源必須互斥使用,這些資源稱為臨界資源

,訪問臨界資源的那段程式碼稱為臨界區

進入臨界區,需要判斷是否可以進入臨界區,如果可以,則必須設定臨界區使用標誌

後來的程序檢視臨界區的使用標誌,進入阻塞佇列

互斥條件總結為如下16個字:

忙則等待;優先等待;空閒讓進;讓全等待

 

競爭資源還可能出現死鎖,飢餓


程序之間需要通訊協作來協調

當程序進行通訊協作時,各個程序之間需要建立連線,程序通訊需要同步和協調。程序通訊的方式很多,包括訊息傳遞、管道、共享儲存區等。

通過訊息傳遞實現程序通訊時,由於沒有共享資源,故無需互斥,但仍然可能出現死鎖和飢餓

 

解決互斥與同步的方法

 

1、  軟體方法

由程序自己,執行相應的程式指令,實現與別的程序的同步與互斥

 

2、  硬體方法

遮蔽中斷或採取專門的機器指令控制同步與互斥

程序不會切換,實現互斥。可能出現飢餓現象,死鎖現象

 

3、  訊號量方法

控制程序同步與互斥的通用方法

 

4、管程的方法

 

5、訊息傳遞方法