進程通信

互斥:一個進程佔用資源,其他進程不能使用這個資源,則資源的使用是互斥的。
死鎖:多個進程各佔用部分資源,形成循環等待
飢餓:其他進程可能輪流佔用資源,一個進程一直得不到資源
臨界區:進程中訪問臨界資源的一段需要互斥執行的代碼,任何時刻只允許一個進程在該區域執行。

信號量

  • 是OS提供的一種協調共享資源訪問的方法;
  • OS是管理者,地位高於進程,當OS執行它的代碼時,優先級高於進程中的用戶代碼,所以可以保證不受應用進程的干擾,進而可以保證該操作的原子性;
  • 用信號量表示系統資源的數量。
  • 由一個整型(sem)變量和兩個原子操作組成
    • p()操作申請資源時使用,當申請資源時將計數減1;如果申請資源時sem<0,則進入等待,否則繼續
    • V()操作釋放資源,將計數加1,如果sem小於等於0,則喚醒一個等待進程
    • p操作可能阻塞,v按照不會阻塞

生產者消費者問題:

  • 任何時刻只能有一個線程操作緩衝區
  • 緩衝區空時,消費者必須等待生產者
  • 緩衝區滿時,生產者必須等待消費者
  • 生產者檢查是否有空緩衝區
  • 消費者檢查是否緩衝區有數據
    在這裏插入圖片描述

管程

  • 管程是一種用於多線程互斥訪問共享資源的程序結構
    • 正在管程中的線程可臨時放棄管程的互斥訪問,等待事件出現時恢復

哲學家就餐問題
讀者寫者問題

死鎖

出現死鎖的必要條件

  • 資源互斥:任何時刻只能有一個進程使用一個資源實例
  • 持有並等待:進程保持至少一個資源,並正在等待獲取其他進程持有的資源
  • 非搶佔:資源只能在進程使用後自動釋放
  • 循環等待:存在等待進程集合(p0、p1、。。。、pn)
    • p0等待p1佔用的資源、p1等待p2佔用的資源、。。。Pn等待p0佔用的資源

破壞上述任何一個條件可以進行死鎖預防

  • 互斥:把互斥的共享資源封裝成可同時訪問
  • 持有並等待:進程請求資源時,要求它不持有任何其他資源;僅允許進程在開始執行時,一次請求所有需要的資源,導致資源利用率低。
  • 非搶佔:如果進程請求不能立即分配的資源,則釋放已佔有資源;只有在能夠同時獲得所需資源時,才執行分配操作。
  • 循環等待:對資源排序,要求進程按順序請求資源

死鎖避免:利用額外的先驗信息,在分配資源時判斷是否會出現死鎖,只在不會死鎖時分配資源

  • 要求進程聲明需要資源的最大數目
  • 限定提供與分配的資源數量,確保滿足進程的最大需求
  • 動態檢查資源分配狀態,確保不會出現循環等待

銀行家算法
死鎖檢測、死鎖恢復

進程通信

信號、管道、消息隊列、共享內存
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
共享內存
在這裏插入圖片描述
在這裏插入圖片描述

發佈了124 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章