由于间接制约关系是由共享互斥资源引起的,所以进程对互斥资源的访问必须以互斥方式进行。而相互合作进程之间的直接制约关系,决定了必须采用进程同步的方法来对合作进程的执行顺序进行协调,顺利完成各自的任务。
进程同步与进程互斥的相关概念如下。
(1)进程同步。进程间的同步是指某些进程之间在逻辑上的相互制约关系。也就是说,若干进程为完成一个共同的任务而相互合作,由于合作的每个进程都是以各自独立的、不可预知的速度向前推进,这就需要相互合作的进程在某些协调点处来协调它们的工作。当一个合作进程到达此协调点后,在未得到其他合作进程发来的消息之前则阻塞自己,直到其他合作进程给出协调信号后,才被唤醒再继续执行。进程之间这种相互合作等待对方消息的协调关系就称为进程同步。
(2)进程互斥。进程互斥是指某一资源同一时间只允许一个进程对其进行访问,这种访问具有唯一性和排他性。进程互斥通常是进程之间争夺互斥资源而引起的,在这种情况下,任何时刻都不允许两个及两个以上的并发进程同时执行那段访问该互斥资源的程序代码。
互斥的实现还会产生两个额外的控制问题:饥饿(Starvation)和死锁(Deadlock)。(https://www.xing528.com)
(1)饥饿。一个进程所申请的资源总是被优先于自己的其他进程所占有,而长时间处于不能被调度执行的状态(长时间处于就绪或阻塞状态),将这种现象称为“饥饿”。例如,系统中有三个周期性执行的进程:P1、P2和P3,其中P1正在占用CPU执行,而P2和P3处于就绪状态。如果三个进程对CPU竞争的结果是P1释放CPU后,将其分配给P2运行,而P2释放CPU后又将其分配给P1再次运行,如此循环往复,这就使得处于就绪状态的进程P3长时间不能被调度执行,这就是饥饿状态。
(2)死锁。一个进程集合中已经占有部分资源的两个或两个以上进程,还需要获得已被其他进程占有的资源才能够继续执行,有可能出现某些进程相互之间都在等待对方占有的资源而无法运行的局面,即在进程集合中的这些进程处于永远的阻塞状态,这就是“死锁”。例如,有两个进程P1和P2在执行过程中都需要使用互斥资源R1和R2,且资源R1和R2均只有一个。假设在某时刻P1占用了R1又要申请使用R2,而P2占用了R2又要申请使用R1,这时P1因申请已被P2占用的R2而阻塞,P2则因为申请已被P1占用的R1而阻塞,从而出现P1和P2因相互等待对方资源而始终无法运行的死锁状态。
进程同步与进程互斥的相似之处是进程互斥实际上是进程同步的一种特殊情况,即逐次使用互斥资源,这也是对进程使用资源次序的一种协调(同步)。因此,可以将进程互斥和进程同步统称为进程同步。
进程同步与进程互斥的区别是进程互斥是由互斥资源引起的,即各进程之间共享互斥资源的使用权。这种竞争没有确定的必然联系,哪个进程竞争到互斥资源的使用权,则该资源就归哪个进程使用,而获得所需资源的进程就可以获得CPU继续执行,直到它不再需要该资源时才放弃该资源的使用权,而那些未申请到互斥资源的进程则不能执行,直到得到所申请的互斥资源。也即,进程互斥是通过互斥资源来制约各进程执行的,这种互斥无法事先指定进程对资源的访问顺序,即访问是无序的。进程同步则是指相互协作的并发进程之间存在着必然的联系,若当前运行进程执行过程中需要进行同步时,在没有得到协同工作的其他合作进程发来的同步消息之前,当前运行进程则不能继续向前推进(运行)。在进程同步中,虽然互斥资源仍然制约着进程的执行,但协调各进程向前推进的只能是进程同步,即通过进程同步来协调和制约各合作进程的执行,即进程同步是在互斥的基础上(大多数情况),通过对资源的有序访问去完成一个共同的任务。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
