欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中進(jìn)程的調(diào)度算法詳解

 更新時間:2023年07月26日 10:36:11   作者:Python 學(xué)習(xí)者  
這篇文章主要介紹了Python中進(jìn)程的調(diào)度算法詳解,要想多個進(jìn)程交替運(yùn)行,操作系統(tǒng)必須對這些進(jìn)程進(jìn)行調(diào)度,這個調(diào)度也不是隨即進(jìn)行的,而是需要遵循一定的法則,由此就有了進(jìn)程的調(diào)度算法,需要的朋友可以參考下

一、先來先服務(wù)調(diào)度算法

先來先服務(wù)(FCFS)調(diào)度算法是一種最簡單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。FCFS算法比較有利于長作業(yè)(進(jìn)程),而不利于短作業(yè)(進(jìn)程)。

由此可知,本算法適合于CPU繁忙型作業(yè),而不利于I/O繁忙型的作業(yè)(進(jìn)程)。

二、短作業(yè)優(yōu)先調(diào)度算法

短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法(SJ/PF)是指對短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。

但其對長作業(yè)不利;

不能保證緊迫性作業(yè)(進(jìn)程)被及時處理;

作業(yè)的長短只是被估算出來的。

三、時間片輪轉(zhuǎn)法

時間片輪轉(zhuǎn)(Round Robin,RR)法的基本思路是讓每個進(jìn)程在就緒隊(duì)列中的等待時間與享受服務(wù)的時間成比例。

在時間片輪轉(zhuǎn)法中,需要將CPU的處理時間分成固定大小的時間片

例如,幾十毫秒至幾百毫秒。如果一個進(jìn)程在被調(diào)度選中之后用完了系統(tǒng)規(guī)定的時間片,但又未完成要求的任務(wù),則它自行釋放自己所占有的CPU而排到就緒隊(duì)列的末尾,等待下一次調(diào)度。

同時,進(jìn)程調(diào)度程序又去調(diào)度當(dāng)前就緒隊(duì)列中的第一個進(jìn)程。

顯然,輪轉(zhuǎn)法只能用來調(diào)度分配一些可以搶占的資源。

這些可以搶占的資源可以隨時被剝奪,而且可以將它們再分配給別的進(jìn)程。CPU是可搶占資源的一種。但打印機(jī)等資源是不可搶占的。

由于作業(yè)調(diào)度是對除了CPU之外的所有系統(tǒng)硬件資源的分配,其中包含有不可搶占資源,所以作業(yè)調(diào)度不使用輪轉(zhuǎn)法。

在輪轉(zhuǎn)法中,時間片長度的選取非常重要。

首先,時間片長度的選擇會直接影響到系統(tǒng)的開銷和響應(yīng)時間。如果時間片長度過短,則調(diào)度程序搶占處理機(jī)的次數(shù)增多。

這將使進(jìn)程上下文切換次數(shù)也大大增加,從而加重系統(tǒng)開銷。反過來,如果時間片長度選擇過長

例如,一個時間片能保證就緒隊(duì)列中所需執(zhí)行時間最長的進(jìn)程能執(zhí)行完畢,則輪轉(zhuǎn)法變成了先來先服務(wù)法。

時間片長度的選擇是根據(jù)系統(tǒng)對響應(yīng)時間的要求和就緒隊(duì)列中所允許最大的進(jìn)程數(shù)來確定的。

在輪轉(zhuǎn)法中,加入到就緒隊(duì)列的進(jìn)程有3種情況:

  • 第一種是分給它的時間片用完,但進(jìn)程還未完成,回到就緒隊(duì)列的末尾等待下次調(diào)度去繼續(xù)執(zhí)行。
  • 第二種情況是分給該進(jìn)程的時間片并未用完,只是因?yàn)檎埱驣/O或由于進(jìn)程的互斥與同步關(guān)系而被阻塞。當(dāng)阻塞解除之后再回到就緒隊(duì)列。
  • 第三種情況就是新創(chuàng)建進(jìn)程進(jìn)入就緒隊(duì)列。

如果對這些進(jìn)程區(qū)別對待,給予不同的優(yōu)先級和時間片從直觀上看,可以進(jìn)一步改善系統(tǒng)服務(wù)質(zhì)量和效率。

例如,我們可把就緒隊(duì)列按照進(jìn)程到達(dá)就緒隊(duì)列的類型和進(jìn)程被阻塞時的阻塞原因分成不同的就緒隊(duì)列,每個隊(duì)列按FCFS原則排列,各隊(duì)列之間的進(jìn)程享有不同的優(yōu)先級,但同一隊(duì)列內(nèi)優(yōu)先級相同。這樣,當(dāng)一個進(jìn)程在執(zhí)行完它的時間片之后,或從睡眠中被喚醒以及被創(chuàng)建之后,將進(jìn)入不同的就緒隊(duì)列。

四、多級反饋隊(duì)列

前面介紹的各種用作進(jìn)程調(diào)度的算法都有一定的局限性。如短進(jìn)程優(yōu)先的調(diào)度算法,僅照顧了短進(jìn)程而忽略了長進(jìn)程,而且如果并未指明進(jìn)程的長度,則短進(jìn)程優(yōu)先和基于進(jìn)程長度的搶占式調(diào)度算法都將無法使用。

而多級反饋隊(duì)列調(diào)度算法則不必事先知道各種進(jìn)程所需的執(zhí)行時間,而且還可以滿足各種類型進(jìn)程的需要,因而它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。在采用多級反饋隊(duì)列調(diào)度算法的系統(tǒng)中,調(diào)度算法的實(shí)施過程如下所述。

應(yīng)設(shè)置多個就緒隊(duì)列,并為各個隊(duì)列賦予不同的優(yōu)先級。第一個隊(duì)列的優(yōu)先級最高,第二個隊(duì)列次之,其余各隊(duì)列的優(yōu)先權(quán)逐個降低。該算法賦予各個隊(duì)列中進(jìn)程執(zhí)行時間片的大小也各不相同,在優(yōu)先權(quán)愈高的隊(duì)列中,為每個進(jìn)程所規(guī)定的執(zhí)行時間片就愈小。

例如,第二個隊(duì)列的時間片要比第一個隊(duì)列的時間片長一倍,……,第i+1個隊(duì)列的時間片要比第i個隊(duì)列的時間片長一倍。

當(dāng)一個新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一隊(duì)列的末尾,按FCFS原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時,如它能在該時間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個時間片結(jié)束時尚未完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,再同樣地按FCFS原則等待調(diào)度執(zhí)行;如果它在第二隊(duì)列中運(yùn)行一個時間片后仍未完成,再依次將它放入第三隊(duì)列,……,如此下去,當(dāng)一個長作業(yè)(進(jìn)程)從第一隊(duì)列依次降到第n隊(duì)列后,在第n 隊(duì)列便采取按時間片輪轉(zhuǎn)的方式運(yùn)行。

僅當(dāng)?shù)谝魂?duì)列空閑時,調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)?~(i-1)隊(duì)列均空時,才會調(diào)度第i隊(duì)列中的進(jìn)程運(yùn)行。如果處理機(jī)正在第i隊(duì)列中為某進(jìn)程服務(wù)時,又有新進(jìn)程進(jìn)入優(yōu)先權(quán)較高的隊(duì)列(第1~(i-1)中的任何一個隊(duì)列),則此時新進(jìn)程將搶占正在運(yùn)行進(jìn)程的處理機(jī),即由調(diào)度程序把正在運(yùn)行的進(jìn)程放回到第i隊(duì)列的末尾,把處理機(jī)分配給新到的高優(yōu)先權(quán)進(jìn)程。

到此這篇關(guān)于Python中進(jìn)程的調(diào)度算法詳解的文章就介紹到這了,更多相關(guān)Python進(jìn)程的調(diào)度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論