程序的互斥與同步
阿新 • • 發佈:2018-11-08
引入程序,為了描述和實現多個程式的併發執行,以改善資源利用率即提高系統的吞吐量
引入執行緒,減少程式併發執行時系統所付出的額外開銷,使作業系統具有更好的併發性
程序的互斥與同步
注意:同步即協調
採用多道程式技術的作業系統,允許多個程序同時駐留記憶體併發執行,若干程序將不可避免的會競爭系統資源。如對處理器,記憶體空間,印表機等資源的競爭。
如何協調多個程序對系統資源(記憶體空間,外部裝置等)的競爭和共享?
如果競爭某資源的程序太多,這些程序還必須等待在一個佇列中。如就緒佇列,阻塞佇列
如果長期得不到資源,程序可能進入死鎖
程序競爭資源必須解決“互斥問題”,某些資源必須互斥使用,這些資源稱為臨界資源 ,訪問臨界資源的那段程式碼稱為臨界區
進入臨界區,需要判斷是否可以進入臨界區,如果可以,則必須設定臨界區使用標誌
後來的程序檢視臨界區的使用標誌,進入阻塞佇列
互斥條件總結為如下16個字:
忙則等待;優先等待;空閒讓進;讓全等待
競爭資源還可能出現死鎖,飢餓
程序之間需要通訊協作來協調
當程序進行通訊協作時,各個程序之間需要建立連線,程序通訊需要同步和協調。程序通訊的方式很多,包括訊息傳遞、管道、共享儲存區等。
通過訊息傳遞實現程序通訊時,由於沒有共享資源,故無需互斥,但仍然可能出現死鎖和飢餓
解決互斥與同步的方法
1、 軟體方法
由程序自己,執行相應的程式指令,實現與別的程序的同步與互斥
2、 硬體方法
遮蔽中斷或採取專門的機器指令控制同步與互斥
程序不會切換,實現互斥。可能出現飢餓現象,死鎖現象
3、 訊號量方法
控制程序同步與互斥的通用方法
4、管程的方法
5、訊息傳遞方法