操作系統:處理器調度

1、CPU資源的時分複用

進程切換: CPU資源的當前佔用者切換。

  • 保存當前進程在PCB中的執行上下文(CPU狀態);
  • 恢復下一個進程的執行上下文。

處理器調度:

  • 從就緒隊列中挑選下一個佔用CPU運行的進程
  • 從多個可用CPU中挑選就緒進程可使用的CPU資源

調度程序: 挑選就緒進程的內核函數。

  • 調度策略:依據什麼原則挑選進程/線程?
  • 調度時機:什麼時候進行調度?

2、調度算法

  • 先來先服務調度算法
    從就緒隊列中選擇最先進入該隊列的進程,分配處理器,然後投入工作。FCFS算法適合CPU繁忙型作業。

  • 短作業(進程)優先算法
    該算法是對短作業或短進程優先調度的算法。該算法降低了平均週轉時間和平均帶權週轉時間。但是該算法對長作業不利。

  • 高優先權優先調度算法
    根據作業或進程的優先權調度作業或者進程。而該算法又能分爲非搶佔式的和搶佔式的。
    而優先權又有靜態優先權和動態優先權。
    靜態優先權是在創建進程時確定的,在進程運行期間不會變化。
    動態優先權可以隨進程的推進而變化。
    在優先調度算法中還有個高響應比優先調度算法:優先權=(等待時間+要求服務時間)/要求服務時間。該算法既照顧了短作業,又考慮作業先後到達時間,不會使長作業等太長時間。

  • 基於時間片的輪轉調度算法
    給進程分配一個時間片段,當時間片段一過,把處理器交給別的進程。

  • 多級反饋隊列調度算法
    該算法首先會設置多個就緒隊列(多種算法集成),每個隊列的優先級不同,優先權高的隊列中的進程分到時間片就小;根據FCFS對每個隊列中的進程進行排隊;當第一隊列空閒後,調度程序才調度第二隊列中的進程。

    • 時間片大小隨優先級級別增加而增加;
    • 進程在當前的時間片沒有完成,則降到下一個優先級;
    • 特徵:CPU密集型進程的優先級下降很快;I/O密集型進程停留在高優先級。

3、死鎖

死鎖是多個進程在爭奪資源的過程中造成的僵局。
例如:A和B進程都需要資源S1和S2,當A獲得了S1,B獲得了S2,但是兩個人都不釋放獲得的資源,但是也都不能執行,這就造成了死鎖。

產生死鎖原因:
①資源競爭:競爭非剝奪性資源(獲得後不能強行回收的資源)、競爭臨時性資源(由一個進程產生,被另一個進程用後便無用的資源)
②進程間推進順序非法

產生死鎖的必要條件:
①互斥條件
②持有並等待條件
③非搶佔條件
④循環等待條件

處理死鎖的方法:
①預防死鎖:
主要是破壞產生死鎖條件中的234 三個條件。但是可能會造成資源的浪費,吞吐量的降低。
②避免死鎖
避免死鎖和預防死鎖是不一樣的。預防死鎖是消除產生死鎖的條件,而避免死鎖是預測會不會造成死鎖,如果預測到會造成死鎖,那麼不進行接下來的操作。
最常見避免死鎖的方式是銀行家算法:
銀行家算法的基本思想:當一個進程請求資源時,如果資源足夠,那麼試着把這資源分配給這個進程,預測這個進程結束釋放資源,看剩下的資源是否能給多個進程中的其中一個進程用,如此往復循環,看所有進程是否都能獲得資源,如果可以,那麼就是預測成功,把資源分配給這個進程,如果預測不成功,收回剛纔分配的資源。
③檢測死鎖
檢測死鎖首先要有資源分配的圖,然後再簡化資源分配圖,如果資源分配圖不能簡化,那麼就是有死鎖。
④解除死鎖
如果檢測到了死鎖,那麼就要進行死鎖的解除。
死鎖的解除辦法有:剝奪資源、撤銷進程

4、進程間通訊:

  • 信號(sign)
  • 管道(pipe:|)
  • 消息隊列
  • 共享內存(快,不同步)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章