五、應用題
1.畫出有掛起操作的操作系統中進程狀態轉換圖,標出引起進程狀態變化的主要原因。
2.有一個可以存放消息的緩沖池BUF,由指針IN和OUT分別指示當前可存取消息的緩沖區位置。每存入一消息,執行IN:=(IN+1 )mod 128,每取出一消息,執行OUT:=(OUT+1 )mod 128,現在有多個進程並 發共享該緩沖池BUF,試用信號量機制協調諸進程正確地工作。
1 int mutex=1; //互斥量:in和out 2 int empty=128,full=0; //buf容量 3 void write(){ 4 while(true){ 5 p(mutex); 6 p(empty); 7 IN:=(IN+1)mod 128; 8 v(full); 9 v(mutex); 10 } 11 } 12 void read(){ 13 while(true){ 14 p(mutex); 15 p(full); 16 OUT:=(OUT+1)mod 128; 17 v(empty); 18 v(mutex); 19 } 20 }
3.某集裝箱倉庫共有100個倉位,用同一輛吊車負責集裝箱的吊進和吊出。現有一批集裝箱運來進倉,另有貨主不斷前來提貨(按倉位順序進出),設進倉用過程PUTIN表示,出倉用過程GETOUT表示,請用 P、V操作協調上述工作。
1 int mutex=1; //互斥量:進倉出倉(有無吊車) 2 int empty=100,full=0; //倉庫容量 3 void in(){ 4 while(){ 5 p(mutex); 6 p(empty); 7 PUTIN; 8 v(full); 9 v(mutex); 10 } 11 } 12 void out(){ 13 while(){ 14 p(mutex); 15 p(full); 16 PUTOUT; 17 v(empty); 18 v(mutex); 19 } 20 }
4.有一獨木橋,每次只允許一人過橋,現在橋的南北兩端隨時有人要過橋(PASS),為保證安全,請用P、V操作解決如下問題:
(1)只要橋上無人則允許任一方的一人過橋,橋上有人則等待。
1 int mutex=1; 2 void south(){ 3 while(ture){ 4 p(mutex); 5 pass; 6 v(mutex); 7 } 8 } 9 void north(){ 10 while(ture){ 11 p(mutex); 12 pass; 13 v(mutex); 14 } 15 }
(2)兩邊的人交替過橋。即某一方一人過橋后要讓另一方的一個人過橋,橋上有人則等待。
1 int mutex=1; //橋上是否有人 2 int mutex_s=1,mutex_n=0; //設置南邊先通行 3 void south(){ 4 while(ture){ 5 p(mutex); 6 p(mutex_s); 7 pass; 8 v(mutex_n); 9 v(mutex) 10 } 11 } 12 void north(){ 13 while(ture){ 14 p(mutex); 15 p(mutex_n); 16 pass; 17 v(mutex_s); 18 v(mutex) 19 } 20 }
5.假設有一個成品倉庫,總共能存放100台成品,生產者進程生產成品放入倉庫,消費者進程從倉庫中取出成品消費,為了防止積壓,倉庫滿時就停止生產。由於倉庫搬運設備只有一套,故成品的進出只能分別 進行。使用P、V操作來實現該方案。
1 int mutex=1; //互斥量:進倉出倉 2 int empty=100,full=0; //倉庫容量 3 void Producter(){ 4 while(){ 5 p(empty); 6 生產 7 p(mutex); 8 v(full); 9 入庫 10 v(empty); 11 v(mutex); 12 } 13 } 14 void Consumer(){ 15 while(){ 16 p(mutex); 17 p(full); 18 出庫 19 v(mutex); 20 } 21 }
6.設進程A每次產生一個記錄依次存入緩存,進程B依次從緩存取出一個記錄加以處理;又設緩存由N個緩存塊(每塊存放一個記錄)組成,對緩存的兩個操作(add_to_buffer,take_from_buffer)屬臨界區,請 用信號量控制上述並發進程。
1 int empty=N,full=0; 2 void A(){ 3 while(ture){ 4 p(empty); 5 add_to_buffer; 6 v(full); 7 } 8 } 9 void B(){ 10 while(ture){ 11 p(full); 12 take_from_buffer; 13 v(empty); 14 } 15 }
7.桌上有一空盤,允許存放一只水果。媽媽可以向盤中放蘋果,也可以向盤中放桔子,兒子專等吃盤中的蘋果,女兒專等吃盤中的桔子。規定當盤空時只能放一只水果供孩子取用,請用P、V原語實現母子三人 的同步。
1 int mutex_p=1,mutex_o=0,mutex_a=0; 2 void mom(){ 3 while(ture){ 4 p(mutex_p); 5 放水果 6 if(放桔子) 7 v(mutex_o) 8 else 9 v(mutex_a) 10 } 11 } 12 void son(){ 13 while(ture){ 14 p(mutex_a); 15 吃蘋果 16 v(mutex_a); 17 v(mutex_p); 18 } 19 } 20 void daughter(){ 21 while(ture){ 22 p(mutex_o); 23 吃桔子 24 v(mutex_o); 25 v(mutex_p); 26 } 27 }
8.有三個進程PA、PB、PC合作解決文件打印問題:PA將文件記錄從磁盤讀入主存的緩沖區1,每執行一次讀一個記錄;PB將緩沖區1的內容復制到緩沖區2,每執行一次復制一個記錄;PC將緩沖區2的內容打 印出來,每執行一次打印一個記錄。緩沖區的大小等於一個記錄的大小。請用P、V操作協調三個進程的工作。
1 int mutex_1=1,mutex_2=1; 2 void PA(){ 3 while(ture){ 4 p(mutex_1); 5 從磁盤讀入 6 } 7 } 8 void PB(){ 9 while(mutex_1==0){ 10 p(mutex_2); 11 復制 12 v(mutex_1); 13 } 14 } 15 void PC(){ 16 while(mutex_2==0){ 17 打印 18 v(mutex_2); 19 } 20 }
9.請寫出一個不會死鎖的哲學家進餐問題的算法。
1 /*方法一:至多只允許四位哲學家同時去拿同側筷子,最終能保證至少有一位哲學家能進餐,並在用完后釋放兩只筷子供他人使用。*/ 2 int s[5]={1,1,1,1,1}; //筷子 3 int mutex=4; 4 void zhexue_i(int i){ //i=1,2,3,4,5 5 while(ture){ 6 思考 7 p(mutex); //申請吃飯 8 p(s[i]); //拿和自己同號的筷子 9 p(s[(i+1)mod 5]); //拿旁邊筷子 10 吃飯 11 v(s[i]); 12 v(s[(i+1)mod 5]); 13 v(mutex); 14 } 15 }
1 /*方法二:規定偶數號哲學家先拿比自己大一號的筷子,再拿和自己同號筷子;奇數號哲學家先拿和自己同號筷子,再拿比自己大一號的筷子;總有一人拿到兩只筷,使用后4人爭奪5只筷子不會死鎖*/ 2 int a[5]={1,1,1,1,1}; 3 void zhexue_i(int i){ 4 while(ture){ 5 思考 6 if(i%2==0){ //偶數號 7 p(a[(i+1)mod 5]); 8 p(a[i]); 9 吃飯 10 v(a[(i+1)mod 5]); 11 v(a[i]); 12 } 13 if(i%2==1){ //奇數號 14 p(a[i]); 15 p(a[(i+1)mod 5]); 16 吃飯 17 v(a[(i+1)mod 5]); 18 v(a[i]); 19 } 20 } 21 }
10.某計算機系統有A、B、C三種資源,其中A共有10台,B共有12台,C共有7台,T0時刻,系統中有P1、P2、P3、P4、P5五個進程,各進程的資源分配和請求情況如下:
Allocation Need Available
A B C A B C A B C
P1 5 1 1 2 3 2 2 10 4
P2 2 0 1 3 2 3
P3 1 0 0 2 3 3
P4 0 1 0 6 3 1
P5 0 0 1 4 1 2
(1)T0時刻系統安全嗎?
work | need | allcation | work=work+allcation | finish | |||||||||
A | B | C | A | B | C | A | B | C | A |
B | C | (10,12,7) | |
p1 | 2 | 10 | 4 | 2 | 3 | 2 | 5 | 1 | 1 | 7 | 11 | 5 | ture |
p2 | 7 | 11 | 5 | 3 | 2 | 3 | 2 | 0 | 1 | 9 | 11 | 6 | ture |
p3 | 9 | 11 | 6 | 2 | 3 | 3 | 1 | 0 | 0 | 10 | 11 | 6 | ture |
p4 | 10 | 11 | 6 | 6 | 3 | 1 | 0 | 1 | 0 | 10 | 12 | 6 | ture |
p5 | 10 | 12 | 6 | 4 | 1 | 2 | 0 | 0 | 1 | 10 | 12 | 7 | ture |
T0時刻系統安全;
(2)設T0時刻P4發出請求(2,3,1),能否實施分配?
request4(2,3,1)<=need4(6,3,1)
request4(2,3,1)<=available(2,10,4)
假定為p4分配資源:
Allocation Need Available
A B C A B C A B C
P1 5 1 1 2 3 2 0 7 3
P2 2 0 1 3 2 3
P3 1 0 0 2 3 3
P4 2 4 1 4 0 0
P5 0 0 1 4 1 2
安全性檢查不通過;
不能實施分配
(3)設T0時刻P3發出請求(2,3,1),能否實施分配?
request3(2,3,1)<=need3(2,3,3)
request3(2,3,1)<=available(2,10,4)
假定為p3分配資源:
Allocation Need Available
A B C A B C A B C
P1 5 1 1 2 3 2 0 7 3
P2 2 0 1 3 2 3
P3 3 3 1 0 0 2
P4 0 1 0 6 3 1
P5 0 0 1 4 1 2
work | need | allcation | work=work+allcation | finish | |||||||||
A | B | C | A | B | C | A | B | C | A |
B | C | (10,12,7) | |
p1 | 3 | 10 | 4 | 2 | 3 | 2 | 5 | 1 | 1 | 8 | 11 | 5 | ture |
p2 | 8 | 11 | 5 | 3 | 2 | 3 | 2 | 0 | 1 | 10 | 11 | 6 | ture |
p3 | 0 | 7 | 3 | 0 | 0 | 2 | 3 | 3 | 1 | 3 | 10 | 4 | ture |
p4 | 10 | 11 | 6 | 6 | 3 | 1 | 0 | 1 | 0 | 10 | 12 | 6 | ture |
p5 | 10 | 12 | 6 | 4 | 1 | 2 | 0 | 0 | 1 | 10 | 12 | 7 | ture |
安全性檢查通過;
能實施分配
11. 設系統中有A、B、C三種資源和P1、P2、P3、P4、P5五個進程,A資源的數量為17,B資源的數量為5,C資源的數量為20。(剩余資源數為2,3,3)T0 時刻系統狀態如下:
|
最大需求 |
已分配資源數量 |
||||
A |
B |
C |
A |
B |
C |
|
P1 |
5 |
5 |
9 |
2 |
1 |
2 |
P2 |
5 |
3 |
6 |
4 |
0 |
2 |
P3 |
4 |
0 |
11 |
4 |
0 |
5 |
P4 |
4 |
2 |
5 |
2 |
0 |
4 |
P5 |
4 |
2 |
4 |
3 |
1 |
4 |
a) T0時刻系統是否安全?若是,請給出一個安全序列。
work | need | allcation | work=work+allcation | finish | order | |||||||||
A | B | C | A | B | C | A | B | C | A |
B | C | (17,5,20) | ||
p1 | 7 | 4 | 11 | 3 | 4 | 7 | 2 | 1 | 2 | 9 | 5 | 13 | ture | 3 |
p2 | 9 | 5 | 13 | 1 | 3 | 4 | 4 | 0 | 2 | 13 | 5 | 15 | ture | 4 |
p3 | 13 | 5 | 15 | 0 | 0 | 6 | 4 | 0 | 5 | 17 | 5 | 20 | ture | 5 |
p4 | 2 | 3 | 3 | 2 | 2 | 1 | 2 | 0 | 4 | 4 | 3 | 7 | ture | 1 |
p5 | 4 | 3 | 7 | 1 | 1 | 0 | 3 | 1 | 4 | 7 | 4 | 11 | ture | 2 |
安全序列:<p4,p5,p1,p2,p3>
b) T0時刻P2請求資源(0,3,4),是否可以實施資源分配?為什么?
request2(0,3,4)<=need2(1,3,4)
request2(c=4)>available(c=3)
不可以實施資源分配,剩余的C資源不夠;
c) T0時刻P4請求資源(2,0,1),是否可以實施資源分配?為什么?
request4(2,0,1)<=need4(2,2,1)
request4(2,0,1)<=available(17,5,20)
假定為p4分配資源:
work | need | allcation | work=work+allcation | finish | |||||||||
A | B | C | A | B | C | A | B | C | A |
B | C | (17,5,20) | |
p1 | 7 | 4 | 11 | 3 | 4 | 7 | 2 | 1 | 2 | 9 | 5 | 13 | ture |
p2 | 9 | 5 | 13 | 1 | 3 | 4 | 4 | 0 | 2 | 13 | 5 | 15 | ture |
p3 | 13 | 5 | 15 | 0 | 0 | 6 | 4 | 0 | 5 | 17 | 5 | 20 | ture |
p4 | 0 | 3 | 2 | 0 | 2 | 0 | 4 | 0 | 5 | 4 | 3 | 7 | ture |
p5 | 4 | 3 | 7 | 1 | 1 | 0 | 3 | 1 | 4 | 7 | 4 | 11 | ture |
安全性檢查通過;
能實施分配
12.單道批處理系統中,一批作業的到達和要求運行時間如下:
作業 |
到達時間(時) |
所需運行時間(小時) |
1 |
8.0 |
0.5 |
2 |
8.2 |
0.4 |
3 |
8.2 |
0.2 |
4 |
8.4 |
0.3 |
5 |
8.5 |
0.2 |
(1)采用SJF算法進行調度
(2)采用HRF算法進行調度
分別指出調度順序,計算平均周轉時間T和平均帶權周轉時間W。(同等條件下,按FCFS原則調度)
(1)調度順序:1→3→1→5→4→2
T=(0.7+1.4+0.5+0.8+0.4)/5=0.6
W=(0.7/0.5+1.4/0.4+0.5/0.2+0.8/0.3+0.4/0.2)/5=2.413
(2)調度順序:1→3→2→5→4
T=(0.5+0.9+0.5+1.2+0.8)/5=0.78
W=(0.5/0.5+0.9/0.4+0.5/0.2+1.2/0.3+0.8/0.2)/5=2.75