操作系統復習題(應用題)


五、應用題

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM