目录

  • 1 第一章操作系统引论
    • 1.1 第一课时 123节
    • 1.2 第二课时 45节
  • 2 第二章进程的描述与控制
    • 2.1 第一课时 12节
    • 2.2 第二课时 3节
    • 2.3 第三课时 4节
    • 2.4 第四课时 5节
    • 2.5 第五课时 6节
    • 2.6 第六课时 78节
    • 2.7 第七课时  习题
  • 3 第三章处理机调度与死锁
    • 3.1 第一课时1、2节
    • 3.2 第二课时3节
    • 3.3 第三课时4节
    • 3.4 第五课时5、6节
    • 3.5 第六课时7、8节
    • 3.6 第七课时习题
  • 4 第四章存储器管理
    • 4.1 第一课时1,2节
    • 4.2 第二课时3节
    • 4.3 第三课时4,5节
    • 4.4 第四课时6节
  • 5 第五章虚拟内存
    • 5.1 5.1、5.2
    • 5.2 5.3
    • 5.3 5.4、5.5
  • 6 第六章 设备管理
    • 6.1 第一课时1、2节
    • 6.2 第二课时3、4节
    • 6.3 第三课时5、6节
    • 6.4 第四课时7节8节(一)
    • 6.5 第五课时8节(二)
  • 7 文件管理
    • 7.1 第一课时1、2节
    • 7.2 第二课时3、4节
    • 7.3 第三课时5节
  • 8 磁盘管理
    • 8.1 第一课时1节
    • 8.2 第二课时2、3节
    • 8.3 第三课时4、5节
第七课时  习题

进程同步补充补充练习

1.生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里,现要用自动分拣系统把白子黑子分开,该系统由两个并发执行的进程组成,功能如下:

1)进程A专拣黑子,进程B专拣白子

2)每个进程每次只拣一个子,当一个进程拣子时不允许另一个去拣子。

分析:1)进程关系分析:

          互斥

      2)信号量:

         1个信号量

算法实现:

begin

  s:semaphore:=1;

  parbegin

     process A

       begin

          repeat

            …

            wait(s);

            拣黑子;

            signal(s);

            …

         until false

       end

process B

       begin

          repeat

            …

            wait(s);

            拣白子;

            signal(s);

            …

         until false

       end

    parend

end

题目改进:若题目改为当一个进程拣了棋子后必须让另一个进程拣一个棋子。

分析:

此时两进程关系为同步,需要两个信号量

算法实现:

begin

 s1,s2semaphore:=1,0;

 cobegin  

process A

        begin

           repeat

             …

             wait(s1);

             拣黑子;

             signal(s2);

            until false

         end

process B

        begin

           repeat

             …

             wait(s2);

            拣白子;

             signal(s1);

            until false

         end

    coend

end

例题2:设在公共汽车上,司机何售票员的活动分别是:司机:启动车辆;正常行车;到站停车;售票员:上乘客,关车门;售票;开车门,下乘客;试用P,V操作对其过程进行控制。           

问题分析:

1)进程关系分析:

    有先后顺序,是同步

2)信号量分析:

    两个信号量控制俩进程

run---司机进程信号量

启动车辆

正常行驶

到站停车

stop---售票员进程信号量

上乘客、关车门

售票

开车门、下乘客

var

stop,run:semaphore

 stop=1;run=0;

Begin

  cobegin

    conductor

      begin

         repeat

            上乘客,关车门;

             signal(run);

             售票;

             wait(stop);

             开车门,下乘客;

          until false

       end

driver

      begin

         repeat

            wait(run)

             正常行驶;

             到站停车;

             signal(stop);

          until false

       end

    coend

 end

例题3:和尚挑水问题:寺庙里有多个小和尚和老和尚,有一个水缸一个水井三个水桶。小和尚从井中打水倒入水缸,只能容纳10桶水,老和尚从水缸中取水喝。水井每次只能入一个水桶,水缸入水、取水也每次只能一个水桶。试用P,V操作描述和尚挑水、饮水的互斥同步过程。

问题分析:

1)进程关系分析:

   多个打水进程互斥,多个取水进程互斥,打水、取水进程同步

2)信号量分析:

①水井、水缸两个互斥信号量:

mutex1—水井;mutex2—水缸;初值均为1

②打水进程信号量:

empty(水缸不满时可以打水)初值为10

③取水进程信号量:

full(水缸有水时可以取水)初值为0

④水桶个数:

count(初值为3)

varmutex1,mutex2,empty,full,

count:semaphore;

mutex1:=1;mutex2:=1;

empty:=10;full:=0;

count:=3;

begin

   parbegin

yongmonk:

   begin

      repeat

         …

         p(empty);

         p(count);

         p(mutex1);

            从水井打水;

         v(mutex1);

         p(mutex2);

            往缸中放水;

         v(mutex2);

         v(full);

         v(count);

      until false

  end

old monk:

   begin

      repeat

         …

         p(full);

         p(count);

         p(mutex2);

           从水缸中取水;

         v(mutex2);

         v(count);

         v(empty);

      until false

    end

  parend

end