- 进程通信
- 进程同步
进程通信
进程通信即进程间的信息交换
进程是资源分配的基本单位,各个进程之间内存空间独立,一个进程不能随意访问其他进程的地址空间
进程通信的方式
共享存储(Shared-Memory)
基于共享数据结构的通信方式
- 多个进程共用某个数据结构(OS提供并控制)
- 由用户(程序员)负责同步处理
- 低级通信:可以传递少量数据,效率低
基于共享存储区的通信方式
- 多个进程共用内存中的一块存储区域
- 由进程控制数据的形式和方式
- 高级通信:可以传递大量数据,效率高
消息传递(Message-Passing)
直接通信:点到点发送
- 发送和接收时指明双方进程的ID
- 每个进程维护一个消息缓冲队列
间接通信:广播
- 以信箱为媒介,作为中间实体
- 发进程将消息发送到信箱,收进程从信箱读取
- 可以广播,容易建立双向通信链
管道通信(Pipe)
管道
- 用于连接读/写进程的共享文件,pipe文件
- 本质是内存中固定大小的缓冲区
半双工通信
- 同一时段只能单向通信,双工通信需要两个管道
- 以先进先出(FIFO)方式组织数据传输
- 通过系统调用read()/write()函数进行读写操作
进程同步
协调进程间的相互制约关系,使他们按预期的方式执行
进程同步的前提:
- 进程是并发执行的,进程间存在着相互制约关系
- 并发的进程对系统共享资源进行竞争
- 进程通信,过程中相互发送的信号称为消息或事件
两种相互制约的方式
- 间接相互制约关系(互斥):进程排他性地访问共享资源
- 直接相互制约关系(同步):进程间的合作,比如管道通信
互斥访问临界资源
访问过程
- 进入区:尝试进入临界区,成功则加锁(lock)
- 临界区:访问共享资源
- 退出区:解锁(unlock),唤醒其它阻塞进程
- 剩余区:其它代码
访问原则
- 空闲让进:临界区空闲,允许一个进程进入
- 忙则等待:临界区已有进程,其它进程等待(阻塞状态)
- 有限等待:处于等待的进程,等待时间有限
- 让权等待:等待时应让出CPU执行权,防止“忙等待”
repeat
entry section; // 进入区
critical section; // 临界区
exit section; // 退出区
remainder section; // 剩余区
until false;
软件实现
- 单标志法
- 双标志法
- 皮特森算法
硬件实现
- 中断屏蔽方法
- TS、TSL操作
- Swap操作
信号量
管程(Moniyor ,监视器)
死锁
死锁产生的条件
- 互斥条件:共享资源的排他性访问
- 不剥夺条件:访问时该共享资源不会被剥夺请求并
- 保持条件:保持当前资源时请求另一个资源循环
- 等待条件:存在共享资源的循环等待链