进程同步问题相关基础知识

提示:如果已经掌握了基础知识可以看我的 经典的进程同步问题 做题练习。
内容主要来源:汤小丹_计算机操作系统_教材
教材内容十分的详细,大家可以直接看教材哦,这个主要是个人笔记


一、进程同步的基本概念

1.进程同步概念的引入

  • 我们把异步环境下的一组并发进程因直接制约而互相发送消息、互相合作、互相等待,使得各进程按一定的速度执行的过程,称为进程同步
  • 进程同步机制的主要任务:在执行次序上对多个协作进程进行协调,使并发执行的诸多协作进程之间能够按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使得程序的执行具有可再现性

(1)两种形式的制约关系

  • 在多道程序环境下,对于同处于一个系统中的多个进程,由于它们共享系统资源,或为完成某一任务而相互合作,它们之间可能存在以下两种形式的制约关系。
  • 同步强调的是保证进程之间操作的先后次序的约束,而互斥强调的是对共享资源的互斥访问。
间接相互制约关系(互斥关系)
  • 多个进程对某些系统资源只能进行互斥访问,由此在这些进程间,形成了源于对该类资源共享的所谓间接相互制约关系,也可称为互斥关系。
  • 为了保证这些进程能有序地运行,对于系统中的这类资源,必须由系统实施统一分配,即用户在要使用这类资源之前应先提出申请,而不能直接使用。
直接相互制约关系(同步关系)
  • 某些应用程序为了完成某项任务,会建立两个或多个进程。这些进程会为了完成某一任务而相互合作。进程间的直接制约关系就是源于它们之间的相互合作。

(2)临界资源

  • 进程在使用资源时需要采用互斥访问方式的,这样的资源被称为临界资源(critical resource)。
  • 临界资源可以是硬件资源,也可以是软件资源。
    在这里插入图片描述
    在这里插入图片描述

2.临界区问题

  • 人们把每个进程中访问临界资源的那段代码称为临界区(critical section)。
while(ture) {
	进入区   //检查与访问的临界区是否正在被访问,如果未访问这修改访问标志为正被访问,并且进入临界区。
	临界区   
	退出区  //用于将临界区正被访问的标志恢复为未被访问的标志。
	剩余区  //其他部分的代码
}
  • 解决临界区问题的同步机制都应遵循下述4条准则:
    • (1)空闲让进。 当无进程处于临界区时,表明临界资源处于空闲状态,应允许1个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界区资源。
    • (2)忙则等待。 当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
    • (3)有限等待。 对于要求访问临界资源的进程,应保证其在有限时间内能进入自己的临界区,以免陷入“死等”状态。
    • (4)让权等待。(原则上应遵顼,但非必须)。当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

二、软件同步机制

  • 一个经典的基于软件的临界区问题的解决方案是 Peterson 解决方案。
  • Peterson 解决方案适用于两个进程交替执行临界区的情况。
  • 软件同步机制不满足让权等待原则
    在这里插入图片描述
    在这里插入图片描述

三、硬件同步机制

  • 实际上,在对临界区进行管理时,可以将标志看作一个锁,“锁开”进入,“锁关”等待,初始时锁是打开的。每个要进入临界区的进程,必须先对所进行测试,当锁未打开时,则必须等待,直到锁打开。当锁打开时,则应立即把其锁上,以阻止其他进程进入临界区。
  • 测试和关锁操作必须时连续的,不允许分开进行。
  • 硬件同步机制不满足让权等待原则

1.关中断

在这里插入图片描述

2.利用 Test-and-Set 指令实现互斥

在这里插入图片描述

3.利用 swap 指令实现进程互斥

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


三、信号量机制

  • OS 中的信号量机制类似于信号灯,起着规范进程允许的作用。

1.信号量机制简介

(1)整型信号量

  • 该方式未满足让权等待原则。
  • 整型信号量定义为一个用于表示资源数目的整型量S,它与一般整型量不同,除初始化外,仅能用过两个标准的原子操作(Atomic operation)来访问,即 wait(S) 和 single(S)操作。这两个操作一直被称为 P 操作和 V 操作。
    在这里插入图片描述

(2)记录型信号量

  • **该方式满足让权等待原则。 **
  • 在信号量机制中,除了需要一个用于代表资源数目的整型变量 value 以外,还应增加一个进程链表指针 list,用于链接所有等待进程。
typedef struct{
	int value;
	struct process_control_block *list;
} semaphore;

在这里插入图片描述

(3)AND 型信号量

  • 基本思想:将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其他所有可能为之分配的资源,也不分配给它。
    在这里插入图片描述

(4)信号量集

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

2.信号量的应用

(1)利用信号量实现进程互斥

  • 为使多个进程能互斥地访问某临界资源,只须为该资源设置一个互斥型信号量 mutex,并设其初始值为1,然后将各进程访问该资源的临界区置于wait(mutex) 和 single(mutex) 操作之间即可。
    在这里插入图片描述

(2)利用信号量实现进程同步

  • 同步型信号量的使用通常比互斥型信号量的使用要复杂。一般情况下,同步型信号量的 wait(S) 和 single(S) 操作位于两个不同的进程中。
  • 另外还有一种比较复杂的同步,如 C1 和 C2 没有一种固定的执行次序,在某种条件下,C1 要先于 C2 执行;而在另一种条件下,C2 要先于 C1 执行。
    在这里插入图片描述

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小宝945

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

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

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

打赏作者

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

抵扣说明:

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

余额充值