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