生活随笔
收集整理的這篇文章主要介紹了
批处理结束某个进程_进程调度
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
當(dāng)計(jì)算機(jī)系統(tǒng)是多道程序設(shè)計(jì)系統(tǒng)時(shí),常常會(huì)出現(xiàn)多個(gè)進(jìn)程或線程競(jìng)爭(zhēng)CPU的情況。如果有大于處理器數(shù)的進(jìn)程(線程)處于就緒態(tài)時(shí),就必須要選擇下一個(gè)要執(zhí)行的進(jìn)程(線程)。在操作系統(tǒng),用于選擇接下來要執(zhí)行的進(jìn)程的程序稱之為調(diào)度程序(Scheduler),調(diào)度程序相應(yīng)的算法稱之為調(diào)度算法(Schedule Algorithm)。雖然進(jìn)程調(diào)度和線程調(diào)度有些許不同,但是許多適用于進(jìn)程調(diào)度的處理方法大多也適用于線程的調(diào)度。
幾乎所有的進(jìn)程的I/O請(qǐng)求和計(jì)算都是交替發(fā)生的,典型的,CPU不間斷的執(zhí)行一段時(shí)間,當(dāng)CPU發(fā)現(xiàn)需要執(zhí)行I/O操作,發(fā)出系統(tǒng)調(diào)用來完成I/O請(qǐng)求,當(dāng)/O請(qǐng)求執(zhí)行完成后CPU繼續(xù)計(jì)算,直到進(jìn)程需要執(zhí)行其他的I/O操作或者執(zhí)行完成。某些進(jìn)程花費(fèi)大量的時(shí)間在計(jì)算上(使用CPU),這類型進(jìn)程稱之為CPU密集型進(jìn)程(compute-bound),典型的CPU密集型進(jìn)程具有較長時(shí)間的CPU集中使用和較小頻度的I/O操作。相反,某些進(jìn)程花費(fèi)大量時(shí)間用于處理I/O請(qǐng)求,這類進(jìn)程稱之為I/O密集型進(jìn)程(I/O-bound),典型的I/O密集型進(jìn)程具有較短的CPU集中使用和頻度較大的I/O操作。隨著CPU的速度的不斷提升,進(jìn)程更加偏向于I/O密集型,因?yàn)橐虼巳绻枰\(yùn)行/O密集型進(jìn)程,那么應(yīng)當(dāng)勁量讓/O密集型進(jìn)程得到執(zhí)行,以便發(fā)出磁盤請(qǐng)求并保持磁盤忙碌。因?yàn)镮/O操作遠(yuǎn)遠(yuǎn)慢于CPU的速度,對(duì)于/O密集型進(jìn)程的調(diào)度就更加重要了。
有關(guān)調(diào)度的一個(gè)關(guān)鍵問題是在何時(shí)進(jìn)行調(diào)度?考慮如下的情形:
在進(jìn)程創(chuàng)建子進(jìn)程后,需要決定調(diào)用子進(jìn)程還是父進(jìn)程,因?yàn)樽舆M(jìn)程和父進(jìn)程都處于就緒態(tài),因此可以任意決定選擇那個(gè)進(jìn)程執(zhí)行。 當(dāng)一個(gè)進(jìn)程執(zhí)行結(jié)束退出時(shí),調(diào)度程序(Scheduler)需要從就緒隊(duì)列中選擇一個(gè)進(jìn)程執(zhí)行,如果就緒隊(duì)列沒有就緒進(jìn)程,那么應(yīng)該調(diào)用操作系統(tǒng)提供的空閑進(jìn)程。 當(dāng)一個(gè)進(jìn)程因?yàn)镮/O、信號(hào)量或其他原因陷入阻塞時(shí),調(diào)度程序需要從就緒隊(duì)列中選擇一個(gè)進(jìn)程執(zhí)行。 在一個(gè)I/O中斷發(fā)生時(shí),必須做出調(diào)度決策,如果終中斷來自I/O設(shè)備,而設(shè)備完成中斷工作后,被阻塞的進(jìn)程此時(shí)處于就緒狀態(tài),那么此時(shí)是繼續(xù)執(zhí)行正在執(zhí)行的進(jìn)程還是調(diào)度完成中斷的進(jìn)程將由調(diào)度程序決定。或者讓剛剛中斷發(fā)生的的進(jìn)程執(zhí)行,或者讓某個(gè)其他進(jìn)程執(zhí)行。 根據(jù)如何處理時(shí)鐘中斷,可以把調(diào)度算法分為兩類。非搶占式調(diào)度算法是挑選一個(gè)進(jìn)程讓其執(zhí)行,直到該進(jìn)程阻塞(I/O請(qǐng)求或其它原因)或者主動(dòng)釋放CPU,即使該進(jìn)程執(zhí)行了若干小時(shí)也不會(huì)強(qiáng)制掛起。這樣做的結(jié)果是在時(shí)鐘中斷發(fā)生時(shí)不會(huì)進(jìn)行調(diào)度,在處理完時(shí)鐘中斷后,如果沒有優(yōu)先級(jí)更高的進(jìn)程,該進(jìn)程會(huì)繼續(xù)執(zhí)行。搶占式調(diào)度算法是挑選一個(gè)進(jìn)程,讓進(jìn)程執(zhí)行一個(gè)給定的最大運(yùn)行時(shí)間(時(shí)間片),如果在給定的最大執(zhí)行時(shí)間后進(jìn)程仍然在執(zhí)行,那么會(huì)強(qiáng)制掛起該進(jìn)程,調(diào)度程序選擇另一個(gè)進(jìn)程執(zhí)行。
調(diào)度算法的分類主要是根據(jù)其執(zhí)行的環(huán)境,不同的執(zhí)行環(huán)境使用不同的調(diào)度算法。大致可以劃分出三種環(huán)境:批處理、交互式、實(shí)時(shí)。
前面我們知道,對(duì)于不同的環(huán)境使用不同的調(diào)度算法,因?yàn)樵诓煌沫h(huán)境所追求的性能指標(biāo)也不盡相同,有些是所有環(huán)境都適合,有些則適合于特定的環(huán)境。
所有系統(tǒng)公平——保證每個(gè)進(jìn)程由公平的CPU份額策略強(qiáng)制執(zhí)行——保證指定的策略能夠被執(zhí)行平衡——保持系統(tǒng)所有的部分都是忙碌的
批處理系統(tǒng)吞吐量——每小時(shí)完成最大的作業(yè)數(shù)周轉(zhuǎn)時(shí)間——任務(wù)從被提交到執(zhí)行完成的最小時(shí)間CPU利用率——CPU的使用情況
交互式系統(tǒng)響應(yīng)時(shí)間——快速響應(yīng)時(shí)間均衡性——滿足用戶的請(qǐng)求
實(shí)時(shí)系統(tǒng)滿足截止時(shí)間——避免丟失數(shù)據(jù)可預(yù)測(cè)性——在多媒體系統(tǒng)中避免品質(zhì)降低
對(duì)于所有情形,公平性十分重要,進(jìn)程應(yīng)該得到公平的CPU的份額,在理論上能夠達(dá)到公平。再者,盡量保證系統(tǒng)的各個(gè)部分都保持忙碌,保證CPU和I/O設(shè)備都在處理任務(wù),這樣比CPU空轉(zhuǎn)或I/O設(shè)備空閑會(huì)更加高效。因此調(diào)度程序在把進(jìn)程調(diào)入到內(nèi)存時(shí),保證內(nèi)存中既有CPU密集型進(jìn)程和I/O密集型進(jìn)程是較好的想法。好于內(nèi)存中先全部都是CPU密集型進(jìn)程然后在全是I/O密集型進(jìn)程。如果是后一種策略,在CPU密集型進(jìn)程執(zhí)行時(shí)會(huì)競(jìng)爭(zhēng)CPU并且磁盤空閑,而后面執(zhí)行I/O密集型進(jìn)程時(shí)會(huì)競(jìng)爭(zhēng)磁盤,而CPU卻空轉(zhuǎn)。因此保證內(nèi)存中的進(jìn)程既包含CPU密集型又包含I/O密集型能夠讓系統(tǒng)的性能好一些。
先來先服務(wù):在所有調(diào)度算法中,最簡(jiǎn)單的莫過于非搶占式的先來先服務(wù)調(diào)度算法(first-come first-served),使用該調(diào)度算法時(shí),進(jìn)程按照請(qǐng)求CPU的時(shí)間的先后來使用CPU。基本上會(huì)有一個(gè)就緒進(jìn)程的隊(duì)列,每個(gè)請(qǐng)求CPU的進(jìn)程會(huì)被放入到就緒隊(duì)列中,然后CPU從隊(duì)列頭部選擇進(jìn)程執(zhí)行,新來的進(jìn)程會(huì)被放入到隊(duì)列尾部。當(dāng)正在執(zhí)行的進(jìn)程陷入阻塞時(shí),CPU會(huì)從就緒隊(duì)列首部中選擇一個(gè)進(jìn)程執(zhí)行,當(dāng)被阻塞的進(jìn)程變?yōu)榫途w態(tài)時(shí),它就行剛剛請(qǐng)求CPU的進(jìn)程一樣被放入到隊(duì)列尾部。該算法的優(yōu)點(diǎn)在于便于理解并且容易在程序中應(yīng)用。 缺點(diǎn)是對(duì)長作業(yè)比較有利,而不利于短作業(yè),因?yàn)槎套鳂I(yè)執(zhí)行的時(shí)間很短,但卻要等待很多長時(shí)間才能執(zhí)行。當(dāng)內(nèi)存中的進(jìn)程大部分為I/O密集型進(jìn)程時(shí),CPU在這些進(jìn)程間交替時(shí)會(huì)導(dǎo)致很多進(jìn)程競(jìng)爭(zhēng)I/O資源而導(dǎo)致CPU處于空閑。 最短作業(yè)優(yōu)先:每個(gè)進(jìn)程都有使用CPU的時(shí)間,每次調(diào)度程序選擇進(jìn)程時(shí)選擇使用CPU時(shí)間最短的進(jìn)程執(zhí)行,這種非搶占式調(diào)度算法稱之為最短作業(yè)優(yōu)先(shortest job first)。最短作業(yè)優(yōu)先算法能夠提升高系統(tǒng)的吞吐量,并且使得平均等待時(shí)間最小。有必要支持,只有在所有進(jìn)程同時(shí)運(yùn)行的情形,最短作業(yè)優(yōu)先才是最有的。 最短剩余時(shí)間優(yōu)先:最短作業(yè)優(yōu)先算法的搶占式版本是最短剩余時(shí)間優(yōu)先(shortest remaining time first)算法。調(diào)度程序總是挑選剩余運(yùn)行時(shí)間最短的進(jìn)程進(jìn)行執(zhí)行,因此每個(gè)進(jìn)程的運(yùn)行時(shí)間要可知。當(dāng)有新進(jìn)程請(qǐng)求CPU時(shí),會(huì)比較正在執(zhí)行的程序的剩余執(zhí)行時(shí)間和新請(qǐng)求的進(jìn)程的執(zhí)行時(shí)間,如果新請(qǐng)求的進(jìn)程的執(zhí)行時(shí)間更短就會(huì)暫停正在執(zhí)行的進(jìn)程轉(zhuǎn)而執(zhí)行最新請(qǐng)求的進(jìn)程。否則新請(qǐng)求的進(jìn)程放入到就緒隊(duì)列,CPU繼續(xù)執(zhí)行當(dāng)前進(jìn)程。對(duì)于最短作業(yè)優(yōu)先算法和最短剩余時(shí)間算法最大的問題在于需要知道每個(gè)進(jìn)程運(yùn)行的時(shí)間,對(duì)于這點(diǎn)往往是很難做到的。 輪轉(zhuǎn)算法:一種最古老、最簡(jiǎn)單、最公平且使用最廣泛的算法是輪轉(zhuǎn)調(diào)度(round robin)。基本思想:為每個(gè)進(jìn)程分配一個(gè)執(zhí)行的時(shí)間段,成為時(shí)間片(quantum),允許進(jìn)程在時(shí)間片內(nèi)使用CPU,如果在時(shí)間片結(jié)束時(shí)進(jìn)程依然在執(zhí)行,那么調(diào)度程序暫停正在執(zhí)行的進(jìn)程并分配CPU給其他的進(jìn)程。如果正在執(zhí)行的進(jìn)程在時(shí)間片結(jié)束前終止或阻塞,那么調(diào)度程序立即調(diào)度進(jìn)程執(zhí)行CPU而不是等到時(shí)間片結(jié)束再調(diào)度。該調(diào)度算法中有趣的是時(shí)間片長度的選擇:從一個(gè)進(jìn)程切換的另一個(gè)進(jìn)程是需要時(shí)間進(jìn)行事務(wù)管理的——保存前一個(gè)進(jìn)程的寄存器,堆棧信息等信息并且裝入新進(jìn)程的堆棧信息、寄存器信息等,這種方式稱之為進(jìn)程切換(process switch)或者上下文切換(context switch)。如果時(shí)間片設(shè)置的過小,那么會(huì)有很多時(shí)間會(huì)用于進(jìn)程的上下文切換的開銷上,如果時(shí)間片設(shè)置的比較大,那么在請(qǐng)求量很大的場(chǎng)景(例如Web服務(wù)器),那么到來的請(qǐng)求要等很長的時(shí)間才有機(jī)會(huì)被調(diào)度。因此時(shí)間片過長或者過短都不合適,通常將時(shí)間片長度設(shè)置為20ms-50ms是比較合理的折中。 優(yōu)先級(jí)調(diào)度:輪轉(zhuǎn)算法做出了一個(gè)假設(shè)那就是默認(rèn)所有的進(jìn)程的優(yōu)先級(jí)一樣,但是現(xiàn)實(shí)的情況是有些進(jìn)程的優(yōu)先級(jí)高一些,有些不那么重要的進(jìn)程的優(yōu)先級(jí)可能相對(duì)低一些。因此在優(yōu)先級(jí)調(diào)度算法中每個(gè)進(jìn)程給予一個(gè)優(yōu)先級(jí),運(yùn)行優(yōu)先級(jí)最高的進(jìn)程先執(zhí)行。為了方式優(yōu)先級(jí)高的進(jìn)程一直運(yùn)行,可以在時(shí)鐘滴答降低進(jìn)程的優(yōu)先級(jí)使得優(yōu)先級(jí)相對(duì)低的進(jìn)程也有機(jī)會(huì)執(zhí)行。另一種方法是為進(jìn)程賦予一個(gè)運(yùn)行執(zhí)行的最大時(shí)間片(時(shí)間片長度可能因進(jìn)程的優(yōu)先級(jí)的不同而不同),當(dāng)使用完時(shí)間片,優(yōu)先級(jí)次高的進(jìn)程也能被執(zhí)行。優(yōu)先級(jí)也可以由系統(tǒng)動(dòng)態(tài)分配,例如有些I/O密集型進(jìn)程大多數(shù)時(shí)間在等待I/O結(jié)束,當(dāng)這類型的進(jìn)程請(qǐng)求執(zhí)行時(shí)應(yīng)該勁量滿足,以便啟動(dòng)下一次I/O請(qǐng)求。系統(tǒng)應(yīng)該能適當(dāng)?shù)恼{(diào)整進(jìn)程的優(yōu)先級(jí)避免出現(xiàn)優(yōu)先級(jí)較低的進(jìn)程出現(xiàn)饑餓現(xiàn)象。 多級(jí)隊(duì)列:多級(jí)隊(duì)列(Multilevel Queue)調(diào)度算法是將就緒隊(duì)列分成介個(gè)單獨(dú)的隊(duì)列,一般根據(jù)進(jìn)程的特性如占用內(nèi)存的大小,進(jìn)程的優(yōu)先級(jí),進(jìn)程類型等,每個(gè)隊(duì)列都有自己的調(diào)度算法。 最短進(jìn)程優(yōu)先:對(duì)于交互式系統(tǒng),用戶可能比較在意的指標(biāo)是響應(yīng)時(shí)間,因此最短進(jìn)程優(yōu)先常常伴隨著最短的響應(yīng)時(shí)間,用戶體驗(yàn)也越好。這里唯一的問題是如何從當(dāng)前可執(zhí)行的進(jìn)程中找出最短的那一個(gè)進(jìn)程? 一種方法是根據(jù)進(jìn)程過去的行為進(jìn)行推測(cè),并執(zhí)行運(yùn)行時(shí)間最短的那個(gè)。假設(shè)終端上每個(gè)命令的執(zhí)行時(shí)間為T0,現(xiàn)在假設(shè)測(cè)量到下一次運(yùn)行時(shí)間為T1,那么使用加權(quán)和來改進(jìn)預(yù)計(jì)時(shí)間,即aT0+(1-a)T1,通過選擇a的值,可以決定盡快忘掉老的執(zhí)行時(shí)機(jī)還是保留。當(dāng)a = 1/2時(shí),可得到如下的序列: T0,To/2 + T1/2,To/4 + T1/4 + T2/2 ......... 當(dāng)進(jìn)程擁有多個(gè)線程時(shí),就存在兩個(gè)層次的并行:進(jìn)程和線程,這兩種調(diào)度存在本質(zhì)的區(qū)別,并且還取決于線程是用戶級(jí)線程還是內(nèi)核級(jí)線程還是兩者的混合。首先考慮用戶級(jí)線程,操作系統(tǒng)不知道線程的存在,因此操作系統(tǒng)還是和以前一樣調(diào)度進(jìn)程,而線程調(diào)度程序在進(jìn)程內(nèi)部,進(jìn)程內(nèi)的調(diào)度程序決定如何調(diào)度線程。因?yàn)槎鄠€(gè)線程不存在時(shí)鐘中斷,因此使用時(shí)間片是可行的方案。當(dāng)進(jìn)程的運(yùn)行時(shí)間介紹內(nèi)核就會(huì)調(diào)度其他進(jìn)程。也就是說當(dāng)調(diào)度程序分配給進(jìn)程一定的執(zhí)行時(shí)間,進(jìn)程內(nèi)的多個(gè)線程如何使用這段執(zhí)行時(shí)間內(nèi)核不關(guān)心,內(nèi)核關(guān)系的是分配給進(jìn)程的執(zhí)行時(shí)間(時(shí)間片長度)。對(duì)于內(nèi)核級(jí)線程,內(nèi)核選擇一個(gè)特定的線程執(zhí)行,它不用考慮該線程屬于那個(gè)進(jìn)程,對(duì)于被選擇的進(jìn)程賦予一個(gè)時(shí)間片,而且超過了時(shí)間片,就會(huì)強(qiáng)制掛起該線程。用戶級(jí)線程和內(nèi)核級(jí)線程之間的差別在于性能,用戶級(jí)線程的線程切換需要更少的機(jī)器指令,甚至內(nèi)核都不知道進(jìn)行了線程切換,因?yàn)檫@是由進(jìn)程內(nèi)部的調(diào)度程序決定的,因此用戶級(jí)線程可以使用轉(zhuǎn)為應(yīng)用程序定制的線程調(diào)度程序。另一方面,使用內(nèi)核級(jí)線程時(shí),一個(gè)線程被阻塞時(shí)不會(huì)出現(xiàn)像用戶級(jí)線程那樣掛起相應(yīng)的進(jìn)程的情況。
總結(jié)
以上是生活随笔 為你收集整理的批处理结束某个进程_进程调度 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。