2.1操作系统-进程管理:进程的同步与互斥、信号量与PV操作、PV操作与互斥模型、PV操作与同步模型
- 进程的同步与互斥
- PV操作
- PV操作与互斥模型
- PV操作与同步模型
进程的同步与互斥
进程是动态的,有一些动态变迁的过程,进程在计算机中是可以同时存在多个的,而单核CPU同个时刻只能处理一个进程,而现在的CPU是多核的,可以同时处理多个进程,在多个进程的处理过程当中,进程与进程会存在不同的关系,可以分为两个模型,如下:
互斥:互斥模型,进程与进程之间相互抵制,相互排斥。类似于如千军万马过独木桥,很多个进程都想要使用独木桥,但是独木桥一个时间只能让一个进程通过,全局上来看,所有进程都用到了这个独木桥,但是某一个时刻、某一个片段进程只能有一个通过,独木桥在这里就是临界资源,看起来是共享的,但是用起来是相互排斥的,只能让一个人先用,由于临界资源的限制,资源上限值的这些进程,他们之间的关系称为间接制约关系,我们称这些进程之间相互存在互斥关系。
同步:同步模型,进程与进程相互存在一些依赖关系。进程与进程可能不是同时开始的,也可能同时开始,但是速度有差异,在一定情况停下等待,在最终完成任务的时候,必须两个进程都完成,才可以继续走下去。这种由于进程与进程之间速度上的差异,我么称为直接制约关系。
- 临界资源:各进程之间需要互斥方式对其进行共享的资源,如打印机、磁带机、缓冲区(缓冲区在使用过程中,一般同一时刻,只会让一个进程使用,如果多个进程使用可能会产生一些数据上的冲突)等
- 临界区:每个进程中访问临界资源的那段代码称为临界区
- 信号量:是一种特殊的变量,是与P操作和V操作结合起来用的,是一种全局变量,不同进程当中,可以控制同一个信号量;信号量是可以拿来记录相应的资源数量的
PV操作
PV是操作系统的原语,所谓的原语就是具有原子性,P操作和V操作每个里面都包含多个小步骤,原子性就是这些步骤要么都做,要么都不做。无论是P操作和V操作都会结合信号量来操作。
注意:P是荷兰语的Passeren,V是荷兰语的Verhoog;S<0的时候,还可以表示盘对的进程数。
如上图:
P操作会包含两个操作
- S=S-1,针对-1的过程,首先会对信号量-1。-1是怎么理解?信号量是可以拿来记录相应的资源数量的,针对一个资源数量如果有一个仓库,资源的数量是一个固定的取值,那么初始情况的数量就叫做初始值,也叫做是信号量的初值来源,对这个信号量的数量-1,可以理解为在仓库记账本上对资源进行-1记录,这个动作其实就是一个占据资源、锁定资源的一个过程。可以对第一个动作理解为折申请并占据资源,这个申请并占据的过程可以理解为锁定并加锁的过程。P(S)表示P操作的初始值。
- 判断S<0,只判断小于,没有等于。<0判断的其实就是判断资源是否够用,检查资源是否充足,当信号量S<0的时候,说明申请的资源并没有实际占用到,因为已经是负数了,我们就认为是资源不足,因此需要排队等着领资源,所以会进入阻塞队列排队等待,直到领取到资源,然后通知后续的进程执行下一步操作的过程。
V操作会包含两个操作
- S=S+1,会对信号量先执行+1的操作,+1是怎么理解?资源+1,说明资源用完释放掉了,表示用完资源释放的过程。
- S<=0,这个判断是当性能好靓<0的时候,即资源不足需要继续排队,S同时可以表示等待的个数,如S=-1,表示当前有一个进程正在排队,直到领取到资源,然后通知后续的进程执行下一步操作的过程。
从阻塞队列唤醒一个线程,它不会直接进入运行态,而是进入就绪状态,所以一定会执行完当前进程再去执行阻塞被唤醒的进程。
PV是成对出现的,只加锁不解锁,会形成死锁,只解锁,不加锁,也没有实际的意义。
PV操作与互斥模型
互斥信号量S的初始值为1
- P(s)=P(1)
- S=S=1=0
- 0<0?,满足可以继续执行V操作
- 这个时候第二个进程也来执行P操作,则
- P(s)=P(0)
- S=S=1=-1
- -1<0?,不能继续执行了,进程2会阻塞,需要等待资源释放,-1表示当前有一个进程在等待资源
- 当第一个执行V(S)操作
- V(S)=-1
- S=S+1=0
- S<=0,满足,可以唤醒阻塞队列中的一个进程,使其进入就绪状态,等待当前进程执行完成后被调用
信号量的初值=资源数量
信号量最小值(也就是排队的进程数量)=信号量的初值-进程数=资源数量-进程数
如5个资源,8个进程访问
则信号量初始值P(S)=5,最小值=5-8=-3,则信号量取值范围【-3,5】。
PV操作与同步模型
与互斥模型相比,同步模型要复杂很多,会涉及到多个不同进程之间的协作关系,比较典型的有生产者消费者问题。