第三章習題解析
1.高級調度不低級調度的主要任務是什么?為什么要引入中級調度?
答:高級調度的主要任務是根據某種算法,把外存上處於后備隊列中的那些作業調入內存。低級調度是保存處理機的現場信息,按某種算法先取進程,再把處理器分配給進程。
引入中級調度的主要目的是為了提高內存利用率和系統吞吐量。使那些暫時不能運行的進程不再占用內存資源,將它們調至外存等待,把進程狀態改為就緒駐外存狀態或掛起狀態。
2.處理機調度算法的共同目標是什么?批處理系統的調度目標又是什么?
答:共同目標:資源利用率,公平性,平衡性,策略強制執行。
批處理系統的調度目標:平均周轉時間短,系統吞吐量高,處理機利用率高。
3.何謂作業、作業步和作業流?
答:作業包含通常的程序和數據,還配有作業說明書。系統根據該說明書對程序的運行進行控制。批處理系統中是以作業為基本單位從外存調入內存。
作業步是指每個作業運行期間都必須經過若干個相對獨立相互關聯的順序加工的步驟。
作業流是指若干個作業進入系統后依次存放在外存上形成的輸入作業流;在操作系統的控制下,逐個作業進程處理,於是形成了處理作業流。
4.在什么情況下需要使用作業控制塊JCB?其中包含了哪些內容?
答:每當作業進入系統時,系統便為每個作業建立一個作業控制塊JCB,根據作業類型將它插入到相應的后備隊列中。
JCB包含的內容通常有:1)作業標識 2)用戶名稱 3)用戶賬戶 4)作業類型(CPU繁忙型、I/0芳名型、批量型、終端型) 5)作業狀態 6)調度信息(優先級、作業已運行)
7)資源要求 8)進入系統時間 9)、開始處理時間 10)作業完成時間 11)作業退出時間 12)資源使用情況等
5.在作業調度中應如何確定接納多少個作業和接納哪些作業?
答:作業調度每次接納進入內存的作業數,取決於多道程序度。應將哪些作業從外存調入內存,取決於采用的調度算法。最簡單的是先來服務調度算法,較常用的是短作業優先調度算法和基於作業優先級的調度算法。
7.試說明低級調度的主要功能。
答:(1)保存處理機的現場信息(2)按某種算法選取進程(3)把處理機分配給進程。
8.在搶占調度方式中,搶占的原則是什么?
答:搶占的原則有:時間片原則、優先權原則、短作業優先權原則等。
9.在選擇調度方式和調度算法時,應遵循的准則是什么?
答:(1)面向用戶的准則:周轉時間短、響應時間快、截止時間的保證、優先權准則。
(2)面向系統的准則:系統吞吐量高、處理機利用率好、各類資源的平衡利用。
10.在批處理系統、分時系統和實時系統中,各采用哪幾種進程(作業)調度算法?
答:批處理系統的調度算法:短作業優先、優先權、高響應比優先、多級反饋隊列調度算法。
分時系統的調度算法:時間片輪轉法。
實時系統的調度算法:最早截止時間優先即EDF、最低松弛度優先即LLF算法。
11.何謂靜態和動態優先級?確定靜態優先級的依據是什么?
答:靜態優先級是指在創建進程時確定且在進程的整個運行期間保持不變的優先級。
動態優先級是指在創建進程時賦予的優先權,可以隨進程推進或隨其等待時間增加而改變的優先級,可以獲得更好的調度性能。
確定進程優先級的依據:進程類型、進程對資源的需求和用戶要求。
12.試比較FCFS和SPF兩種進程調度算法。
答:相同點:兩種調度算法都可以用於作業調度和進程調度。
不同點:FCFS調度算法每次都從后備隊列中選擇一個或多個最先進入該隊列的作業,將它們調入內存、分配資源、創建進程、插入到就緒隊列。
該算法有利於長作業/進程,不利於短作業/進程。SPF算法每次調度都從后備隊列中選擇一個或若干個估計運行時間最短的作業,調入內存中運行。該算法有利於短作業/進程,不利於長作業/進程。
13.在時間片輪轉法中,應如何確定時間片的大小?
答:時間片應略大於一次典型的交互需要的時間。一般應考慮三個因素:系統對相應時間的要求、就緒隊列中進程的數目和系統的處理能力。
14.通過一個例子來說明通常的優先級調度算法不能適用於實時系統?
答:實時系統的調度算法很多,主要是基於任務的開始截止時間和任務緊急/松弛程度的任務優先級調度算法,通常的優先級調度算法不能滿足實時系統的調度實時性要求而不適用。
15.為什么說多級反饋隊列調度算法能較好地滿足各方面用戶的需要?
答:終端型用戶:由於終端型用戶提交的作業多屬於交互型作業,通常較小,系統只要能使這些作業在第一隊列規定的時間片內完成,便可使終端型用戶感到滿意
短批處理作業用戶:對於這類作業,如果可在第一隊列中執行完成,便獲得與終端型作業一樣的響應時間。對於稍長的短作業,也只需在第二和第三隊列各執行一時間片完成,其周轉時間仍然較短。
長批處理作業用戶:對於長作業,它將依次在第1,2,……n個隊列中運行,然后再按輪轉方式運行,用戶不必擔心其作業長期得不到處理。
16.為什么說傳統的幾種調度算法都不能算是公平調度算法?
答: 以上介紹的幾種調度算法所保證的只是優先運行,如優先級算法是優先級最高的作業優先運行,但並不保證作業占用了多少處理機時間。另外也未考慮到調度的公平性。
17.保證調度算法是如何做到調度的公平性的?
答:保證調度算法是另外一種類型的調度算法,它向用戶所做出的保證並不是優先運行,而是明確的性能保證,該算法可以做到調度的公平性。
一種比較容易實現的性能保證是處理機分配的公平性。如果在系統中有n個相同類型的進程同時運行,為公平起見,須保證每個進程都獲得相同的處理機時間1/n。
18.公平分享調度算法又是如何做到調度的公平性的?
答: 在公平分享調度算法中,調度的公平性主要是針對用戶而言,使所有用戶能獲得相同的處理機時間,或所要求的時間比例。
19.為什么在實時系統中,要求系統(尤其是CPU)有較強的處理能力?
答:在實時系統中,不但包括周期任務、偶發任務、非周期任務,還包括非實時任務。實時任務要求要滿足時限,而非實時任務要求要使其響應時間盡可能的短。
多種類型任務的混合,使系統的可調度性分析更加困難。實際上有些實時系統CPU處理能力並不強,比如一些嵌入式實時系統,這就要求系統盡量少做一些並發計算任務,留出足夠冗余處理實時任務。
20.按調度方式可將實時調度算法分為哪幾種?
答:按調度方式不同,可分為非搶占調度算法和搶占調度算法兩種。
21.什么是最早截止時間優先調度算法,請舉例說明之。
答:根據任務的開始截止時間確定的任務優先級調度算法。截止時間越早則優先級越高。該算法要求在系統中保持一個實時任務就緒隊列,該隊列按各任務截止時間的先后排序。
22.什么是最低松弛度優先調度算法,請舉例說明之。
答:該算法是根據任務的緊急(或松弛)程度,來確定任務的優先級。任務的緊急程度越高,為該任務所賦予的優先級就越高,以使之優先執行。
例如,一個任務在200ms時必須完成,而它本身所需的運行時間就有100ms,因此,調度程序必須在100ms之前調度執行,該任務的緊急程度(松弛程度)為100ms。
又如,另一任務在400ms時必須完成,它本身需要運行150ms,則其松弛程度為250ms。
最早截止時間優先調度算法:任務要求的截止時間越早,其優先級就越高。
最低松弛度優先調度算法:任務的緊急程度越高,其優先級就越高。
23.何謂“優先級倒置”現象,可采取什么方法來解決?
答:當前0S廣泛采用優先級調度算法和搶占方式,然而在系統中存在着影響進程運行的資源而可能產生“優先級倒置”的現象,即高優先級進程(或線程)被低優先級進程(或線程)延遲或阻塞。
24.試分別說明可重用資源和可消耗資源的性質。
答: 可重用性資源:每一個可重用性資源中的單元只能分配給一個進程使用,不允許多個進程共享。進程在使用可重用性資源時,須按照這樣的順序:請求資源、使用資源、釋放資源。
系統中每一類可重用性資源中的單元數目是相對固定的,進程在運行期間既不能創建也不能刪除它。
可消耗性資源:每一類可消耗性資源的單元數目在進程運行期間是可以不斷變化的,有時它可以有許多,有時可能為0。進程在運行過程中,可以不斷創造可消耗性資源的單元,將它們放入該資源類的緩沖區中,以增加該資源類的單元數目。
進程在運行過程中,可以請求若干個可消耗性資源單元,用於進程自己的消耗,不再將它們返回給該資源類中。
25.試舉例說明競爭不可搶占資源所引起的死鎖。
答:例如,系統中有兩個進程P1和P2,它們都准備寫兩個文件F1和F2,而這兩者都屬於可重用和不可搶占性資源。進程P1先打開F1,然后再打開文件F2;進程P2先打開文件F2,后打開F1,下面示出了這段代碼。
P1
P2
.........
Open(f1,w); Open(f2,w);
Open(f2,w); Open(f1,w);
兩個進程P1和P2在並發執行時,如果P1先打開F1和F2,然后P2才去打開F1(或F2),由於文件F1(F2)已被P1打開,故P2會被阻塞。當P1寫完文件F1(或F2)而關閉F1(F2)時,P2會由阻塞狀態轉為就緒狀態,被調度執行后重新打開文件F1(或F2)。
在這種情況下,P1和P2都能正常運行下去。若P2先打開F1和F2,然后P1才去打開F1(或F2),P1和P2同樣也可以正常運行下去。
但如果在Pl打開F1的同時,P2去打開F2,每個進程都占有一個打開的文件,此時就可能出現問題。因為當P1試圖去打開F2,而P2試圖去打開F1時,
這兩個進程都會因文件已被打開而阻塞,它們希望對方關閉自己所需要的文件,但誰也無法運行,因此這兩個進程將會無限期地等待下去,而形成死鎖。
26.為了破壞“請求和保持”條件而提出了兩種協議,試比較這兩種協議。
答:第一種協議在所有進程開始運行之前,必須一次性地申請其在整個運行過程中所需的全部資源,並且在分配資源時,
只要有一種資源不能滿足進程的要求,即使其它所需的各種資源都空閑也不分配給該進程,而讓該進程等待。因此有資源被嚴重浪費、進程經常會發生飢餓現象等缺點。
第二種協議是對第一種協議的改進,它允許一個進程只獲得運行初期所需的資源后,便開始運行。進程運行過程中再逐步釋放已分配給自己的,
且已用畢的全部資源,然后再請求新的所需資源。如此便可提高設備的利用率,還可減少進程發生飢餓的概率。
27.何謂死鎖?產生死鎖的原因和必要條件是什么?
答: (1) 死鎖是指多個進程因競爭資源而造成的一種僵局,若無外力作用,這些進程都將永遠不能再向前推進;
(2)產生死鎖的原因有二,一是競爭資源,二是進程推進順序非法;
(3)必要條件是:互斥條件,請求和保持條件,不剝奪條件和環路等待條件。
28.在解決死鎖問題的幾個方法中,哪種方法最易於實現?哪種方法是資源利用率最高?
答:解決/處理死鎖的方法有預防死鎖、避免死鎖、檢測和解除死鎖,其中預防死鎖方法最容易實現,但由於所施加的限制條件過於嚴格,會導致系統資源利用率和系統吞吐量降低;而檢測和解除死鎖方法可是系統獲得較好的資源利用率和系統吞吐量。
29.請詳細說明可通過哪些途徑預防死鎖?
答:(1) 摒棄"請求和保持"條件:系統規定所有進程開始運行之前,都必須一次性地申請其在整個運行過程所需的全部資源,
但在分配資源時,只要有一種資源不能滿足某進程的要求,即使其它所需的各資源都空閑,也不分配給該進程,而讓該進程等待;
(2)摒棄"不剝奪”條件:系統規定,進程是逐個地提出對資源的要求的。當一個已經保持了某些資源的進程,再提出新的資源請求而不能立即得到滿足時,必須釋放它已經保持了的所有資源,待以后需要時再重新申請;
(3)摒棄"環路等待"條件:系統將所有資源按類型進行線性排序,並賦予不同的序號,且所有進程對資源的請求必須嚴格按序號遞增的次序提出,這樣,在所形成的資源分配圖中,不可能再出現環路,因而摒棄了"環路等待"條件。
30.在教材銀行家算法的例子中,如果P<sub>0</sub>發出的請求向量由Request0(0,2,0)改為Request0(0,1,0),問系統可否將資源分配給它?
答:PO發出請求向量Requst0(0,1,0),按銀行家算法進行檢查:
①Request0(0,1,0)≤Need0(7,4,3):
②Request0(0,1,0)≤Available(2,3,0);
③系統暫時先假定可為P0分配資源,修改Available,Allocation1和Need1向量在下面數據結構中的數值:
Available[j]:=Available[j]-Request i[j];A1location [i,j]:=A1location [i,j]+Request i[j];eed [i,j]:=Need [i,j]-Requesti[j];
計算結果為:
Available0=Available0(2,3,0)-Request0(0,1,0)=(2,2,0)
Allocation0=Allocation0(0,1,0)+Request0 (0,1,0)=(0,2,0)
Need0=Need0(7,4,3)-Request0(0,1,0)=(7,3,3)
可以找到一個安全序列(P1,P3,P4,P2,P0},所以系統是安全的,系統可以立即將P1所申請的資源(0,1,0)分配給它。給P1分配資源之后,系統的資源數目Available=(2,2,0)
31.在銀行家算法中,若出現下述資源分配情: