当前位置: 首页 > news >正文

【OS笔记10】:进程和线程8-进程通信

文章目录

      • 八、进程通信
        • 1. 进程通信机制
        • 2. 直接通信——消息缓冲通信
          • 2.1. 设计思想
          • 2.2 相关数据结构
          • 2.3 消息发送和接收过程
      • 九、作业与习题
        • 1. 司机与售票员同步问题
          • 问题描述
          • 解题分析
          • 解决方案
        • 2. 多级反馈队列调度问题

八、进程通信

1. 进程通信机制
  • 高级通信机制:通常把进程之间可以进行大量数据交换的通信机制称为高级通信机制。
  • 组成:高级通信机制由操作系统提供的原语和有关数据结构组成。
  • 与P,V操作的区别:P,V操作一般只传送几个字节的信息,用以控制进程的执行速度,不包含任何实际数据。

2. 直接通信——消息缓冲通信
2.1. 设计思想
  1. 由系统管理一组缓冲区,其中每个缓冲区可以存放一个消息(即一组信息)。
  2. 当进程要发送消息时,先向系统申请一缓冲区,然后把消息写进去。
  3. 接着把该缓冲区连到接收进程的消息队列中,并用 V操作 通知接收者。
  4. 接收进程可以在适当时候从消息队列中取出消息,并释放该缓冲区。
2.2 相关数据结构

1) 消息缓冲区结构
一般包含下列几种信息:

  • Name: 发送消息的进程名或标志号。
  • Size: 消息长度。
  • Text: 消息正文。
  • Next: 下个缓冲区的地址。

2) 进程PCB中一般包含有下列项目

  • mutex: 消息队列操作互斥信号量。
  • Sm: 表示接收消息计数和同步的信号量。
  • Pm: 指向该进程的消息队列中第一个缓冲区的指针。

在这里插入图片描述

图片说明:该图展示了PCB中的三个关键部分(两个信号量mutexSm和一个指针Pm),Pm指针指向一个由多个消息缓冲区组成的链表(消息队列)。每个缓冲区都包含name,
size, text, next等字段。

2.3 消息发送和接收过程

在这里插入图片描述

图片说明:该图详细描述了:

  • 发送进程A 在自己的内存空间设置发送区,调用send原语。
  • 操作系统将消息内容复制到一个内核缓冲区中,并将该缓冲区挂载到接收进程B的PCB消息队列的末尾。
  • 接收进程B 调用receive原语,在自己的内存中设置消息接收区。
  • 操作系统从B的消息队列头部取下一个缓冲区,将其内容复制到B的接收区。

九、作业与习题

1. 司机与售票员同步问题
问题描述

设公共汽车上,司机和售票员的活动分别是:

  • 司机的活动:
    1. 启动车辆
    2. 正常行车
    3. 到站停车
  • 售票员的活动:
    1. 关车门
    2. 售票
    3. 开车门

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P、V操作实现它们的同步。

解题分析

同步关系

  • A. 售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆
  • B. 到站时司机停车,并告诉售票员可以开车门让乘客上下车。

信号量映射

  • 关门 → V操作;P操作 ← 开车
  • 停车 → V操作;P操作 ← 开门
  • 因此,需要两个信号量,分别检测是否允许开车,是否允许开门。
解决方案

设置两个信号量:

  • dr (drive): 表示是否允许司机启动汽车,其初值为 0
  • op (open): 表示是否允许售票员开门,其初值为 0

伪代码实现

// 全局信号量
int dr = 0;
int op = 0;main() {cobegin // 并发执行driver();busman();coend
}driver() {while(1) {P(dr);          // 启动汽车前检测是否允许开车启动车辆;正常行车;到站停车;V(op);          // 到站停车后给售票员发信号,允许开门}
}busman() {while(1) {关车门;V(dr);          // 关车门后,给司机发信号,允许启动汽车售票;P(op);          // 开车门前,检测是否允许开门开车门;上下乘客;}
}

执行流程分析
若司机进程先执行,则会因P(dr)而阻塞。等到售票员进程执行,关门后执行V(dr),司机进程被唤醒。同样,售票员进程在开车门前会因P(op)而阻塞,直到司机到站停车后执行V(op),售票员进程才被唤醒,打开车门。

2. 多级反馈队列调度问题

问题
进程 P0, P2, P3, P4 分别在时刻 0, 5, 7, 12 到达,执行时间分别为 7, 4, 13, 9。采用三级反馈队列调度,三个队列的时间片分别为2, 4, 8。请写出各进程开始执行时刻及完成时刻。

参考答案

进程开始时刻完成时刻
A(P0)011
B(P2)519
C(P3)730
D(P4)1233
http://www.dtcms.com/a/500247.html

相关文章:

  • 给会所做网站室内装潢设计师
  • 长春建站塔山双喜网络广告营销案例有哪些
  • Linux防火墙利器:iptables详解
  • 网站建设mrd文档模板公众号开发运营方案
  • IDEA实用快捷键
  • 电影网站建设公司泰州企业网站建设
  • 论文学习_kTrans: Knowledge-Aware Transformer for Binary Code Embedding
  • 南京著名网站制作公司翻译
  • c和c++生态以及学习路线和应用领域
  • 网站名称是什么意思有没有做翻译赚钱的网站
  • 网站开发语言怎么用ps做网站框架
  • Linux中pinctrl使用
  • 网站建设设计说明医疗器械网站建设方案
  • 网站建设 主机选择快照打开是网站网站
  • 从零构建RAG知识库管理系统(三)
  • 网站建设制作小程序开发wordpress 标点排版
  • 【单调栈 离散化】P10798 「CZOI-R1」消除威胁|普及+
  • 邵武建设局网站wordpress多用户博客
  • (Kotlin高级特性三)Kotlin密封类(Sealed Class)在何时比枚举更适用?
  • kalibr进行相机内参以及相机imu的融合标定
  • 最简单的做网站工具网站发外链的好处
  • 北京神州网站建设xxx网站策划书
  • linux开启bbr网络优化
  • 前后端路径处理完整指南:从零开始理解Web开发中的路径问题
  • 为什么网站要备案头条新闻 免费下载
  • 汇通网做期货的网站做期货的网站软件开发平台 devcloud
  • 专门做橱柜衣柜效果图的网站青海网站建设怎么建设
  • 算法沉淀第六天(牛客小白月赛122 和 Codeforces Round 1059 (Div. 3))
  • 网站建设与维护蒋勇从前端开发培训机构有哪些
  • 网站建设后的心得浙江省建设通网站