【操作系统】进程同步与互斥及其实现方式

1. 什么是进程同步

进程具有异步性的特征, 各个并发执行的进程以独立的不可预知的速度推进

进程同步机制是为了解决进程异步的问题, 也被称为直接制约关系

2. 什么是进程互斥

OS中的某些资源虽然可以提供给多个进程使用,但一个时间段内只允许有一个进程访问该资源(这种资源被称为临界资源)

do{
	 进入区 // 检查是否可进入临界区, 若可进入则**对资源上锁**
	 临界区 // 访问临界资源的代码, 也叫临界段
	 退出区 // **对资源解锁**
	 剩余区 // 做其它处理
}
临界资源的互斥访问原则
  1. 空闲让进 : 在临界区空闲时允许请求访问临界区的进程进入
  2. 忙则等待 : 当已有进程进入临界区时 , 其它线程等待
  3. 有限等待 : 保证请求访问的进程在有限时间内进入临界区
  4. 让权等待 : 当进程进不了临界区时, 立即释放处理机

3. 进程互斥的软件实现方法

(1) 单标志法 : 进程在访问完临界区后会把临界区权限转交给另一个进程 , 每个进程进入临界区的权限是由另一个进程赋予的;
使用一个 int turn; 的公共变量表示允许进入临界区的进程号, turn变量的初始值为1;
在这里插入图片描述

缺点 : 当临界区空闲的时候未必能有线程能进入临界区;

(2) 双标志先检查法 : 设置一个bool数组, 数组元素表示各个进程想进入临界区的意愿
在这里插入图片描述

缺点: 可能会出现两个进程同时访问临界区的问题 , 违背忙则等待原则

(3) 双标志后检查法 :
在这里插入图片描述

缺点: 可能会造成进程饥饿现象

(4) Peterson算法 : 两个进程都试图进入临界区时, 可以让进程主动让对方先使用临界区
在这里插入图片描述

4. 进程互斥的硬件实现方法

(1)中断屏蔽方法 : 利用开关中断指令实现

关中断;
临界区;
开中断;

缺点 : 不适用于多处理机系统; 只适用于操作系统内核进程

(2) TestAndSet指令 : 简称TS指令, 也有地方称为TSL指令; 由硬件实现 , 适合多处理机的环境
C语言描述硬件逻辑 :

在这里插入图片描述

检查和上锁的操作是一步完成的

(3) Swap指令 : 功能是交换两个变量的值 ; 适合多处理机的环境;
在逻辑上和TSL指令无太大的区别
在这里插入图片描述

5. 信号量机制

信号量其实就是一个变量, 可以用一个信号量来表示系统中某种资源的数量
用户可以通过使用OS提供的一对原语(wait(S) & signal(S)原语) , 来对信号量进行操作, 以实现进程的互斥和同步;

其中, wait可用P表示 , signal可用V表示

(1) 整型信号量

用于表示系统中某种资源的数量, 当系统资源暂时不足时, 进程进不了临界区将会一直占用处理机

(2) 记录型信号量

在这里插入图片描述

当系统资源暂时不足时会将请求的线程加入到等待队列中去, 遵循让权等待原则

(3) 信号量机制实现进程互斥
  1. 分析并发进程的关键活动, 划定临界区
  2. 设置互斥信号量mutex, 初值设为1
  3. 在临界区之前执行P(mutex)
  4. 在临界区之后执行V(mutex)
(4) 信号量机制实现进程同步
  1. 分析什么地方需要实现同步关系, 即必须保证"一前一后"执行两个操作
  2. 设置同步信号量S, 初始化为0
  3. 在"前操作"之后执行V(S)
  4. 在"后操作"之前执行P(S)

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值