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

1. 进程同步

进程具有异步性,也就是说,各个并发执行的进程以各自独立的、不可预知的速度向前推进。

两个或者多个进程需要在某些位置上制约他们的工作次序。

2. 进程互斥

在这里插入图片描述
在这里插入图片描述

  • 进入区:上锁
  • 临界区:真正访问临界资源的代码块
  • 退出区:解锁
  • 剩余区:其他处理代码

为了保证系统整体效率,需要遵循以下原则:

  1. 空闲让进。如果临界区空闲,则可以允许一个有需要的进程立即进入临界区。
  2. 忙则等待。如果当前临界区被占用,那么其他想进入临界区的进程必须等待。
  3. 有限等待。请求进入临界区的进程,有限时间内应该可以进入临界区,避免“死等”。
  4. 让权等待。当进程不能进入临界区时,应立即释放处理机(CPU),避免“忙等”。(权是对CPU的使用权,忙等就是占着CPU去等待)

3. 信号量

!!! 信号量机制是Dijkstra提出来的,卓有成效的实现进程互斥、同步的方法!!!

信号量是一种变量(可以是一个整数,也可以是一种复杂的记录型变量),信号量可以表示某种资源的数量。

信号量使用wait(S)原语和signal(S)原语,S可以理解为一个参数。waitsignal原语常简称为P、V操作(来自荷兰语Proberen和Verhogen)。因此,这两个源于也常常写成P(S)V(S)

整型信号量

这个整数型的变量一旦作为信号量,它的操作就只有三种了:初始化、P操作(wait)、V操作(signal)。
在这里插入图片描述

  • 特点:“检查”和“上锁”一气呵成,避免了并发、异步导致的问题。
  • 问题:不满足让权等待,会发生“忙等”

记录型信号量

简单来说,在整型信号量基础上,加了一个数据结构来记录 等待进入临界区的进程,当wait原语发现没有资源可用时,就让进程自己进入阻塞态,如果signal释放时,发现资源数量<=0(负数的绝对值表示等待进入临界区的进程个数),就用wakeup原语去唤醒等待队列中的一个进程,让该进程从阻塞态转为就绪态。

  • value值,“先用了再说”
    在这里插入图片描述
    在这里插入图片描述
    可见,这种机制遵循了“让权等待”原则,不会出现“忙等”。

小结

在这里插入图片描述

4. 用信号量实现进程互斥

就是正常的上锁和解锁,不同的临界资源需要使用不同的信号量。
在这里插入图片描述

5. 用信号量实现进程同步

在这里插入图片描述
如上图所示的两个进程,目的:代码4必须要等代码1和代码2执行过后才执行。用信号量的一个思路就是加个标志位(信号量),让P2先等着,等着这个临界资源有了,再往下进行。而P1中有一个释放临界资源的动作,就是改变信号量,表明这个资源已经解锁了,其他进程可以访问了。

6. 用信号量实现进程的前驱关系

前驱关系,说白了,就是多个进程同步。
在这里插入图片描述
每一对上下级进程之间,都用一个单独的信号量就可以了,然后就和正常的同步一样进行P操作和V操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值