进程同步的原因
在OS中引入进程后,虽然提高了资源的利用率和系统吞吐量,但是由于进程的异步性将会给系统造成混乱,尤其是他们在争抢临界资源时。当多个进程去争用共享变量、表格、链表时,可能导致数据处理出错。进程同步的任务就是对多个相关进程在执行次序上进行协调,使得并发执行的进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
有关进程同步的一些概念
1. 两种形式的制约关系
在多道程序环境下,当程序并发执行时,由于资源共享和进程合作,使得同一个系统的多个进程之间可能存在两种形式的制约关系:
(1) 间接相互制约关系
同处于一个系统中的进程,通常都共享着某种系统资源,如共享CPU、I/O设备等。间接相互制约源于这种资源共享。如打印机资源,一个进程占用时,另一个进程只能阻塞等待。
(2) 直接相互制约关系
这种制约关系主要源于进程间的合作。比如进程B处理数据,进程A通过单缓冲向进程B提供数据。当缓冲空或者已满时,就会分别对进程B和进程A造成影响。
2. 临界资源
比如许多硬件资源,如打印机等都属于临界资源。进程间应该采取互斥方式实现对这种资源的共享。如生产者—消费者问题中两者之间设置的缓冲池就应该使用互斥方式实现共享。
3. 临界区
无论是硬件临界资源还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区。临界区前有一段检查是否能够进入临界区的代码,成为进入区,相应地,在临界区后面也要加一个退出区。除了临界区、进入区和退出区之外的其他代码相应地被成为剩余区。
可以把一个访问临界资源的循环这样描述:
repeat
entry section;
critical section;
exit section;
remainder section;
until false;
4. 同步机制应该遵循的原则
(1) 空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态。这用情况下,应该允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临街资源。
(2) 忙则等待。当已有进程进入临界区时,表明临界资源正在被访问。此时其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
(3) 有限等待。要求访问临界资源的进程应该保证在有限时间内能进入自己的临界区,以免进入“死等”状态。
(4) 让权等待。当进程不能进入自己的临界区时,应该立即释放处理机,以免陷入“忙等”状态。