实现互斥的基本方法
标签: 操作系统
学习人数: 19.5k

1.软件实现方法

设置一个公用整型变量turn,用来表示允许进入临界区的进程标识。若turn为0, 则允许进程P0进入临界区;否则循环检查该变量,直到turn变为本进程标识;在退出区,修改允许进入进程的标识turn为1。进程P1的算法与此类似。

缺点:两个进程必须交替进入临界区,违背空闲让进。

在每个进程访问临界资源之前,先检查临界资源是否被访问,若正在被访问,则进程需要等待,否则进程进入自己的临界区并设置标志。

优点:不用交替进入,可连续使用

缺点:检查对方flag和切换自己的flag有一段时间,可能造成同时进入临界区,违背忙则等待。

先设置自己的标志,再检测对方的标志,若对方的标志为true,则等待对方的进程,否则才进入临界区。

优点:避免同时进入临界区

缺点:如果两个进程同时想进入临界区,都设置了标志,就导致了双方都等待对方,结果谁也进不了临界区,导致了饥饿现象。

为了防止两个进程为进入临界区而无限期等待,每个进程在设置自己的标志后再设置turn标志,然后检测另一个进程的标志和turn标志。这时,再同时检测另一个 进程状态标志和不允许进入标志;以便保证两个进程同时要求进入临界区时,只允许一个进程进入临界区。

 

2.硬件实现方法

关中断是实现互斥的最简单的方法之一。 在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。

关中断的方法存在许多缺点:

①滥用关中断权力可能导致严重后果;

②关中断时间过长,会影响系统效率,限制了处理器交叉执行程序的能力;

③关中断方法也不适用于多 CPU系统,因为在一个处理器上关中断并不能防止进程在其它处理器上执行相同的临界段代码。

这条指令是原子操作,即执行该代码时不允许被中断。其功能是读出指定标志后把该标志设置为真。

这条指令可以看作为一个函数过程,其执行过程是不可分割的,即是一条原语。其中,lock有两种状态:当*lock=FALSE时,表示该资源空闲;当*lock=TRUE时,表示该资源正在被使用。

该指令的功能是交换两个字(字节)的内容。

应为每个临界资源设置一个共享布尔变量lock,初值为false;在每个进程中再设置一个局部布尔变量key,用于与lock交换信息。

 

硬件方法的优点:适用于任意数目的进程,而不管是单处理机还是多处理机;简单、容易验证其正确性。可以支持进程内有多个临界区,只需为每个临界区设立一个布尔变量。

硬件方法的缺点:进程等待进入临界区时要耗费处理机时间,不能实现让权等待。从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,从而导致“饥饿〃现象。

 

登录查看完整内容


课后作业


登录后开始许愿

暂无评论,来抢沙发