安徽p2p網(wǎng)站建設(shè)足球進(jìn)球排行榜
文章目錄
- 第二章 進(jìn)程管理
- 調(diào)度的概念、層次
- (一)調(diào)度的基本概念
- (二)調(diào)度的三個層次
- (1)高級調(diào)度
- (2)低級調(diào)度
- (3)中級調(diào)度
- 補(bǔ)充知識:進(jìn)程的掛起態(tài)與七狀態(tài)模型
- (4)三層調(diào)度的聯(lián)系、對比
- 小結(jié)
第二章 進(jìn)程管理
調(diào)度的概念、層次
處理機(jī)調(diào)度
- 基本概念
- 三個層次
- 高級調(diào)度(作業(yè)調(diào)度)
- 中級調(diào)度(內(nèi)存調(diào)度)
- 低級調(diào)度(進(jìn)程調(diào)度)
- 三層調(diào)度的聯(lián)系、對比
- 補(bǔ)充知識
- 進(jìn)程的“掛起態(tài)”
- 七狀態(tài)模型
(一)調(diào)度的基本概念
??其實調(diào)度的概念離我們的生活并不遙遠(yuǎn)。
??比如在我們?nèi)ャy行的時候,這個銀行,它可能有幾個窗口為客戶服務(wù)。那么,這些客戶,到底應(yīng)該先為誰服務(wù)呢?銀行一般采用的是先到先服務(wù)的這種原則。
??如果說此時有一個vip客戶,這個客戶在銀行里可能就會優(yōu)先被服務(wù)、優(yōu)先級更高。
??再看另外一個例子。一個宿舍,早上大家都想上衛(wèi)生間。每個人都想使用,但是有的人想使用3分鐘,有的人要10分鐘,有的人要1分鐘……那么,大家在商量之后,就決定了一種使用這個資源的一個原則:使用時間短的就先使用,使用時間長的就后使用;如果時間長度相同的,先排隊的先使用。
??其實所謂的調(diào)度,它指的就是,當(dāng)我們有一堆任務(wù)要處理的時候,由于當(dāng)前的資源有限,那么這些事情沒辦法同時地被處理,那這個時候,我們就需要按照某種規(guī)則(比如先到先服務(wù)、時間短的優(yōu)先),來決定我們要用什么樣的順序來處理這些任務(wù)。這就是所謂的“調(diào)度”。
??當(dāng)有一堆任務(wù)要處理,但由于資源有限,這些事情沒法同時處理。這就需要確定某種規(guī)則來決定處理這些任務(wù)的順序,這就是“調(diào)度”研究的問題。
(二)調(diào)度的三個層次
(1)高級調(diào)度
??我們來看一下,在一個程序整個生命周期內(nèi),什么時候會發(fā)生調(diào)度的情況。
??第一種,叫做高級調(diào)度,又叫作業(yè)調(diào)度。
??此處補(bǔ)充一下作業(yè)的概念。
??所謂的作業(yè),指的就是某一個具體的任務(wù)。
??可能有時會看到這種描述:用戶向操作系統(tǒng)提交了一個作業(yè)。
??這句話,其實可以理解為:用戶讓操作系統(tǒng)幫他啟動某一個程序,這個程序是來處理某一個具體的任務(wù)的。
??我們知道,我們要啟動一個程序,那么這個程序相關(guān)的數(shù)據(jù)肯定需要從外存放到內(nèi)存里面。
??但是我們的內(nèi)存資源又是有限的。
??所以,如果內(nèi)存已經(jīng)滿了,那么我們給操作系統(tǒng)提交的作業(yè)(或者我們想讓系統(tǒng)幫我們啟動的這個程序)就有可能沒辦法馬上把它們放入內(nèi)存(沒辦法馬上啟動)。
??在這個時候,操作系統(tǒng)就會做高級調(diào)度(作業(yè)調(diào)度)。
??操作系統(tǒng)會按照作業(yè)調(diào)度的相關(guān)規(guī)則,從作業(yè)后備隊列里面選擇一個先把它調(diào)入內(nèi)存,并且會為這個作業(yè)建立與它相對應(yīng)的進(jìn)程,也就是建立一個PCB。這就是高級調(diào)度(作業(yè)調(diào)度)要做的事情。如果當(dāng)前用戶提交了很多作業(yè),操作系統(tǒng)就要決定接下來到底要執(zhí)行哪一個作業(yè)。
??高級調(diào)度(作業(yè)調(diào)度):按一定的原則從外存的作業(yè)后備隊列中挑選一個作業(yè)調(diào)入內(nèi)存,并創(chuàng)建進(jìn)程。簡化理解:好幾個程序需要啟動,到底先啟動哪個。
??每個作業(yè)只調(diào)入一次,調(diào)出一次。作業(yè)調(diào)入時會建立PCB,調(diào)出時才撤銷PCB。
(2)低級調(diào)度
??低級調(diào)度(進(jìn)程調(diào)度/處理機(jī)調(diào)度):按照某種策略從就緒隊列中選取一個進(jìn)程,將處理機(jī)分配給它。
??因為我們內(nèi)存中同一時刻是存在很多進(jìn)程的,而我們CPU的資源也是有限的。所以,操作系統(tǒng)也需要按某種策略,從我們的進(jìn)程就緒隊列中挑選出一個進(jìn)程,把處理機(jī)資源分配給它。
??多道程序并發(fā),這件事情,肯定要用到進(jìn)程調(diào)度。
??所以,進(jìn)程調(diào)度是操作系統(tǒng)中最基本的一種調(diào)度,在一般的操作系統(tǒng)中都必須配置進(jìn)程調(diào)度。
??并且,進(jìn)程調(diào)度的頻率是很高的,一般幾十毫秒一次。因為高頻率的進(jìn)程調(diào)度,才可以讓各個進(jìn)程很快速地、輪流地上CPU執(zhí)行。這樣才可以讓用戶在宏觀上看,好像是各個進(jìn)程在同時運(yùn)行。
(3)中級調(diào)度
??剛才我們說過,計算機(jī)當(dāng)中有可能出現(xiàn)內(nèi)存資源不足的情況。內(nèi)存里面此時存在多個進(jìn)程的數(shù)據(jù)。
??而如果內(nèi)存不足的話,其實我們是可以讓一些不太緊急、不太重要的進(jìn)程,先把這些進(jìn)程的數(shù)據(jù)從內(nèi)存調(diào)出到外存。
??如果一個進(jìn)程的數(shù)據(jù),把它從內(nèi)存放入到了外存里面,那這個進(jìn)程此時就處于掛起狀態(tài)。操作系統(tǒng)會把這些進(jìn)程的PCB組織起來成為一個隊列,叫掛起隊列。(類似于之前說過的就緒隊列、阻塞隊列)
??暫時調(diào)到外存等待的進(jìn)程狀態(tài)為掛起狀態(tài)。被掛起的進(jìn)程PCB會被組織成掛起隊列。
??那此時已經(jīng)有空閑的內(nèi)存資源了,操作系統(tǒng)又可以通過某一種調(diào)度策略,來決定,到底要把哪個進(jìn)程的數(shù)據(jù)先調(diào)回內(nèi)存。這個就是中級調(diào)度管的事情,又叫內(nèi)存調(diào)度。
??中級調(diào)度(內(nèi)存調(diào)度):按照某種策略決定將哪個處于掛起狀態(tài)的進(jìn)程重新調(diào)入內(nèi)存。
??我們平時用手機(jī)的時候會有這樣的體驗:有時在切換程序(切換進(jìn)程)的時候,有的時候會發(fā)現(xiàn)切換的很快,而有的時候切換的又很慢。有種可能的原因就是,當(dāng)切換很快的時候,這個進(jìn)程的數(shù)據(jù)有可能是位于內(nèi)存里面的;而切換進(jìn)程很慢的時候,有可能是因為那個進(jìn)程的數(shù)據(jù)已經(jīng)不在手機(jī)內(nèi)存里,而是被系統(tǒng)調(diào)到了外存當(dāng)中,所以當(dāng)你切換到這個進(jìn)程的時候,系統(tǒng)會發(fā)現(xiàn),這個進(jìn)程此時非運(yùn)行不可了,它再把相關(guān)的數(shù)據(jù)從外存再讀回內(nèi)存。
??那么顯然,在進(jìn)程運(yùn)行的生命周期內(nèi),有可能會多次調(diào)出、調(diào)入內(nèi)存,所以中級調(diào)度發(fā)生的頻率肯定要比高級調(diào)度的頻率更高。
補(bǔ)充知識:進(jìn)程的掛起態(tài)與七狀態(tài)模型
??剛剛提到了掛起狀態(tài)。此處再補(bǔ)充一個與掛起狀態(tài)相關(guān)的,七狀態(tài)模型。
??暫時調(diào)到外存等待的進(jìn)程狀態(tài)為掛起狀態(tài)(掛起態(tài),suspend)。
??掛起態(tài)又可以進(jìn)一步細(xì)分為就緒掛起、阻塞掛起兩種狀態(tài)。
??之前已經(jīng)學(xué)習(xí)了進(jìn)程的五狀態(tài)模型。這是考研408里要求掌握的一種模型。
??但對于一些自主命題的學(xué)校,也有可能要掌握七狀態(tài)模型。總之了解一下。
??那么,在引入了就緒掛起、阻塞掛起兩種狀態(tài)之后,一個處于就緒態(tài)的進(jìn)程,如果此時這個系統(tǒng)的負(fù)載比較高、內(nèi)存空間已經(jīng)不夠用了,那么它有可能會把一個處于就緒態(tài)的進(jìn)程,把它暫時調(diào)到外存當(dāng)中,這個進(jìn)程就進(jìn)入了一個就緒掛起的狀態(tài)。一直到內(nèi)存空閑,或者這個進(jìn)程急需進(jìn)行,那么這個進(jìn)程又會被激活,并把它相應(yīng)數(shù)據(jù)挪回內(nèi)存中。
??同樣地,一個阻塞態(tài)的進(jìn)程也可以被掛起,相應(yīng)的也可以被激活、重新調(diào)入內(nèi)存。
??而有的操作系統(tǒng),對于處于阻塞掛起的進(jìn)程,當(dāng)它等待的阻塞事件發(fā)生的時候,這個進(jìn)程會從阻塞掛起變?yōu)榫途w掛起。之后,當(dāng)它再被重新調(diào)回內(nèi)存的時候,直接就是就緒態(tài),而不是回到阻塞態(tài)。
??還有的時候,一個進(jìn)程處于運(yùn)行態(tài),當(dāng)運(yùn)行結(jié)束之后,可能這個進(jìn)程下處理機(jī)的時候就會被直接放到外存當(dāng)中,讓它進(jìn)入就緒掛起的狀態(tài)。
??而有的時候,一個處于創(chuàng)建態(tài)的進(jìn)程,當(dāng)它創(chuàng)建結(jié)束之后、創(chuàng)建完P(guān)CB之后,有可能出現(xiàn)內(nèi)存空間不夠的情況,那這種情況下有可能,處于創(chuàng)建態(tài)的進(jìn)程,創(chuàng)建之后處于就緒掛起的狀態(tài)。
??需要注意的是,“掛起”和“阻塞”的區(qū)別。
??這兩種狀態(tài)都是暫時不能獲得CPU的服務(wù),但區(qū)別在于,處于掛起態(tài)的進(jìn)程,進(jìn)程映像是放在外存里的;而處于阻塞態(tài)的進(jìn)程,它的進(jìn)程映像其實還在內(nèi)存當(dāng)中。
??有的操作系統(tǒng),會把就緒掛起、阻塞掛起分為兩個不同的掛起隊列。還有的操作系統(tǒng)會把阻塞掛起的進(jìn)程,根據(jù)阻塞原因不同,再把阻塞掛起隊列細(xì)分為多個隊列。
??以上就是七狀態(tài)模型。