哈工大os学习笔记九(进程同步与信号量)
一、 进程同步
1.进程同步
一组进程为了协调其推进速度,在某些地方需要相互等待或者唤醒,这种进程间的相互制约就被称作是进程同步。这种合作现象在操作系统和并发式编程中属于经常性事件。合理有序的进行就是合作。
所谓进程同步就是等待,等待是进程同步的核心,一个进程要等待另一个进程发送的信号,继续执行。不是任意前进的。
进程同步也好,互斥也好,都是为了多个进程合理有序的向前推进。
2.生产者消费者
进程的等待是关键,先分析哪里会让进程停,再分析哪里会发信号让信号继续。
所谓的停,先判断一下,这个条件是否能够满足我这个进程的需求;这个资源是否充足能够满足我的需求继续执行下去。而这个条件和资源依赖于另一个进程结束时产生。这就是所谓的继续前进。几个进程之间相互直接制约,合理有序的前进最终完成任务。
二、信号量
单独依靠信号,会导致无法唤醒P2进程。
生产者消费者之间的多种映射对应,多个生产者,多个 消费者。
由这个原因引出信号量。
1.信号量
同步也就是等待唤醒,然后根据信号量实现等待唤醒。
就绪态,阻塞态,运行态的切换。
semaphore<=0等待,睡眠,阻塞,进程根据信号量的值决定干什么。
多进程合作完成一件事的时候,会进行合作,合作就不是随便执行,多进程在执行推进的过程中就要合理有序的推进执行,表达的含义就是执行到一定程度就要等待,依靠信号量进行的等待,看信号量的值进行判断。
semaphore=0 表示缓冲区满了,空闲缓冲区为0,空闲资源为0,空闲资源为2,空闲资源为-2缺2个资源。
2.信号量与PV操作
这个进程同步机制应该算的上是古董级的了,这种机制的主要思想就是——通过将资源数量化,将申请资源和释放资源的动作具体化,从而达到对资源的操作及结果可视化的程度。
v(semaphore s )
{
s.value++;
if(s.value<=0){
wakeup(s.queue)}
}
先看有没有资源能不能用,在用mutex(互斥信号量 )上锁。
有减有增