作业三:《进程间通信》

截止时间: 2021年4月9号23时59分

提交方式: 好大学在线 《操作系统》 2021年春- ->第七章- ->本章练习

注意: 我们已经将选课的同学名单导入到好大学在线的操作系统课程中,大家可以在“我的课程”栏目中看到《操作系统》课程,请注意课程的学期是2021春。本门课程的作业均使用好大学在线的方式进行提交,此外,每位同学还需要批改两份其他同学的作业,批改参与情况以及批改得分将作为作业成绩的参考,并不作为最终的作业成绩。

  1. 对于以下四个场景,请从“使用阻塞的消息传递进行进程间的直接通讯”、“使用非阻塞的消息传递进行进程间的直接通讯”、“使用信箱的方式进行进程间进行间接通讯”、“通过轮询共享内存的方式进行进程间的通讯”中选择最合适的进程间通信方法 a) 电商网站中的反向代理进程希望通过进程间通信的方式将收到的用户请求转发给一系列服务进程,使得某服务进程空闲后即可处理该请求。 b) 电商网站中的服务进程希望通过进程间通信的方式从锁服务(Lock Service)进程中获取一把锁,从而进入临界区(Critical Section)执行商品购买逻辑。 c) 电商网站中的服务进程希望通过进程间通信的方式,将包含用户请求执行结果的网络包通过用户态网络驱动服务进程,以尽可能低的时延发送出去。 d) 电商网站中的服务进程希望通过进程间通信的方式将一条用户购买记录发送给后台推荐分析进程。

  2. 在xv6的管道线(PIPE)实现中,pipe这一结构体中的lock这一属性的作用是什么?为什么在sleep函数中存在放锁与拿锁操作,而在wake函数中却没有?

  3. 对于基于共享内存的进程间通信而言,存在一个常见的安全性问题:Time-to-check to time-to-use(TOCTOU)。请查阅外部资料,简要说明这一问题的含义。

  4. 对于课程中所介绍的轻量级进程间通信(LIPC),请回答以下问题: (1)为什么要将栈分成参数栈与执行栈两种? (2)LRPC中控制流转换的主要要开销来自哪? (3)不考虑多线程的情况下,共享参数栈安全吗?

  5. 在进程间通信的实现中,通常需要采用某种命名机制来确定某个进程间通信的目标进程(如xv6例子中的nread/nwrite指针)。这类命名机制的设计是否会成为影响进程间通信性能的决定性因素?为什么?