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:|)
- 消息隊列
- 共享內存(快,不同步)