4.3进程同步与互斥
4.3.1进程间的相互作用
1、分类:
1)相关进程和无关进程(即在逻辑上是否相关)
2)与时间有关的错误
2、进程的同步
进程同步是指进程间一种直接的协同工作关系,是一些进程相互合作,共同完成一项任务。进程间的直接相互作用构成进程的同步。
3、进程的互斥
(1)进程互斥
某些资源一次只能为一个进程服务,因此各进程间互斥使用这些资源,进程间的这种关系是进程的互斥。进程间的间接相互作用构成进程互斥。
(2)临界区
系统中一些资源一次只允许一个进程使用。这类资源称为临界区资源或共享变量。而进程中访问临界资源的那一段程序称为临界区。
临界区使用规则:有空让进、无空等待、多中选一、有限等待、让权等待。
进程互斥的实质是同步,可看作是一种特殊的进程同步。
4、同步机制
进程同步机制应满足的基本要求:1)描述能力足够强 ,即解决各种进程间同步互斥问题 2)容易实现且效率高 3)使用方便
已有的同步机制:硬件同步机制;信号量及P、V操作;管程;条件临界域;路径表达式(用于集中式系统中);远程过程调用(适用于分布式系统中)等。
4.3.3进程同步机制-----信号量和P、V操作
P、V分别是荷兰文“等待”和“发信号”的首字母,P操作和V操作都是同步原语。
每执行一次P操作,意味着分配一个资源,每执行一次V操作意味着释放一个资源。
1)、信号量
信号量是个被保护的量,只有P、V操作和信号量初始化操作才能访问和改变它的值。
2)、P、V操作
定义如下:
P(s):
(1)S := S - 1;
(2)若S<0,该进程的状态设置为等待状态,然后将该进程的PCB插入相应的S信号量等待队列末尾直到有其他进程在S上执行V操作为止。
V(s):
(1) S := S + 1;
(2) 若S<=0,释放S信号量队列中等待的一个进程,改变其状态为就绪态,并将其插入就绪队列;然后使本操作的进程继续执行。
通常信号量的取值可以解释为:S值的大小表示某类资源的数量。当S>0时,表示还有资源可以分配;当S<0时,其绝对值表示S信号量等待队列中进程的数目。
3)、用P、V操作实现进程间的互斥
令S初值为1,进程A、B竞争进入临界区的程序可写成:
进程A 进程B
P(s); P(s);
临界区操作; 临界区操作;
V(s); V(s);
4)、信号量及P、V操作小结
P、V操作的弱点:由于P或V操作每次只做加1或减1运算,即每执行一个一次P操作只能请求分配一个单位的资源每执行一次V操作只释放一个单位的资源,因此如果一个进程需要一次使用多个资源,就需要连续执行多次P操作,释放这些资源时也需要多次执行V操作。这不仅增加了程序复杂性也降低了通信效率,致使进程之间需要等待的时间很长,甚至有可能导致死锁的发生。
P、V操作在使用时必须成对出现,有一个P操作就一定有一个V操作。当为互斥操作时,它们同处于同一进程;当为同步操作时,则不在同一进程出现。
5)、死锁
(1)死锁的概念
死锁是两个或两个以上的进程中的每一个都在等待其中另一个进程释放资源而被封锁,它们都无法向前推进,称这种现象为死锁现象。
产生死锁的原因是共享资源有限,多个进程对共享资源的竞争,而且操作不当。
(2)产生死锁的四个必要条件是资源互斥使用、保持和等待、非剥夺性、循环等待。
(3)解决死锁的方法
一般有死锁的预防,即破坏产生死锁的四个必要条件中的一个或多个,使系统绝不会进入死锁状态;
死锁的避免,即在资源动态分配的过程中使用某种办法防止系统进人死锁状态;和允许系统产生死锁,然后使用检测算法及时地发现并解除它。
安全状态、安全系列、银行家算法等