操作系统笔记:书Page188第50题

来源:互联网 发布:ddos网络攻击 编辑:程序博客网 时间:2024/06/10 11:43

参考文献:[1]费翔林, 骆斌. 操作系统教程(第五版) [M]. 北京:高等教育出版社,2014. 

题目:某寺庙有小和尚和老和尚若干,水缸一只,由小和尚提水入缸供老和尚饮用。水缸可容水10桶,水取自同一口水井中。水井径窄,每次仅能容纳一只水桶取水,水桶总数为三个。每次放入、取出的水量仅为1桶,而且不能同时进行。规定取水、提水都需要用桶。试用一种同步工具写出小和尚和老和尚放入水、取水的活动过程。




解:


  1. 题意解读:

    • 首先要清楚这是一个大方向上是同步,同步中又有互斥的问题。
    • 同步:所谓同步,是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的、某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。(书上P129页第2段一个意思)显然,小和尚提水给老和尚喝,肯定得小和尚提水的进程先完成,老和尚取水的进程才能进行(规定的、某种先后次序来运行)。而同步资源当然就是缸里的10桶水了,所以设 semaphore empty=10,full=0;(empty对应小和尚要提多少桶才能加满缸,full对应老和尚可以取多少桶水)。
    • 互斥:所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。(书上P128页第5段一个意思)在这里有三个互斥资源:桶、井、缸。设 semaphore S桶=3,S缸=1,S井=1;(S桶:有3只桶能用;S缸:有一只缸能用;S井:有一口井能用)。
  2. PV操作模拟过程伪代码:

semaphore empty=10,full=0; //同步资源semaphore S井=S缸=1,S桶=3; //互斥资源cobegin:    Process_老和尚:    {      L1:P(full); //缸内的水减1桶          P(S桶); //拿桶          P(S缸); //占缸          取水;          V(S缸); //还缸          V(S桶); //还桶          V(empty); //缸还能盛下的水加1桶          goto L1;    }    Process_小和尚:    {      L2:P(empty); //缸内能盛下的水减1桶          P(S桶); //拿桶          P(S井); //占井          P(S缸); //占缸          倒水;          V(S井); //还井          V(S缸); //还缸          V(S桶); //还桶          V(full); //缸还内的水加1桶          goto L2;    }coend;

  • 总结:

    1. PV操作用于互斥时,位于同一进程内。(看上面的S桶、S缸、S井)
    2. PV操作用于同步时,交错出现于两个合作的进程内。(empty、full)
    3. 多个P操作次序不可颠倒,否则可能产生死锁。(比如Process_老和尚中,S桶和S缸换一下,当老和尚把缸占了,小和尚把3只桶全拿去打水了,就会出现死锁)
    4. 多个V操作次序可任意。
    5. 如果既有同步,又有互斥信号,则同步在前,互斥在后。(看上面P(full)/P(empty)都是第一个,比如P(empty)在后面,那么当缸里不能再盛水时,小和尚也要去打水)

  • 阅读全文
    0 0
    原创粉丝点击