操作系统复习
第三章 进程管理
3.4 进程同步与进程通信
一、进程间同步与互斥
- 进程间制约关系
- 直接制约关系:同步
- 间接制约关系:互斥
- 临界资源与临界区
- 临界资源:一次仅允许一个进程访问的资源
- 临界区:访问临界资源的程序段
- 进入区
- 临界区
- 退出区
- 临界区的原则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
二、硬件方法解决互斥/硬件同步机制:硬件层面
1.关中断
2.专用机器指令:
- Test-and-Set加锁:lock
- swap指令实现互斥
三、信号量和PV原语:操作系统层面
大题:用信号量机制写PV操作代码实现互斥/同步
- 信号量的物理意义:
- S>0,表示有S个资源可用
- S=0,表示无资源可用
- S<0,则|S|表示S等待队列中的进程个数
- 进程等待队列s.queue是阻塞在该信号量的各个进程
- 对信号量的操作:初始化和两个标准原语
- 初始化:资源数目
- 若初始化为1,则用于进程互斥
- P(s)操作:申请一个资源
- s–
- If s < 0, 则阻塞进程
- V(s)操作:释放一个资源
- s++
- if s <= 0, 则唤醒一个等待的进程
- 初始化:资源数目
- 利用信号量实现互斥
- 借书系统
- 利用信号量实现同步
- 进程执行顺序问题
- 司机-售票员问题
- 生产者-消费者问题
- 读者-写者问题
- 读者优先
- 写者优先
- 哲学家进餐问题
四、管程机制:语言层面
- 思想:把信号量及其操作原语封装在一个对象内部
- 管程是编译语言的组成部分,互斥由编译器负责
- 条件变量
- 一个数据结构,指向等待队列,每个队列等待原因不同
五、进程通讯
1.进程通讯
- 低级通讯:简单的信号交换,如PV操作
- 高级通讯:高效、大量的数据传递
2.进程通讯类型
- 共享存储器系统:共享数据、数据区
- 消息传递系统
- 直接通讯方式:消息缓冲
- 采用进程的消息缓冲队列
- 消息发送者将消息直接放在接收者的消息缓冲队列
- 接收者从消息缓冲队列中读取数据
- 间接通讯方式:邮箱通讯
- 利用中间者——信箱、邮局来传递信件。
- 发送进程将消息发送到信箱中,接收进程从信箱中取出消息
- 直接通讯方式:消息缓冲
- 管道通讯:共享文件