目录
- 进程管理(实现临界区互斥的方法)
-
- 一. 访问临界资源
- 二. 实现临界区互斥的方法
-
- 1. 通过软件实现
-
- (1)单标志法
- (2)双标志法先检查
- (3)双标志法后检查
- (4)Peterson’s Algorithm
- 2. 硬件实现方法
-
- (1)中断屏蔽方法
- (2)硬件指令方法
-
- i.TestAndSet指令
- ii.Swap指令
进程管理(实现临界区互斥的方法)
一. 访问临界资源
对临界资源的访问分为四个部分:
- 进入区:检查是否可以进入临界区,若可以则设置正在访问临界区的标志(加锁),以阻止其他进程同时进入临界区
- 临界区:进程中访问临界资源的那段代码
- 退出区:解除正在访问临界资源的标志(解锁)
- 剩余区:处理代码的其余部分
二. 实现临界区互斥的方法
同步机制应当遵循的准则:
- 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区
- 忙则等待:当已经有进程进入临界区时,其他试图进入临界区的进程必须等待
- 有限等待:对请求访问临界区的进程,应保证其在有限的时间内进入临界区
- 让权等待:当进程不能进入临界区时,应立即释放处理机
1. 通过软件实现
软件方法相对复杂且容易出错,因而现在系统较少采用,目前常用的方法是通过硬件方法实现同步互斥操作
(1)单标志法
特征:(设置标志turn)
- 设置turn来标志当前允许运行的进程编
- 每个进程访问完临界区后把临界区的使用权转交给另一个进程
- 若turn的初始值为0,则运行进程始终按照p0->p1->p0->p1->…的顺序进行,如果其中的某个进程不再进入临界区则另一个进程也将无法进入临界区. 违背了”空闲让进”的原则
(2)双标志法先检查
特征:(设置flag[]标志对方和自己)
- 设置标志flag[i]来标志各个进程进入临界区的意愿
- 刚开始时先把flag[i]中各个元素的值设置成false
- 如果flag[i]的值为FALSE则表示pi进程未进入临界区,如果值为TRUE,表示Pi进程进入临界区
- 优点:不用按照一定顺序交替进入临界区,可以连续使用
- 缺点:由于操作系统的并发性,如果pi和pj进程同时进入临界区,则可能按照①②③③的顺序执行,则导致两个进程同时进入了临界区,违背了”忙则等待”的原则
由上可以看出软件方法都会导致进程等待进入临界区时由于空循环造成的浪费处理机时间的现象,违背了“让权等待”
(3)双标志法后检查
特征:
- 设置flag[]来标志各个进程访问临界区的意愿
- 先将自己的flag[]标志设置成TRUE,再检查对方进程的标志,若对方标志为TRUE,则进程等待,否则进入临界区
- 若pi和pj进程几乎同时进入临界区时,由于并发性,可能将自己的flag都设置成TRUE,导致两个进程都只能处于等待状态,从而导致”饥饿”现象,违背了有限等待的原则
(4)Peterson’s Algorithm
特点:(三标志,除了flag[]标志意愿之外还有turn标志)
- 为了防止进程为进入临界区而出现的无限等待的情况,在双标志法后检查的基础上增添了turn标志表示意愿把进入临界区的权限让给另外一个进程
2. 硬件实现方法
也称低级方法或原方法
(1)中断屏蔽方法
- 由于CPU只在发生中断时引起进程切换,因此屏蔽中断可保证当前进程让临界区代码顺利执行完
- 缺点:限制了处理机交替执行程序的能力,因此执行效率会明显降低,同时将关中断的权利交给用户是十分危险的,如果一个进程关中断之后不再打开则会导致系统终止
典型模式:
(2)硬件指令方法
i.TestAndSet指令
- 这是一条原子操作(执行改代码时不允许被中断)
- 读出指定标志之后把该标志设置成真
ii.Swap指令
- Swap指令用于交换两个字节的内容
- 硬件方法的优点:适用于任意数目的进程,不管是单处理机还是多处理机。同时也支持进程中有多个临界区,只要为每个临界区都设置一个boolean变量就行。
- 缺点:进程在等待进入临界区的时候,处理机只能处于一个空循环的状态,这样的状态浪费处理机资源,违背了“让权等待”,从进程中随机选择一个进程进入临界区,有的进程就可能一直都选不上,导致饥饿现象,违背”有限等待“。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!