互斥执行原则、解决互斥问题的方法及其缺陷

本文介绍了操作系统中进程互斥执行的基本原则,如空闲让进、忙则等待、让权等待和有限等待,探讨了软件实现临界资源访问的各种方法,如单标志法、双标志法、皮特森算法,以及信号量机制(包括整型和记录型)在避免忙等和死锁中的应用。
摘要由CSDN通过智能技术生成

前言

引用博客:操作系统 进程同步-CSDN博客

互斥执行原则

一组并发进程互斥执行时必须满足如下准则:

(1) 空闲让进 

当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以便有效地利用临界资源。

(2) 忙则等待

当一个进程正处在某临界区内,为了保证对临界资源的互斥访问,任何试图进入其临界区的进程都必须进入代码连续测试循环,陷入忙等状态连续测试一个变量直到某个值出现为止,称为忙等。
 

(3)让权等待

当进程不能进入自己的临界区时,应立即释放处理机(利他),以免进程陷入“忙等”。——不忙碌等待。

(4)有限等待

要求访问临界资源的进程,应保证在有限的时间内能进入自己的临界区,以免陷入“死锁”状态(利己)——不死等。不互相阻塞。即程序总有机会往下执行,不会一直空转。

解决互斥问题的方法及缺陷

软件实现临界资源访问方法

1.单标志法:

标志依赖对方,然后有一方完成后不需要继续了,另一方就因为标志未修改不能进临界区了违背,“空闲让进”;一直停留在while语句处,违背“让权等待”。

2.双标志法先检查

双方代码同时发现资源空闲,同时进入进程,没有保证对临界资源的互斥访问,违背了“忙则等待”。一直停留在while语句处,违背“让权等待”。


 

3.双标志法后检查

解决了“忙则等待”;双方代码同时发现资源空闲,同时都想进入临界区,但因为先标记了,所以导致卡外面一直进不去,违背了“空闲让进,有限等待”原则,导致“饥饿”。一直停留在while语句处,违背“让权等待”


4.皮特森算法

违背“让权等待”,因为while始终占用CPU(处理器)执行权,一直执行代码(“忙等”状态),没有进入阻塞状态(注:有时候“忙等”状态比阻塞状态好,因为阻塞状态要保存现场以及后续转换成本高

critical section  代表是需要互斥进入的一个区间,比如需要修改一些关键的共享数据,这个时候不能让两个进程同时修改,否则就会出现不可预知的结果了

remainder section  并非关键区域,所做的操作是可以并行操作的,结果互不影响

信号量机制

整型信号量机制

while(S<=0);——如果资源数不够,就一直循环等待,即违背“让权等待”原则,会发生“忙等”。

记录型信号量

为了克服整型信号量机制存在的“忙等” (Busy waiting)现象,调用block原语,进行自我阻塞有效地提高资源的利用率。

利用信号量实现进程互斥

Var mutex:semaphore:=1;
begin
   parbegin
       P1: repeat                        P2: repeat
                wait(mutex);                    wait(mutex);
                  critical section;               critical section;
                signal(mutex);                 signal(mutex);
               remainder section;           remainder section;
              until false;                       until false;
    parend
end

信号量集机制

1.AND型信号量集机制

称为同时wait操作,即swait(simultaneous wait)。目的:避免死锁。定义如下:

2.一般信号量机制

一次可给进程分配多种临界资源,且同类临界资源一次可分配多个

一般信号量集的几种特殊情况

(1) swait(s,d,d): 不设下限;

(2) swait(s,1,1): 蜕化为wait(s);

(3) swait(s,1,0): 成为可控开关: s>=1时,所有进程都可进入;s=0时,阻止所有进程进入。

  • 52
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值