上一篇文章總結了一些關於進程的知識點,這章的目的也是根據《計算機操作系統》(第四版、湯子瀛)的書來總結一下進程調度和死鎖的相關知識點,這一章其實和上一章緊密相連,所以如果沒有基礎或基礎較差(對一些概念還有些模糊)的朋友們先去看上一章的簡答題總結,然後再看這一章的內容會比較好接受一些。當然,這一章還包括一些所謂的與“計算”相關的知識點,能夠方便大家理解相應的知識點,如銀行家算法的應用。PS:阿婆主只是知識的搬運工~分享者~
目錄(檢索你需要知道的知識點)
第三章操作系統的基礎知識點
3.1.1 引起進程調度的因素有哪些?
3.1.2 試說明低級調度的主要功能。
3.1.3 在採用優先級調度算法的系統中,請回答以下問題:
(1)沒有執行進程是否一定沒有就緒進程?
(2)沒有執行進程,沒有就緒進程,或者兩者都沒有,是否可能?各是什麼情況?
(3)執行進程是否一定是可運行進程中優先權最高的?
3.1.4 假設一個系統中有5個進程,它們的到達時間和服務時間如下表所示,忽略I/O以及其他開銷時間,若分別按先來先服務(FCFS)、非搶佔及搶佔的短作業優先(SJF)、高響應比優先(HRRN)、時間片輪轉(RR,時間片=1)、多級反饋隊列調度算法(FB,第i級隊列的時間片=)進行CPU調度,請給出各進程的完成時間、週轉時間、帶權週轉時間、平均週轉時間和平均帶權週轉時間。
3.1.5 高響應比優先調度算法的優點是什麼?
3.1.6 爲什麼說多級反饋隊列調度算法能較好地滿足各方面用戶的需要?
3.1.7 有一個內存中只能裝入兩道作業的批處理系統,作業調度採用短作業優先的調度算法,進程調度採用以優先數爲基礎的搶佔式調度算法。有如下表所示的作業序列,表中所列的優先數是指進程調度的優先數,且優先數越小優先級越高。
(1)列出所有作業進入內存的時刻以及結束的時刻。
(2)計算作業的平均週轉時間。
3.2.1 對下面的5個非週期性實時任務,按最早開始截止時間優先調度算法應如何進行CPU調度?
3.2.2 若有3個週期性任務,任務A要求每20ms執行一次,執行時間爲10ms;任務B要求每50ms執行一次,執行時間爲10ms;任務C要求每50ms執行一次,執行時間爲15ms,應如何按最低鬆弛度優先算法對它們進行CPU調度?
3.3.1 在哲學家就餐問題中,如果將先拿起左邊的筷子的哲學家稱爲左撇子,而將先拿起右邊的筷子的哲學家稱爲右撇子,請說明在同時存在左撇子和右撇子的情況下,任何就座安排都不會產生死鎖。
3.3.2
(1)3個進程共享4個同種類型的資源,每個進程最大需要2個資源,請問該系統是否會因爲競爭該資源而死鎖?
(2)n個進程共享m個同類資源,若每個進程都需要用該類資源,而且各進程對該類資源的最大需求量之和小於m+n。說明該系統不會因競爭該類資源而死鎖。
(3)在(2)中,如果沒有“每個進程都需要用該類資源”的限制,情況又會如何?
3.3.3 不安全狀態是否必然導致系統進入死鎖狀態?
3.3.4 在銀行家算法中,若出現下面的資源分配情況:
(1)計算分配矩陣的值,並判斷該狀態是否安全?
(2)若進程P2提出請求Request(1,2,2,2),系統能否將資源分配給它?
(3)如果系統立即滿足P2的上述請求,請問系統是否立即進入死鎖狀態?
3.3.5 假定某計算機系統有R1設備3臺,R2設備4臺,它們被P1、P2、P3和P4這4個進程互斥共享,且已知這4個進程均以下面所示的順序使用現有設備:
申請R1申請R2申請R1釋放R1釋放R2釋放R1
請問系統運行過程中是否可能產生死鎖?如果有可能的話,請舉出一種情況,並畫出表示該死鎖狀態的進程--資源圖。
3.3.6 死鎖檢測程序的運行頻率較高或較低,各有什麼優缺點?
3.3.7 解除死鎖,在選擇撤銷進程或被搶佔資源的進程時,可考慮哪些因素?
第三章操作系統的基礎知識點
3.1 進程調度及調度算法中的典型問題分析
3.1.1 引起進程調度的因素有哪些?
答:引起進程調度的因素有:
(1)正在執行的進程正常終止或異常終止。
(2)正在執行的進程因某種原因而阻塞。具體包括:
a、提出I/O請求後被阻塞;
b、在調用wait操作時因資源不足而阻塞;
c、因其他原因執行block原語而阻塞等。
(3)在引入時間片的系統中,時間片用完。
(4)在搶佔調度方式中,就緒隊列中某進程的優先權變得比當前正在執行的進程高,或者有優先權更高的進程進入就緒隊列。
3.1.2 試說明低級調度的主要功能。
答:低級調度用於決定就緒隊列中的哪個進程應獲得處理機,並由分派程序把處理機分配給該進程。其主要功能有:
(1)保存當前進程的處理機現場信息。
(2)按某種算法選擇投入執行的新進程。
(3)恢復新進程的現場,從而將處理機分配給新進程。
3.1.3 在採用優先級調度算法的系統中,請回答以下問題:
(1)沒有執行進程是否一定沒有就緒進程?
(2)沒有執行進程,沒有就緒進程,或者兩者都沒有,是否可能?各是什麼情況?
(3)執行進程是否一定是可運行進程中優先權最高的?
答:
(1)是。如果有就緒進程,那麼調度程序必定會把CPU分配給其中的一個進程,因此必定會有執行進程。
(2)有可能系統中有執行進程但無就緒進程,此時,除了執行進程外,系統中可能沒有其他進程,或者有其他進程但這些進程都分別在等某個事件(如I/O操作)完成而均處於阻塞狀態;前一種情況下,如果正在執行的進程終止或也因等待某個事件而進入阻塞狀態,若其他進程還沒被喚醒,則系統變爲既沒有執行進程也沒有就緒進程的狀態。
(3)不一定。在採用非搶佔優先級調度算法時,某個進程正在執行的過程中,若有一個優先權更高的進程進入就緒狀態,由於不進行CPU搶佔,執行進程便不再是可運行進程中優先權最高的進程。若採用搶佔策略,則執行進程一定是可運行進程中優先權最高的。
3.1.4 假設一個系統中有5個進程,它們的到達時間和服務時間如下表所示,忽略I/O以及其他開銷時間,若分別按先來先服務(FCFS)、非搶佔及搶佔的短作業優先(SJF)、高響應比優先(HRRN)、時間片輪轉(RR,時間片=1)、多級反饋隊列調度算法(FB,第i級隊列的時間片=)進行CPU調度,請給出各進程的完成時間、週轉時間、帶權週轉時間、平均週轉時間和平均帶權週轉時間。
進程 | 到達時間 | 服務時間 |
---|---|---|
A | 0 | 3 |
B | 2 | 6 |
C | 4 | 4 |
D | 6 | 5 |
E | 8 | 2 |
分析:進程調度的關鍵是理解和掌握調度所採用的算法,FCFS算法選擇最早進入就緒隊列的進程投入執行;SJF算法選擇估計運行時間最短的進程投入執行,採用搶佔方式時,若新就緒的進程運行時間比正在執行的進程的剩餘運行時間短,則新進程將搶佔CPU;HRRN算法選擇響應比(響應比=(運行時間+等待時間)/運行時間)最高的進程投入執行;RR算法中,就緒進程按FIFO方式排隊,CPU總是分配給隊首的進程,並只能執行一個時間片;FB算法將就緒進程排成多個不同優先權及時間片的隊列,新就緒進程總是按FIFO方式先進入優先權最高的隊列,CPU也總是分配給較高優先權隊列上的隊首進程,若執行一個時間片仍未完成,則轉入下一級隊列的末尾,最後一級隊列則採用時間片輪轉方式進行調度。
答:對上述5個進程按各種調度算法調度的結果如下圖所示,從中可以計算出各進程的完成時間、週轉時間和平均週轉時間如下表所示。
|
進程 | A | B | C | D | E | 平均 |
---|---|---|---|---|---|---|---|
FCFS |
完成時間 週轉時間 帶權週轉時間 |
3 3 1.00
|
9 7 1.17 |
13 9 2.25 |
18 12 2.40 |
20 12 6.00 |
8.6 2.56 |
SJF(非搶佔) |
完成時間 週轉時間 帶權週轉時間 |
3 3 1.00
|
9 7 1.17
|
15 11 2.75
|
20 14 2.80
|
11 3 1.50
|
7.6 1.84 |
SJF(搶佔) |
完成時間 週轉時間 帶權週轉時間 |
3 3 1.00
|
15 13 2.16
|
8 4 1.000
|
20 14 2.80
|
10 2 1.00
|
7.2 1.59 |
HRRN |
完成時間 週轉時間 帶權週轉時間 |
3 3 1.00
|
9 7 1.17
|
13 9 2.25
|
20 14 2.80
|
15 7 3.50
|
8 2.14 |
RR(q=1) |
完成時間 週轉時間 帶權週轉時間 |
4 4 1.33
|
18 16 2.67
|
17 13 3.25
|
20 14 2.80
|
15 7 3.50
|
10.8 2.71
|
FB(q=) |
完成時間 週轉時間 帶權週轉時間 |
3 3 1
|
17 15 2.50
|
18 14 3.50
|
20 14 2.80
|
14 6 3.00
|
10.4 2.56
|
FB(q=) (立即搶佔) |
完成時間 週轉時間 帶權週轉時間 |
4 4 1.33
|
18 16 2.67
|
15 11 2.75
|
20 14 2.80
|
16 8 4.00
|
10.6 2.87
|
3.1.5 高響應比優先調度算法的優點是什麼?
答:高響應比優先調度算法是一種高優先權優先調度算法,由於其中的優先權,即響應比等於:
響應比=響應時間/要求服務時間=(等待時間+要求服務時間)/要求服務時間
因此,它具有以下的優點:
(1)如果作業(進程)的等待時間相同,則要求服務時間最短的作業(進程)的優先權最高,因此它有利於短作業(進程),從而可降低作業(進程)的平均週轉時間,提高系統吞吐量。
(2)如果作業(進程)的要求服務時間相同,則其優先權將取決於作業到達(或進程進入就緒狀態)的先後次序,因此體現了公平的原則。
(3)如果作業(進程)較長,它的優先權將隨着等待時間的增長而提高,從而使長作業(進程)不會長期得不到服務。
3.1.6 爲什麼說多級反饋隊列調度算法能較好地滿足各方面用戶的需要?
答:對終端型作業用戶而言,他們提交的作業大多屬於交互型作業,作業通常較小,系統只要能使這些作業在第一個隊列所規定的時間片內完成,便可使他們都感到滿意。對於短批處理作業用戶而言,開始時他們的作業像終端型作業一樣,如果僅在第一個隊列中執行一個時間片即可完成,便可獲得與終端型作業一樣的響應時間;對於稍長的作業,通常也只需在第二隊列和第三隊列各執行一個時間片即可完成,其週轉時間仍然很短。對長批處理作業用戶而言,他們的作業將依次在第1,2,......,n個隊列中運行,然後再按輪轉方式運行,用戶不必擔心其作業長期得不到處理;而且每往下降一個隊列,其得到的時間片將隨着增加,故可進一步縮短長作業的等待時間。
3.1.7 有一個內存中只能裝入兩道作業的批處理系統,作業調度採用短作業優先的調度算法,進程調度採用以優先數爲基礎的搶佔式調度算法。有如下表所示的作業序列,表中所列的優先數是指進程調度的優先數,且優先數越小優先級越高。
作業名 | 到達時間 | 估計運行時間 | 優先數 |
---|---|---|---|
A | 10:00 | 40分 | 5 |
B | 10:20 | 30分 | 3 |
C | 10:30 | 50分 | 4 |
D | 10:50 | 20分 | 6 |
(1)列出所有作業進入內存的時刻以及結束的時刻。
(2)計算作業的平均週轉時間。
答:根據題意,作業的調度和運行情況如下圖所示,從圖中可以看出。
(1)A、B、C、D各作業進入內存的時刻分別是10:00、10:20、11:10、10:50;它們完成的時刻分別是11:10、10:50、12:00、12:20。
(2)A、B、C、D的週轉時間分別是70分鐘、30分鐘、90分鐘、90分鐘,故它們的平均週轉時間爲70分鐘。
3.2 實時調度中的典型問題分析
3.2.1 對下面的5個非週期性實時任務,按最早開始截止時間優先調度算法應如何進行CPU調度?
進程 | 到達時間 | 執行時間 | 開始截止時間 |
A | 10 | 20 | 110 |
B | 20 | 20 | 20 |
C | 40 | 20 | 50 |
D | 50 | 20 | 90 |
E | 60 | 20 | 70 |
答:對上面5個非週期性實時任務,按最早開始截止時間優先調度算法進行CPU調度的結果如下圖所示,可見,在採用非搶佔調度方式時,系統沒能保證B任務對截止時間的要求。
3.2.2 若有3個週期性任務,任務A要求每20ms執行一次,執行時間爲10ms;任務B要求每50ms執行一次,執行時間爲10ms;任務C要求每50ms執行一次,執行時間爲15ms,應如何按最低鬆弛度優先算法對它們進行CPU調度?
答:對上面的3個週期性任務,利用最低鬆弛度優先算法進行調度的情況如下圖所示。
3.3 死鎖中的典型問題分析
3.3.1 在哲學家就餐問題中,如果將先拿起左邊的筷子的哲學家稱爲左撇子,而將先拿起右邊的筷子的哲學家稱爲右撇子,請說明在同時存在左撇子和右撇子的情況下,任何就座安排都不會產生死鎖。
分析:這類題目的關鍵是必須證明產生死鎖的四個必要條件的其中一個不可能成立。在本題中,互斥條件、請求與保持條件、不剝奪條件顯然是成立的,因此必須證明“循環等待”條件不成立。
答:對本題,死鎖產生的必要條件“循環等待”不可能成立。如果存在所有左邊的哲學家等待右邊的哲學家放下筷子的循環等待鏈。而且,系統中也不可能存在五個以下哲學家的循環等待鏈,因爲,不相鄰的哲學家之間不競爭資源。因此,不可能產生死鎖。(PS:爲了更加直觀,阿婆主畫了下面的圖畫便於大家理解,無標識,僅限於舉例理解)
3.3.2
(1)3個進程共享4個同種類型的資源,每個進程最大需要2個資源,請問該系統是否會因爲競爭該資源而死鎖?
(2)n個進程共享m個同類資源,若每個進程都需要用該類資源,而且各進程對該類資源的最大需求量之和小於m+n。說明該系統不會因競爭該類資源而死鎖。
(3)在(2)中,如果沒有“每個進程都需要用該類資源”的限制,情況又會如何?
答:
(1)該系統不會因爲競爭該類資源而死鎖。因爲,必有一個進程可獲得2個資源,故能順利完成,並釋放出其所佔用的2個資源給其他進程使用,使他們也順利完成。
(2)用、和來分別表示第i個進程對該類資源的最大需求量、還需要量和已分配到的量,根據題意它們將滿足下述條件:
(對所有i)
若系統已因競爭該類資源而進入死鎖狀態,則意味着已有一個以上的進程因申請不到該類資源而無限阻塞,而m個資源肯定已全部分配出去,即
因此:
即:
這樣,至少必須存在一個進程,其,這顯然與題意不符合,所以該系統不可能因競爭該類資源而進入死鎖狀態。
(3)此時系統可能發生死鎖,如n=4,m=3時,若P1的Max爲0,而其餘三個進程的Max都爲2,則仍然滿足最大需求量之和(即6)小於m+n(即7)的要求,但當除P1以外的其餘三個進程各得到1個資源時,這三個進程便可能進入死鎖狀態。
3.3.3 不安全狀態是否必然導致系統進入死鎖狀態?
答:不安全狀態不一定導致系統進入死鎖狀態。因爲,安全性檢查中使用的向量Max是進程執行前提供的,而在實際運行過程中,一進程需要的最大資源量可能小於Max,如:一進程對應的程序中有一段進行錯誤處理的代碼,其中需要n個A種資源,若該進程在運行過程中沒有碰到相應錯誤而不需調用該段錯誤處理代碼,則它實際上將完全不會請求這n個A種資源。
3.3.4 在銀行家算法中,若出現下面的資源分配情況:
Process | Max | Need | Available |
P0 | 0 0 4 4 | 0 0 1 2 | 1 6 2 2 |
P1 | 2 7 5 0 | 1 7 5 0 | |
P2 | 3 6 10 10 | 2 3 5 6 | |
P3 | 0 9 8 4 | 0 6 5 2 | |
P4 | 0 6 6 10 | 0 6 5 6 |
(1)計算分配矩陣的值,並判斷該狀態是否安全?
(2)若進程P2提出請求Request(1,2,2,2),系統能否將資源分配給它?
(3)如果系統立即滿足P2的上述請求,請問系統是否立即進入死鎖狀態?
答:
(1)Allocation = Max - Need,所以該時刻Allocation的值如下:
Process | Allocation |
P0 | 0 0 3 2 |
P1 | 1 0 0 0 |
P2 | 1 3 5 4 |
P3 | 0 3 3 2 |
P4 | 0 0 1 4 |
利用安全性算法對上面的狀態進行分析(見下表),找到了一個安全序列{P0,P3,P4,P1,P2},故系統是安全的。
(2)P2發出請求向量Request(1,2,2,2)後,系統按銀行家算法進行檢查:
a、
b、
c、系統先假定可爲P2分配資源,並修改Available,和向量:
Available = (0,4,0,0)
d、進行安全性檢查:此時對所有的進程,條件都不成立,即Available不能滿足任何進程的請求,故系統進入不安全狀態。
因此,當進程P2提出請求Request(1,2,2,2)後系統不能將資源分配給它。
(3)系統立即滿足進程P2的請求(1,2,2,2)後,並沒有馬上進入死鎖狀態。因爲,此時上述進程並沒有申請新的資源,並因得不到資源而進入阻塞狀態。只有當上述進程提出新的請求,導致所有沒執行完的多個進程因得不到資源而阻塞並形成循環等待鏈時,系統才進入死鎖狀態。
3.3.5 假定某計算機系統有R1設備3臺,R2設備4臺,它們被P1、P2、P3和P4這4個進程互斥共享,且已知這4個進程均以下面所示的順序使用現有設備:
申請R1申請R2申請R1釋放R1釋放R2釋放R1
請問系統運行過程中是否可能產生死鎖?如果有可能的話,請舉出一種情況,並畫出表示該死鎖狀態的進程--資源圖。
答:系統運行過程種有可能產生死鎖。根據題意,系統中只有R1設備3臺,它要被4個進程共享,且每個進程對它的最大需求均爲2,那麼,當P1、P2、P3進程各得到1個R1設備時,它們可以繼續運行,並均可以順利地申請到一個R2設備,但當它們第2次申請R1設備時,因系統已無空閒的R1設備,它們將全部阻塞,並進入循環等待的死鎖狀態。此時的進程--資源圖如下圖所示:
3.3.6 死鎖檢測程序的運行頻率較高或較低,各有什麼優缺點?
答:死鎖的檢測可非常頻繁地在每次資源請求時進行,其優點是:可以儘早地檢測到死鎖及其所涉及的進程,並有可能找到引起系統死鎖的那個(或那幾個)進程。其缺點是頻繁的檢測會耗費相當多的CPU時間,增加系統的開銷。相反,每隔較長時間或當CPU利用率下降到較低程度時進行死鎖的檢測,則可以降低運行死鎖檢測程序的開銷,但在檢測到死鎖時可能涉及到很多進程,也難以找到引起死鎖的那個進程,從而難以從死鎖狀態恢復過來。
3.3.7 解除死鎖,在選擇撤銷進程或被搶佔資源的進程時,可考慮哪些因素?
答:解除死鎖,在選擇撤銷進程或被搶佔資源的進程時,可考慮下列因素:
(1)優先權;
(2)進程已執行的時間;
(3)估計的剩餘執行時間;
(4)已產生的輸出量;
(5)已獲得的資源量和資源類型;
(6)還需要的資源量;
(7)進程的類型(批處理型或交互型);
(8)需要被撤銷的進程數等。