《現代作業系統》閱讀筆記——排程和死鎖
阿新 • • 發佈:2018-11-23
排程
-
何時需要排程
- 建立新的程序時
- 執行父程序還是子程序
- 程序退出時
- 程序阻塞時
- I/O中斷結束後
- 建立新的程序時
-
排程演算法目標
- 給所有程序公平的CPU份額
- 能夠保證按照規定的策略執行
- 比如某些安全控制程序必須能夠得到執行
- 保持系統的每個部分都忙碌
-
兩種排程方式
- 搶佔式
- 一個程序最多執行n ms, 如果還沒執行結束,就會被始終中斷,呼叫別的程式
- 非搶佔式
- 一個程序可以執行任意時間知道他阻塞或者自願放棄CPU
- 搶佔式
-
常見排程演算法
- 先進先服務
- 最短任務優先
- 輪轉排程
- 一個任務最多隻能執行規定時間
- 很難設定規定時間應該多長
- 優先順序排程
- 低優先順序程序可能會飢餓
- 彩票排程
- 無法防止低優先順序使用者執行大量小程序來獲得更多的CPU資源的作弊手段
- 最短剩餘時間優先
-
哲學家就餐問題
- 第一種解決方法是等待左右叉子空餘,若有空餘則立即拿起
- 如果所有人同時拿起左叉子就會死鎖
- 第二種解決方法是拿起左叉子,如果有右叉子,就吃;如果沒有,就放下左叉子,等待
- 如果所有人同時開始執行,則沒人開始吃,死鎖
- 這種可能性很小,但是對於核電站等要求十分可靠的應用則不行
- 第三種方法就時對第一種方法加個鎖
- 但是這時只能允許一個哲學家進餐,效率太低
- 最後一種方法如下
- 第一種解決方法是等待左右叉子空餘,若有空餘則立即拿起
死鎖
- 資源型別
- 可搶佔資源
- 可以從擁有它的程序中搶佔而不會產生副作用
- 儲存器, 印表機
- 不可搶佔資源
- 從佔有她的程序搶佔會產生副作用
- 正在刻錄的光碟
- 可搶佔資源
- 多個程序獲取資源的順序應該一致,否則可能會死鎖
- 可能程序A獲得資源1,而B獲得資源2,然後每個程序都想請求另一個資源
- 死鎖發生的必要條件
- 互斥條件
- 一個資源要麼被分配給一個資源,要麼可用
- 佔有和等待條件
- 一個已經得到某個資源的程序可以繼續請求別的資源
- 不可搶佔條件
- 已經被分配給一個基礎的資源不可被其他程序搶佔,只能被該程序自己釋放
- 環路等待條件
- 死鎖發生時,會有一個環路產生,環路中的每個程序都要獲取後一個程序的資源
- 互斥條件
- 死鎖恢復方法
- 利用搶佔恢復
- 利用回滾恢復
- 通過殺死程序直接恢復