操作系统--进程同步

进程同步概念

在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。
举个例子:例如让系统计算1+2*3,假设系统产生2个进程,1个是加法进程,1个是乘法进程。要让计算结果正确,必须先是计算乘法后计算加法,如果不加以制约那么加法的进程可能在乘法之前,那么结果就会出错。因此引入了同步机制。

同步概念

  • 同步也叫制约关系,同步是指为了完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待,传递信息所产生了制约关系。

临界资源概念

  • 一个时间段内只允许一个进程使用的资源称为临界资源

例:物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。

互斥概念

  • 互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
  • 所以对临界资源的访问,必须互斥地进行。

系统中的2中资源共享方式

  1. 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
  2. 同步共享方式:系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问

对临界资源的互斥访问

在逻辑上分为如下四个部分:

do
{
   
  entry section;   //进入区
  critical section; //临界区
  exit section;    //退出区
  remainder section; //剩余区
}while(true)

如下图:
在这里插入图片描述

为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:

1.空闲让进: 临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
2. 忙则等待: 当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
3. 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
4. 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

进程互斥的软件实现方法

如果没有进程互斥会发生什么呢?
在这里插入图片描述
那如何实现互斥呢?

单标志法

算法思想

  • 两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予

在这里插入图片描述
举个例子:
在这里插入图片描述
只能按 P0 -> P1 -> P0 -> P1 ->……这样轮流访问。这种必须“轮流访问”带来的问题是,如果此时允许进入临界区的进程是 P0,而 P0 一直不访问临界区,那么虽然此时临界区空闲,但是并不允许 P1 访问.

单标志法存在的主要问题是:违背“空闲让进”原则

双标志先检查

算法思想

  • 设置一个布尔型数组 flag[],数组中各个元素用来标记各进程想进入临界区的意愿,比如 “flag[0] = ture”意味着 0 号进程 P0 现在想要进入临界区。每个进程在进入临界区之前先检查当前有 没有别的进程想进入临界区,如果没有,则把自身对应的标志 flag[i] 设为 true,之后开始访问临界区。

在这里插入图片描述

因为进入临界区的’‘检查’'和"上锁"不是原子操作,可能在上锁前发生进程切换。

  • 双标志先检查的问题是:违反了 "忙则等待"原则。

双标志后检查

后检查法是对先检查法的改进,先上锁,再检查

在这里插入图片描述

Peterson 算法

  • 63
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 39
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_End丶断弦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值