引言
本文爲第六篇,作業管理之進程調度,本文主要介紹進程調度的概述和進程調度的算法
一、進程調度概述
進程調度是指計算機通過決策決定哪個就緒進程可以獲得CPU使用權。也就是說,進程調度指的是計算機選擇哪一個進程可以使用CPU,前提是這個進程的狀態爲就緒狀態
進程調度有兩個步驟:
- 保留舊進程的運行信息,請出舊進程
- 選擇新進程,準備運行環境並分配CPU
爲了實現進程調度的這兩個步驟,就需要了解三種重要的機制:
- 就緒隊列的排隊機制
- 選擇運行進程的委派機制
- 新老進程的上下文切換機制
就緒隊列的排隊機制
(1)就緒隊列的排隊機制
就緒隊列中擺放着所有的就緒狀態的進程
就緒隊列的排隊機制就是爲了提高進程調度的效率,事先將就緒進程按照一定的方式排成隊列,以便調度程序可以最快找到就緒進程
(2)選擇運行進程的委派機制
這個機制就要求可以從就緒隊列中選出一個進程,然後讓去CPU中進行執行。調度程序以一定的策略選擇就緒進程,將CPU資源分配給它
(3)新老進程的上下文切換機制
如果要將新的進程調度到CPU中,就需要將老的進程的CPU環境備份出來,然後將新的進程的CPU環境切換進去。它保存當前進程的上下文信息,裝入被委派執行進程的運行上下文
在CPU裏面有一個高速緩存,這個機制就是首先將老進程的上下文備份到主存中,接着將新的進程的上下文放入到CPU中,準備環境,讓新的進程可以運行起來,這個就是新老進程的上線文切換機制。這三個就是進程調度所需要的三個基本的機制
思考一個問題,如果進行調度的時候,老的進程還沒有執行完,這個時候怎麼辦?
按照老的進程有沒有執行完,將進程調度的方法分爲兩大類:
- 非搶佔式的調度
- 搶佔式調度
非搶佔式的調度
- CPU一旦分配給某個進程,就讓該進程一直使用下去
- 調度程序不以任何原因搶佔正在被使用的CPU
- 直到進程完成工作或因爲IO阻塞纔會讓出CPU
搶佔式調度
- 允許調度程序以一定的策略暫停當前運行的進程
- 保存好舊進程的上下文信息,分配CPU給新進程
兩種方式進行一個對比
進程調度的算法
- 先來先服務調度算法
- 短進程優先調度算法
- 高優先權優先調度算法
- 時間片輪轉調度算法
先來先服務調度算法
在就緒隊列中,按照先來先服務的原則,優先選擇隊列前面的進程進行調度
短進程優先調度算法
- 調度程序優先選擇就緒隊列中估計運行時間最短的進程
- 短進程優先調度算法不利於長作業進程的執行
高優先權優先調度算法
這個算法是以優先級爲基礎的
- 進程附帶優先權,調度程序優先選擇權重高的進程
- 高優先權優先調度算法使得緊迫的任務可以優先處理
前邊文章中有說到,前臺進程的優先級要高於後臺進程的優先級,因爲前臺進程是與用戶進行交互的,爲了保證用戶在使用系統的時候不會卡頓,因此前臺進程權重就要高於後臺進程
時間片輪轉調度算法
按先來先服務的原則排列就緒進程
每次從隊列頭部取出待執行進程,分配一個時間片執行(把這個時間片用完了,不管這個進程有沒有執行完,都會將這個進程重新的插到隊列的尾部。每個進程分配的時間片都是一樣的)。是相對公平的調度算法,但不能保證及時響應用戶
在快速變化的技術中尋找不變,纔是一個技術人的核心競爭力。知行合一,理論結合實踐
站在了巨人的肩膀上學習,向前輩致敬
參考:https://coding.imooc.com/class/355.html