操作系统第五次笔记(经典进程同步互斥问题)

1.生产者消费者问题:一组生产者进程和一组消费者进程共享一个初始为空大小为n的缓冲区,缓冲区没满时生产者可以放入消息,反之缓冲区没空时消费者可以从中拿走消息否则需要等待,同时只允许一个生产者进程或一个消费者进程。
分析:临界空间有n块,表示生产者最多能放入n块信息,每有一个生产者就需要将缓冲区的消息加1表现为满块加一,空块减一,消费者进程就可以表现为空块加一满块减一。
在这里插入图片描述
注:当对缓冲区操作时,必须设置一个mutex互斥信号量表示同时进入缓冲区的进程数只能有一个。
当没有空块时P(empty)就会导致生产者进程堵塞,同理没有满块时P(full)也会堵塞消费者进程。当进程操作完成后V可增加块的数量。可理解为P就是对大于0的值减一而V就是对小于n的数加一。
2.复杂的消费者生产者问题:桌子上有一个盘子,每次只能放入一个水果,妈妈会放入橘子,爸爸会放入苹果,儿子只吃橘子而女儿只吃苹果。只有盘子空时爸爸妈妈才会放入水果,只有盘子里有自己想要的水果孩子才会拿走。
分析:作为放水果的道具盘子必须是临界资源且只有一个。当放入水果时,孩子们对于水果的要求也会导致水果也是临界变量。
在这里插入图片描述
爸爸妈妈儿子女儿各是一个单独的进程,作为生产者的父母所需的临界变量是盘子,会造成对应的水果增多,所以P(plate)V(apple),对于孩子所需的资源为对应的水果所以一直P(fruit)直到对应的水果出现,最后拿走水果的时候会多出空盘子造成V(plate)。
3.读者-写者问题:有读者写者两组并发进程,共享一个文件,当两个或以上读进程同时进入时不会造成影响,但若是有写者进入则不能有读者或其他写者进程进入了。要求有以下几个
①:允许多个读者同时进行操作。
②:只允许一个写者往文件中写信息。
③:写者运行时不允许其他读者或写者进入。
④:写者运行前必须保证其他进程都运行完。
分析:主要是写者的问题,对于写者可直接写成独占临界区,而对于读者,必须判断临界区中是否有写者,其次临界区中有读者不能影响新的读者访问临界区所以可设置一个计数器,当第一个读进程进入时判断是否有写进程在写,若没有则屏蔽写进程,后面的读进程发现自己不是唯一的一个则可直接进入,因为此时肯定没有写进程在写。
在这里插入图片描述
注:对于计数器必须保证同时只能有一个进程访问,否则可能造成多个读进程同时访问计数器造成计算器数量误差(两个时间上几乎同时进入的进程一个查到count是0然后将count++,但如果还没改的时候另一个查到的也是0会导致读进程阻塞)
④改进的读者写者问题:上一个解决方法可能会造成的问题是如果一直有读进程来会造成写进程一直等待,会产生饥饿现象。所以需要在写进程来的时候设一个信号量使读进程不能再进入临界区。容易产生的问题是如果设置一个信号量标明写进程已经在等待了,当读进程检查时若无写进程在等待会消耗掉该信号量,所以需要在读进程确保进入临界区(此时还没有写进程等待所以可以进入)后,真正进入临界区前(若读取后再归还不仅会阻塞写进程的进入而且会阻塞读进程的进入)归还该信号量。
在这里插入图片描述

相当于给临界区加了两道门,外面的门为w,里面的门为rw,已存在读进程时写进程会先申请进入第一道门,此时就会将第一道门关上后面的读进程和写进程就不能再进入了,写进程只需要等待里面第二道门里的读进程全部执行完毕将第二道门的钥匙打开就可以了。
⑤:哲学家进餐问题:圆桌上坐着五个哲学家,每两名哲学家之间有一根筷子,只能拿身边的筷子,当有两根筷子时就可以吃饭了。
分析:当采用贪心算法时,如果所有哲学家都拿起左边的筷子,当他们想拿右边的筷子时就会导致所有人都没有右边的筷子会造成死锁。可规定同时只能有一个哲学家拿筷子,如果他左右两边都有筷子那么就让他吃饭,继续下一位哲学家,如果A没有找齐筷子,那么就等待缺少的那根筷子被使用完成。等待时其他哲学家不会新拿起筷子,所以那根筷子是一定能在有限的时间内被A拿起来的。此时只需要给拿筷子加上一个临界区表明同时只能有一位哲学家拿筷子。
在这里插入图片描述
只有两个筷子都有时才能出临界区。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值