一? 丶調(diào)度的層次與作用;
處理機調(diào)度:多道程序環(huán)境下,動態(tài)的把處理機分配給就緒隊列中的一個進程使之執(zhí)行。
提高處理機的利用率、改善系統(tǒng)性能,很大程度上取決于處理機調(diào)度的性能
作業(yè)進入系統(tǒng)駐留在外存的后備隊列上,再至調(diào)入內(nèi)存運行完畢,可能要經(jīng)歷下述三級調(diào)度。
?高級調(diào)度(High Scheduling)
?中級調(diào)度(Intermediate-Level Scheduling)
?低級調(diào)度(Low Level Scheduling)
1、高級調(diào)度(High Scheduling)
又稱作業(yè)調(diào)度或長程調(diào)度,接納調(diào)度(Admission
Scheduling)
? 主要在早期批處理階段,處理在外存上的作業(yè)。
?決定外存后備隊列中的哪些作業(yè)調(diào)入內(nèi)存;
?為它們創(chuàng)建進程、分配必要的資源;
?將新創(chuàng)建的進程排在就緒隊列上,準備執(zhí)行。
* 管理的方面比較多。
2、低級調(diào)度(Low Level Scheduling)
也稱為進程調(diào)度、微觀調(diào)度或短程調(diào)度(Short-Term Scheduling)
? 決定內(nèi)存就緒隊列中的哪個進程獲得處理機,進行分配工作。是最基本的一種調(diào)度,在三種基本OS中都有。
3、中級調(diào)度(Intermediate-Level Scheduling)
又稱交換調(diào)度或中程調(diào)度(Medium-Term Scheduling)
? 引入目的:提高內(nèi)存利用率和系統(tǒng)吞吐量。根據(jù)條件將一些進程調(diào)出或再調(diào)入內(nèi)存。
二、常用調(diào)度算法及計算;
1、先來先服務(wù)調(diào)度算法FCFS
(First Come First Service)
? 一種最簡單的調(diào)度算法,按先后順序進行調(diào)度。既可用于作業(yè)調(diào)度,也可用于進程調(diào)度。
v按照作業(yè)提交,或進程變?yōu)榫途w狀態(tài)的先后次序分派CPU;
v新作業(yè)只有當當前作業(yè)或進程執(zhí)行完或阻塞才獲得CPU運行
v被喚醒的作業(yè)或進程不立即恢復(fù)執(zhí)行,通常等到當前作業(yè)或進程出讓CPU。
(所以,默認即是非搶占方式)
2.短作業(yè)優(yōu)先
優(yōu)點:
v通過上表可見采用SJF/SPF算法,平均周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間都有明顯改善。SJF/SPF調(diào)度算法能有效的降低作業(yè)的平均等待時間,提高系統(tǒng)吞吐量。
方式:
v分搶占和非搶占兩種方式,上例為簡單的非搶占式。
vSJF/SPF的不足:
? 1. 對短作業(yè)有利,但同時造成了對長作業(yè)的不利。
???? 2.由于作業(yè)(進程)的長短含主觀因素,不一定能真正做到短作業(yè)優(yōu)先。
???? 3.未考慮作業(yè)的緊迫程度,因而不能保證緊迫性作業(yè)(進程)的及時處理。
3. 高優(yōu)先權(quán)優(yōu)先調(diào)度算法HPF
vHRRN為每個作業(yè)引入動態(tài)優(yōu)先權(quán),使作業(yè)的優(yōu)先級隨著等待時間的增加而以速率a提高:
? 優(yōu)先權(quán) =(等待時間+要求服務(wù)時間)/要求服務(wù)時間 = 響應(yīng)時間 / 要求服務(wù)時間
什么時候計算各進程的響應(yīng)比優(yōu)先權(quán)?
v需要進行調(diào)度選擇的時候比較各自優(yōu)先權(quán)
?作業(yè)完成時
?新作業(yè)產(chǎn)生時(搶占、非搶占)
?時間片完成時
?進程阻塞時
3. 基于時間片的輪轉(zhuǎn)調(diào)度算法RR
(1)時間片輪轉(zhuǎn)算法
1.將系統(tǒng)中所有的就緒進程按照FCFS原則,排成一個隊列。
2.每次調(diào)度時將CPU分派給隊首進程,讓其執(zhí)行一個時間片。時間片的長度從幾個ms到幾百ms。
3.在一個時間片結(jié)束時,發(fā)生時鐘中斷。
4.調(diào)度程序據(jù)此暫停當前進程的執(zhí)行,將其送到就緒隊列的末尾,并通過上下文切換執(zhí)行當前就緒的隊首進程。
v進程阻塞情況發(fā)生時,未用完時間片也要出讓CPU
能夠及時響應(yīng),但沒有考慮作業(yè)長短等問題。
(2)多級反饋隊列算法FB
1)設(shè)置多個就緒隊列,各隊列有不同的優(yōu)先級,優(yōu)先級從第一個隊列依次降低。
2)賦予各隊列進程執(zhí)行時間片大小不同,優(yōu)先權(quán)越高,時間片越短。
3)當一個新進程進入內(nèi)存,引發(fā)的調(diào)度過程
1.準備調(diào)度:先將它放入第一個隊列的末尾,按FCFS原則排隊等待調(diào)度。
2.IF時間片內(nèi)完成,便可準備撤離系統(tǒng);
3.IF時間片內(nèi)未能完成,調(diào)度程序便將該進程轉(zhuǎn)入第二隊列的末尾等待再次被調(diào)度執(zhí)行。
4.當?shù)谝魂犃兄械倪M程都執(zhí)行完,系統(tǒng)再按FCFS原則調(diào)度第二隊列。在第二隊列的稍放長些的時間片內(nèi)仍未完成,再依次將它放入第三隊列。
5.依次降到第n隊列后,在第n隊列中便采取按時間片輪轉(zhuǎn)的方式運行。
注意:
v各隊列的時間片逐漸增大。優(yōu)先級逐漸降低
v僅當優(yōu)先權(quán)高的隊列(如第一隊列)空閑時,調(diào)度程序才調(diào)度第二隊列中的進程運行;僅當?shù)?~(i-1)隊列均空時,才會調(diào)度第i隊列中的進程運行。
v高優(yōu)先級搶占問題:
?第i隊列中為某進程正占有CPU,又有新進程進入優(yōu)先權(quán)較高的隊列(第1~i-1隊中);
被搶占的進程放回原就緒隊列末尾;
三、死鎖的概念、產(chǎn)生的原因及必要條件;
死鎖(Deadlock):指多個進程在運行過程中,因爭奪資源而造成的一種僵局。當進程處于這種狀態(tài)時,若無外力作用,它們都將無法再向前推進。
v產(chǎn)生死鎖的原因可歸結(jié)為如下兩點:
1.競爭資源。系統(tǒng)中供多個進程共享的資源如打印機、公用隊列等的數(shù)目不滿足需要時,會引起資源競爭而產(chǎn)生死鎖。
2.進程間推進順序非法。進程在運行過程中,請求和釋放資源的順序不當,同樣會導(dǎo)致死鎖。
3、 產(chǎn)生死鎖的必要條件
①互斥條件:進程對所分配到的資源進行排他性使用
②請求和保持條件:進程已經(jīng)保持了至少一個資源,又提出新的資源請求,而新請求資源被其他進程占有只能造成自身進程阻塞,但對自己已獲得的其他資源保持不放,必然影響其他進程。
③不剝奪條件:進程已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
④環(huán)路等待條件
四、處理死鎖的基本方法;
事先預(yù)防:
①預(yù)防死鎖
v設(shè)置限制條件,破壞四個必要條件的一個或幾個,預(yù)防發(fā)生死鎖。
v較易實現(xiàn)。限制條件的嚴格也會導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低。
②避免死鎖
v不須事先限制,破壞四個必要條件,而是在資源的動態(tài)分配過程中,用某種方法去防止系統(tǒng)進入不安全狀態(tài),從而避免發(fā)生死鎖。
v這種事先加以較弱限制的方法,實現(xiàn)上有一定難度,但可獲較高的資源利用率及系統(tǒng)吞吐量,目前在較完善的系統(tǒng)中,常用此方法來避免發(fā)生死鎖。
事后處理:
③檢測死鎖。
v允許系統(tǒng)運行過程中發(fā)生死鎖,但通過系統(tǒng)檢測機構(gòu)可及時的檢測出,能精確確定與死鎖有關(guān)的進程和資源;然后采取適當?shù)拇胧?,從系統(tǒng)中將已發(fā)生的死鎖清除掉。
④解除死鎖。
v與死鎖檢測配套的一種措施。
v常用的實施方法:撤銷或掛起一些進程,以便回收一些資源并將他們分配給已阻塞進程,使之轉(zhuǎn)為就緒以繼續(xù)運行。
v死鎖的檢測與解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量(死鎖幾率不一定很高),但在實現(xiàn)上難度也最大。
五、銀行家算法及計算;
? 最有代表性的避免死鎖的算法,是Dijkstra的銀行家算法。由于該算法能用于銀行系統(tǒng)現(xiàn)金貸款的發(fā)放而得名。
? 【思路描述】:隨時對系統(tǒng)中的所有資源信息進行統(tǒng)計,包括每種資源的數(shù)量、已分配給各進程的數(shù)量;每當進程提出某種資源請求時判斷該請求分配后是否安全,如果安全才分配。對每個資源請求的處理都要保證系統(tǒng)始終從一個安全狀態(tài)到另一個安全狀態(tài)1)銀行家算法中的數(shù)據(jù)結(jié)構(gòu)
(1)各類可利用資源的數(shù)量
u向量Available:(i1,i2,…,im),含m個元素,每個元素代表一類可利用的資源數(shù)目。
u動態(tài)變化的,初始值是系統(tǒng)配置的該類資源的全部數(shù)目,值隨資源的分配與回收而動態(tài)的改變。
u實現(xiàn):一維數(shù)組。Available【j】=K,表示系統(tǒng)中Rj類資源現(xiàn)有可用數(shù)量為K個。
②已分配矩陣Allocation。
un*m,定義系統(tǒng)中每一進程已獲得的每類資源數(shù)量。
uAllocation【i,j】=K,表示進程i當前已分得Rj類資源數(shù)為K。
③還需求的矩陣Need。
un*m,表示每一進程尚需的各類資源數(shù)。
uNeed【i,j】=K,表示進程i還需要Rj類資源K個,方能完成任務(wù)。
|上述三個矩陣存在關(guān)系:
? Max【i,j】=Allocation【i,j】+Need【i,j】
|每次,給進程 i 分配資源的動作,影響上述數(shù)據(jù)結(jié)構(gòu)的取值:
? Available【μ】,Allocation【i,μ】,Need【i,μ】
算法過程:
就是對各進程的Request向量及資源數(shù)量進行一系列判斷及值操作。
進程Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進行檢查:
首先是兩個基本判斷:
(1)IF Requesti[j]<= Need[i,j]
? THEN轉(zhuǎn)向步驟2;
? ELSE認為出錯,所需資源數(shù)超過宣布的最大值(自我矛盾)
(2)IF Requesti[j]<= Available[j]
? THEN轉(zhuǎn)向步驟3;
? ELSE表示尚無足夠資源,Pi需等待(現(xiàn)實不滿足)
如果上面兩步判斷都通過了,進入實質(zhì)的資源分析
(3)系統(tǒng)試探著把資源分配給進程Pi
,并修改相應(yīng)數(shù)據(jù)結(jié)構(gòu)的值(假設(shè)性操作):
???? Available【j】? =
???? Allocation【i,j】=
???? Need【i,j】=
(4)系統(tǒng)執(zhí)行安全性算法,判斷新的資源分配狀態(tài)是否是安全的。
? 即:找一個安全序列,使這些進程按順序執(zhí)行完)如果能夠找到,則將假設(shè)操作真正實施完成資源分配。