進程同步機制


臨界區

  雖然多個進程可以共享系統資源,但是其中許多資源一次只能被一個進程使用,這種資源稱為臨界資源。將每一個進程訪問臨界資源的那段代碼稱作臨界區,為了保證臨界資源正常使用,可以把臨界資源訪問分為四個部分:

  1. 進入區   進入區檢查當前代碼是否可以進入臨界區,如果可以進入臨界區,則應該應該設置正在訪問臨界區的標志,以阻止其它進程同時進入臨界區。
  2. 臨界區   指進程訪問臨界資源的那段代碼。
  3. 退出區   將正在訪問臨界區的標志清除。
  4. 剩余區   代碼中的其余部分。

為避免兩個進程同時進入臨界區,同步機制應該遵尋以下准則:

  • 空閑讓進   臨界區空閑時,可以允許一個請求進入臨界區的進程立即進入臨界區
  • 忙則等待   當已有`進程進入臨界區時,其它試圖進入臨界區的進程必須等待
  • 有限等待   對請求訪問的進程,應該保證能在有限時間內進入臨界區
  • 讓權等待   當進程不能進入臨界區時,應立即釋放處理器,防止進程忙等待。

區分同步和互斥: 同步稱作直接制約關系,它是指為了完成某種任務而建立的2個或者多個進程,這些進程因為要在某些位置上協調工作次序而等待、傳遞消息所產生的制約關系。例如:寫進程A通過單緩沖區向讀進程B提供數據。當緩沖區為空時,進程B因為不能獲得數據而阻塞,一旦進程B將數據寫入緩沖區,進程B被喚醒,反之,當緩沖區滿時,進程A被阻塞,僅當B取走緩沖區數據時,才喚醒A。 互斥稱作間接制約關系,它指當一個進程進入臨界區時空,另一個進程必須等待,當它退出臨界區時,另一個進程才允許訪問臨界區。例如有一台打印設備,有兩個進程A和B,如果A需要打印時,系統已經將打印機分配給B,則進程A必須阻塞,一段進程B將打印機釋放,系統便喚醒進程A,並將其阻塞狀態變為就緒狀態。

未完,待續....


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com