OS学习笔记四:同步机制
Posted jiankunking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OS学习笔记四:同步机制相关的知识,希望对你有一定的参考价值。
一、 进程互斥
1、进程互斥
- 由于各 进程 要求使用共享资源( 变量 、文件等),而 这些 资源需要排他性使用各进程之间 竞争使用这些 资源—— 这一关系称为 进程互斥
- 临界资源:critical resource
系统中某些资源一次只允许一个进程使用,称这样的资源为 临界资源 或 互斥资源 或 共享变量 - 临界区( ( 互斥区) ) :critical section(region)
各个进程中对某个临界资源(共享变量)实施操作 的程序 片段
2、临界区(互斥区)使用原则
- 没有进程在临界区时,想进入临界区的进程可进入
- 不允许两个进程同时处于其临界区 中
- 临界区外运行的进程不得阻塞其他进程进入临界区
- 不得使进程无限期等待进入临界区
3、实现互斥的解决方法
- 软件方案
- Dekker 解法、Peterson 解法
- 硬件 方案
- 屏蔽中断、TSL(XCHG) 指令
二、进程同步
1、进程同步
进程同步:synchronization 指系统中多个进程中发生的事件存在某种时序关系 ,需要相互合作,共同完成一项任务
具体地说,一个进程运行到某一点时,要求另一伙伴进程为它提供消息,在未获得消息之前,该进程进入阻塞态,获得消息后被唤醒进入就绪态
三、信号量及PV操作
1、信号量及PV操作
- 一个特殊变量
- 用于进程间传递 信 息 的 一个整数值
- 定义如下:
struc semaphore
int count;
queueType queue;
- 对信号量可以实施的操作:初始化、P 和V (P 、V 分别是荷兰语的test(proberen) 和increment(verhogen) )
2、p、v操作定义
P( s )
s.count--;
if ( s.count < 0
P( s )
s.count--;
if ( s.count < 0
3、有关说明
- P 、V 操作为原语 操作(primitive or atomic action)
- 在 信号量上定义了三个操作:初始化( 非负数) 、P 操作、V 操作
- 最初提出的是二元信号量 (解决互斥 )之后, 推广 到一般信号量(多值)或计数信号量(解决同步)
四、管程的基本概念
1、管程的定义
- 是一个特殊的模块
- 有一个名字
- 由关于共享资源的数据结构及在其上操作的一组过程组成
2、进程与管程
进程 只能通过调用 管程中的过程 来间接地访问管程中的数据结构
3、管程需要保证什么?
- 作为一种同步机制,管程要解决两个问题
- 互斥
- 管程是 互斥 进入 的(为了保证管程中数据结构的数据完整性)
- 管程的互斥性是由编译器负责保证的
- 同步
- 管程中设置 条件 变量及等待/ 唤醒操作 以 解决同步问题
- 可以让一个进程或 线程在 条件变量上等待(此时,应先释放管程的使用权),也可以通过发送信号将等待在条件变量上的进程或线程唤醒
五、管程小结
- 管程 : 抽象数据类型
- 有一个明确定义的操作集合,通过它且只有通过它才能操纵该数据类型的实例
- 实现管程结构必须保证下面几点:
- (1)只能通过管程的某个过程才能访问资源;
- (2) 管 程是互斥的 , 某个时刻只能有一个进程或线程调用 管程中 的过程
- 条件变量:为 提供进程与其他进程通信或同步 而引入
- wait/signal 或 wait/notify 或 wait/broadcast
六、进程间通信
1、基本通信方式
- 消息传递
- 共享 内存
- 管道
- 套接 字
- 远程过程调用
2、原子操作
- 不可分割,在执行完之前不会被其他任务或事件中断
- 常用于实现资源的引用计数
3、屏障(BARRIER)
- 一种同步机制( ( 又称栅栏、关卡) )
- 用于对一组线程进行协调
- 应用场景
- 一组线程协同完成一项任务,需要所有线程都到达一个汇合点后再一起向前推进
个人微信公众号:
作者:jiankunking
以上是关于OS学习笔记四:同步机制的主要内容,如果未能解决你的问题,请参考以下文章