管程的特点
管程將共享變量和對它們的操作集中在一個模塊中,操作系統或并發程序就由這樣的模塊構成。這樣模塊之間聯系清晰,便于維護和修改,易于保證正確性。
從語言的角度看,管程主要有以下特性:
(1)模塊化。管程是一個基本程序單位,可以單獨編譯;?
(2)抽象數據類型。管程是中不僅有數據,而且有對數據的操作;?
(3)信息掩蔽。管程外可以調用管程內部定義的一些函數,但函數的具體實現外部不可見;?
對于管程中定義的共享變量的所有操作都局限在管程中,外部只能通過調用管程的某些函數來間接訪問這些變量。因此管程有很好的封裝性。管程通常是用于管理資源的,因此管程中有進程等待隊列和相應的等待和喚醒操作。
管程有一個很重要的特性,即任一時刻管程中只能有一個活躍進程,這一特性使管程能有效地完成互斥。管程是編程語言的組成部分,編譯器知道它們的特殊性,因此可以采用與其他過程調用不同的方法來處理對管程的調用。典型的處理方法是,當一個進程調用管程過程時,該過程中的前幾條指令將檢查在管程中是否有其他的活躍進程。如果有,調用進程將被掛起,直到另一個進程離開管程將其喚醒。如果沒有活躍進程在使用管程,則該調用進程可以進入。? ? 進入管程時的互斥由編譯器負責,但通常的做法是用一個互斥量或二元信號量。在任一時刻,寫管程的人無須關心編譯器是如何實現互斥的。他只需知道將所有的臨界區轉換成管程過程即可,決不會有兩個進程同時執行臨界區中的代碼。
? ? 在管程入口有一個等待隊列,稱為入口等待隊列。當一個已進入管程的進程等待時,就釋放管程的互斥使用權;當已進入管程的一個進程喚醒另一個進程時,兩者必須有一個退出或停止使用管程。在管程內部,由于執行喚醒操作,可能存在多個等待進程(等待使用管程),稱為緊急等待隊列,它的優先級高于入口等待隊列。 一個進程進入管程之前要先申請;離開時釋放使用權,如果緊急等待隊列不空,則喚醒第一個等待者。
總結
                            
                        - 上一篇: question: student_li
 - 下一篇: 管程,进程及线程之间的区别