操作系统 -- 进程互斥与同步

进程同步

同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生制约关系。进程间的直接制约关系就是源于他们之间的相互合作。说白了,进程同步就是为了解决进程异步的问题。

进程互斥

我们把一个时间段内只允许一个进程使用的的资源称为临界资源。
对临界资源的访问只能互斥的进行。互斥亦称间接制约关系。进程互斥指当一个进程访问临界资源时,另一个想要访问该临界资源的进程必须等待当前访问临界资源的进程访问结束,释放该资源后,另外一个进程才能去访问临界资源。
对临界资源的互斥访问,可以在逻辑上分为如下四个部分
在这里插入图片描述

对临界资源的互斥访问,同时遵循系统的整体性能,需要遵循一下原则
1:空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
2:忙则等待。当已有进程进入临界区,其他试图进入临界区的进程必须等待;
3:有限等待。对请求访问的进程,应保证能在有限事件内进入临界区;
4:让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙则等待。

进程互斥的软件实现方法

1:单标志法
算法思想:两个进程访问完临界区后会把使用临界区的权限转教给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。

在这里插入图片描述

因此:同一时刻最多只有一个进程在访问临界区。

2:双标志先检查
算法思想:设置一个布尔型数组flag[],数组中各个元素用来标记各进程想要进入临界区的意愿。比如flag[0] = true,意味着0号进程P0想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想要进入临界区,如果没有,则把自身对应的标志flag[i]设为true,之后开始访问临界区。
在这里插入图片描述

因此:双标志先检查法,P0和P1有可能会同时访问临界区。违背忙则等待的原则。原因在于进入区的“检查”和“上锁”两个处理不是一气呵成的。“检查”后,“上锁”前可能发生进程切换。

3:双标志后检查
算法思想:双标志先检查法的改版,因为双标志先检查是先“检查”后“上锁”。但是这两个操作无法一气呵成,因此发哦值两个进程同时进入临界区的问题。于是人们想到了先“上锁”后“检查”的方法来避免上述问题。
在这里插入图片描述

因此:有可能P0和P1都无法进入临界区。双标志法虽然解决了“忙则等待”的问题,但是又违背了“空闲让进”和“有限等待”的原则,会因为进程都长期无法访问临界资源而产生饥饿现象。

4:Prterson算法
算法思想:让进程尝试“孔融让梨”,主动让对方先使用临界区。
在这里插入图片描述

在进入区“主动争取–主动谦让–检查对方是否想尽,己方是否谦让。”
但是不遵循“让权等待”原则,会发生忙等。

进程互斥的硬件实现方法

1:中断屏蔽方法
利用 “开/关中断指令”实现。(与原语实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个进程同时访问临界区的情况)

优点:简单,高效
缺点:不适用于多处理机;只适用于操作系统内核,不适用于用户进程。

2:TestAndSet指令(TS指令)
TS是用硬件实现的,执行过程不允许被中断,只能一气呵成。

3:Swap指令
Swap也是用硬件实现,执行过程不允许被中断,只能一气呵成。
Swap指令的作用是交换两个变量的值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做后端的前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值