操作系统复习题(应用题)


五、应用题

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