进程同步的概念
进程之间相互制约关系
在多道程序环境下,系统中各进程以不可预测的速度向前推进,进程的异步性会造成了结果的不可再现性。为防止这种现象,异步的进程间推进受到二种限制:
-
资源共享关系
多进程共享资源,例如各进程争用一台打印机,这时各进程使用这台打印机时有一定的限制。每次只允许一个进程使用一段时间打印机,等该进程使用完毕后再将打印机分配给其它进程。这种使用原则称为互斥使用。进程之间竞争资源面临三个控制问题:互斥、死锁、饥饿
-
相互合作关系
在某些进程之间还存在合作关系,例如一个程序的输入、计算、打印三个程序段作为三个进程并发执行,由于这三个进程间存在着相互合作的关系,即先输入再计算、最后再打印的关系,所以这三个进程在并发执行时推进序列受到限制,要保证其合作关系正确,进程间这种关系称为同步关系。
临界资源和临界区
- 临界资源
像打印机这类资源一次只允许一个进程使用的资源称为临界资源。属于临界资源有硬件打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。当然还有一类像磁盘等资源,它允许进程间共享,即可交替使用,所以它称为共享资源,而临界资源又称独享资源。 - 临界区
多个进程共享临界资源时必须互斥使用,例如A和B两个进程 都需要使用打印机,它们必须互斥使用。如果为了保证结果的正确性限制A、B二进程推进序列,规定进程A执行好再执行进程B,这样的限制就显得过死,因为它已不能保证进程A、B能并发执行,所以必须把限制减少到最少,以尽可能支持并发执行。为此把各进程分解,把访问临界资源的那段代码(称为临界区)与其它段代码分割开来,只对各种进程进入自己的临界区加以限制,即各进程互斥地进入自己的临界区。
进程同步机制
进程在并发执行时为了保证结果的可再现性,各进程执行序列必须加以限制以保证互斥地使用临界资源,相互合作完成任务。多个相关进程在执行次序上的协调称为进程同步。用于保证多个进程在执行次序上的协调关系的相应机制称为进程同步机制。
所有的进程同步机制应遵循下述四条准则:
- 空闲让进
当无进程进入临界区时,相应的临界资源处于空闲状态,因而允许一个请求进入临界区的进程立即进入自己的临界区 - 忙则等待
当已有进程进入自己的临界区时,即相应的临界资源正被访问,因而其它试图进入临界区的进程必须等待,以保证进程互斥地访问临界资源。 - 有限等待
对要求访问临界资源的进程,应保证进程能在有限时间进入临界区,以免陷入“饥饿”状态。 - 让权等待
当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等。
一个由临界区和剩余区1和剩余区2程序段组成的进程采用进程同步机制后的描述如下:
进程同步机制在临界区前加上进入区,它负责对欲访问的临界资源状态进行检查,以决定是允许该进程进入临界区还是等待。同时在临界区后加上退出区,它负责释放临界资源以便其它等待该临界资源的进程使用.
实现进程互斥和同步的信号量机制方法:软件方法、硬件方法、信号量机制和管程等。
具体内容可以参考我的另一篇博文:实现进程互斥和同步的信号量机制