CZXTSJ002 | 操作系统设计:进程间通讯

1.1 进程间通讯


1、为什么要进程间通讯

1、第一个进程的输出结果作为第二进程的输入

2、第一个进程想第二个进程传送数据

3、两个进程同时操作临界活动不会对彼此产生影响

4、进程A生产数据,进程B消费数据

1.2 竞争条件


在某些操作系统中,协作进程可能会共享一些彼此都能读写的公用存储区

假设打印机最大可打印排队位置是5个,分别是1,2,3,4,5个位置

现在1,2,3,4,5,都是处于忙的状态

进程A 和 进程B 都想打印文件,但现在打印机都是繁忙状态,它们只能等待

突然,1 号位置空闲了(打印完了)

这时假设进程A检测到了1号位置空闲了,刚准备想把文件放进1号位置,哎,调度器认为进程A占用时间太长了,就挂起了进程A, 执行进程B,这时进程B也检测到了1号位置是空的,它就往里面放文件,然后调度器又调度回了进程A, 进程A也把文件放进去,把进程B的文件给覆盖了。这时要打印的 2 份文件,就只打印了一份!

具体打印的是进程A的文件还是进程B的文件取决于进程运行的精确时序,这就发生了竞争条件

有发生竞争条件的程序,如果发生问题,将会是一件非常难受的事儿

要相信一个哲理,如果你觉得这事很可能会发生,那么它一定会发生!!!

1.3 临界区


1、什么是临界区

对共享内存(公用存储区)进行访问的程序代码片段称为临界区

为避免产生竞争条件,就需要把进程A和进程B进行互斥

那如何设计?对于一个好的解决方案,一般具备满足以下

1、任何两个进程不能同时处理临界区

2、不要自我认为对 CPU 的速度和数量做出假设

3、临界区外的进程不能阻塞其他进程

4、不能让进程在临界区外无止休地等待

 1.4 互斥机制的尝试方式


1、关闭中断:中断被关闭后,CPU将不会切换到其他进程,但,如果忘记打开中断将会发生灾难级别错误

2、锁变量:使用不好也会发生竞争条件

3、优先级反转:如进程A的优先级比进程B的高,当进程B进入临界区时,调度器就挂起线程B(没出临界区),这时进程A将永远忙等待下去

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值