上交os lec7 进程间通信
7.1进程间通信背景和基础
- 将一个应用实现为一个进程,非常冗余
比如本来,两个进程本来可以共享数据库实现
其次是比较低效,由于本来实现一个邮件应用本来应该只关注邮件任务逻辑,但是将完整的应用设计为一个应用,其数据库也需要自己设计
最后是即使将一个应用设计为一个进程,仍然需要进程间通信,需要进程间共享![]()
- 进程间的协作
但是需要进程间的依赖与互相影响 - 进程间通信
![]()
7.2 共享内存
- 共享内存需要处理好同步
![]()
- 共享内存基本实现
![]()
![]()
![]()
- 共享内存的问题
轮询浪费时间,固定时间检查又时延长
7.3 消息传递
- 消息立马转发
![]()
- 消息传递的两个原语
![]()
- 双向通信
![]()
![]()
- 间接通信
![]()
![]()
- 间接通信到信箱中
![]()
- 信箱共享的挑战
![]()
7.4 消息传递的问题与解决方法
消息传递的阻塞与非阻塞
异步中的超时机制![]()
- 同步通信与超时机制
![]()
- 快递桌充当缓冲的作用
![]()
7.5 Unix管道
- 两个进程之间的一根通信管道
![]()
- 定义管道
![]()
- xv6的管道
![]()
- pipewrite
![]()
- piperead
![]()
- sleep/wakeup通信机制
![]()
- 管道的优缺点
![]()
7.6 Unix消息队列
- 带类型的消息传递
![]()
- 消息队列先进先出,按照类型取值
![]()
- 消息队列可以有多个发送者,接收者
消息队列是FIFO与基于类型查询
7.7 轻量级远程方法调用LRPC
- unix之间的通信机制通常很重
![]()
- 之前的RPC非常复杂
![]()
![]()
![]()
- 数据传输慢?
RPC中可以共享参数栈和寄存器![]()
![]()
![]()
![]()

比如本来,两个进程本来可以共享数据库实现
其次是比较低效,由于本来实现一个邮件应用本来应该只关注邮件任务逻辑,但是将完整的应用设计为一个应用,其数据库也需要自己设计
最后是即使将一个应用设计为一个进程,仍然需要进程间通信,需要进程间共享
但是需要进程间的依赖与互相影响




轮询浪费时间,固定时间检查又时延长







消息传递的阻塞与非阻塞
异步中的超时机制











消息队列是FIFO与基于类型查询



RPC中可以共享参数栈和寄存器



浙公网安备 33010602011771号