1. 程式人生 > >《現代作業系統》閱讀筆記——排程和死鎖

《現代作業系統》閱讀筆記——排程和死鎖

排程

  • 何時需要排程

    • 建立新的程序時
      • 執行父程序還是子程序
    • 程序退出時
    • 程序阻塞時
    • I/O中斷結束後
  • 排程演算法目標

    • 給所有程序公平的CPU份額
    • 能夠保證按照規定的策略執行
      • 比如某些安全控制程序必須能夠得到執行
    • 保持系統的每個部分都忙碌
  • 兩種排程方式

    • 搶佔式
      • 一個程序最多執行n ms, 如果還沒執行結束,就會被始終中斷,呼叫別的程式
    • 非搶佔式
      • 一個程序可以執行任意時間知道他阻塞或者自願放棄CPU
  • 常見排程演算法

    • 先進先服務
    • 最短任務優先
    • 輪轉排程
      • 一個任務最多隻能執行規定時間
      • 很難設定規定時間應該多長
    • 優先順序排程
      • 低優先順序程序可能會飢餓
    • 彩票排程
      • 無法防止低優先順序使用者執行大量小程序來獲得更多的CPU資源的作弊手段
    • 最短剩餘時間優先
  • 哲學家就餐問題

    • 第一種解決方法是等待左右叉子空餘,若有空餘則立即拿起
      • 如果所有人同時拿起左叉子就會死鎖
    • 第二種解決方法是拿起左叉子,如果有右叉子,就吃;如果沒有,就放下左叉子,等待
      • 如果所有人同時開始執行,則沒人開始吃,死鎖
      • 這種可能性很小,但是對於核電站等要求十分可靠的應用則不行
    • 第三種方法就時對第一種方法加個鎖
      • 但是這時只能允許一個哲學家進餐,效率太低
    • 最後一種方法如下

    在這裡插入圖片描述

死鎖

  • 資源型別
    • 可搶佔資源
      • 可以從擁有它的程序中搶佔而不會產生副作用
      • 儲存器, 印表機
    • 不可搶佔資源
      • 從佔有她的程序搶佔會產生副作用
      • 正在刻錄的光碟
  • 多個程序獲取資源的順序應該一致,否則可能會死鎖
    • 可能程序A獲得資源1,而B獲得資源2,然後每個程序都想請求另一個資源
  • 死鎖發生的必要條件
    • 互斥條件
      • 一個資源要麼被分配給一個資源,要麼可用
    • 佔有和等待條件
      • 一個已經得到某個資源的程序可以繼續請求別的資源
    • 不可搶佔條件
      • 已經被分配給一個基礎的資源不可被其他程序搶佔,只能被該程序自己釋放
    • 環路等待條件
      • 死鎖發生時,會有一個環路產生,環路中的每個程序都要獲取後一個程序的資源
  • 死鎖恢復方法
  • 利用搶佔恢復
  • 利用回滾恢復
  • 通過殺死程序直接恢復