什么是进程互斥?
所谓进程互斥,就是对于系统的某种资源,若一个进程正在访问它,其他进程必须等待,不能同时使用。这是一种源于资源共享的制约关系,也称为间接制约关系。
接下来,我们来简要的了解一下几个概念:
-
这种限定资源只能排他性的访问的资源叫做临界资源。
-
程序中访问临界资源的那段代码称为临界区或临界段。
如何实现进程互斥?
为实现对临界资源的互斥访问,应保证诸进程互斥的进入各自的临界区。在操作系统中,最早采用软件的方法,后来常采用硬件指令或者在系统中设置专门的同步机构方法。这些方法共同形成临界区的使用原则:
(1)当临界区空闲时,必须让一个要求进入临界区的进程立即进入,以有效的利用资源;
(2)当临界区已经有进程进入时,其他试图进入临界区的资源必须等待,以保证互斥地进入临界区;
(3)对于要求进入临界区的进程应在有限的时间内使之进入,以免陷入“死等”;
(4)等待进入临界区的进程必须立即释放CPU,以免“忙等”。
上锁与开锁是一种最简单的进程互斥方法。它使用一个变量“W”来表示某种临界资源的状态。若W=1,表示资源已经被使用,若W=0,表示资源可用。一般将上锁与开锁原语设置在临界区相应的程序段前后。
举个栗子:
甲进程:
其他代码:
LOCK(W);
甲进程的临界区;
UNLOCK(W);
其他代码;
进程进入临界区之前应该测试W的值,若W=1,资源被占用,则应返回测试;若W=0,即资源可用,则在进入临界区前为防止其他进程进入二给资源上锁,将W置为1。用完资源退出前,给资源解锁,使W=0。
但是有没有想过,如此简单的条件测试有可能会导致CPU“忙等”?于是就有了信号量机制的产生。