操作系统(哈工大视频教程)第16讲到第20讲

该博客详细讲解了操作系统中进程同步的关键概念,包括进程合作、信号量和死锁处理。通过生产者消费者模型阐述了信号量如何控制进程的执行,讨论了信号量的临界区保护、信号量的代码实现以及死锁产生的原因和处理方法。最后,介绍了内存使用和分段的概念。
摘要由CSDN通过智能技术生成

第十六讲 进程同步与信号量

多进程的合作:多进程之间应该具有合适的约束,来共同推进任务的前进;多个进程的相互合作表现为每个进程有自己的一套执行方案,有自己的一套执行的程序,但并不是说程序可以任意执行,有时候需要停下来进行等待,而另外的一些进程在执行的过程中会给其发出一些信号,根据这些信号判断是否还需要接着等待,进而完成合作,同步:
在这里插入图片描述
生产者消费者模型:在这里,生产者和消费者函数的外层while循环都是一个死循环,而内循环的while循环是要能够起到生产者在生产的东西已经达到最大的内存时,就进入死循环,不再生产,直到切换到消费者进行消费,在消费完内存中的东西后,消费者同样进入到消费者的内层的while死循环,使消费者不能够接着消费,直到进程切到生产者,此时生产者的while判断提条件已经改变 ,就可以接着进行生产,由此在生产者和消费者之间不同的切换执行;
在这里插入图片描述
进程的“停”和“走”是进程合作的关键,由此才能实现进程之间合理有序的向前推进,完成任务:
在这里插入图片描述
信号变现的信息是有和没有的区别,应该进一步的使用信号量,来表达更丰富的信息:在下面的程序中counter只能判断有生产者在counterBUFFER_SIZE时,处于睡眠状态,但并不清楚睡眠了几个生产者,这里的counter作为信号,在counterBUFFER_SIZE-1时,只能够唤醒一个线程,这就造成了另外的处于睡眠中的进程一直处在睡眠状态,故这里要有另一个参数能够判断信号的发送,既需要另外一个信号量
在这里插入图片描述
从信号到信号量
在这里插入图片描述
为什么不是直接一次唤醒所有的睡眠进程?这里把sem作为空闲缓冲区或者所欠的缓冲区的数量,故有正有负;sem(semaphore,信号)(sleep memory),信号量,表达更多的信息,根据信号量的值进行对应的动作,既是“等”还是“走”;
在这里插入图片描述
在这里插入图片描述
这里使用了三个信号量,mutex信号量初始值置为1,作为互斥锁存在,保证共享区域内同时只能有一个进程操作;empty信号量的初始值置为BUFFER_SIZE,full信号量的初始值置为0,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值