作业二:《进程》

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

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

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

  1. 在Linux中,若在一个多线程进程的某个线程中使用fork创建一个子进程,则在子进程中会存在几个线程?创建出的子进程可能会导致什么问题?Linux为何要如此设计Fork的语义?

  2. vfork是Linux中一个和fork十分相似的系统调用,关于vfork的设计详情,可以参考man vfork命令的输出内容。请回答,对于分配大量内存的应用,为何及时采用了写时拷贝(Copy-on-write,COW)优化后,fork的性能仍然比vfork要差?请尝试利用vfork的思路对fork进行优化,从而在不改变fork语义的前提下,提升fork的性能。

  3. 在像ChCore一样的单进程多线程的操作系统中,操作系统通常以线程为粒度进行调度。在一些调度的实现中,在从属于同一个进程的两个不同线程之间进行上下文切换所消耗的时间比在从属于不同进程的两个不同线程之间进行切换耗时更低,试解释其原因。

  4. 在ChCore中,内核会在上下文切换的过程中切换属于不同进程的页表。于此同时,ChCore内核中同样使用虚拟地址进行内存访问,需要根据页表进行地址翻译。在这一设计下,如何确保上下文切换过程中对页表的切换不会影响到内核的正常执行?

  5. 对于像协程一样的用户态线程而言,由于所有的协程均从属于同一个内核态线程,因此同一时间仅能同时运行一个协程。在这一情况下,为何协程仍然能够提升应用性能?对于哪类应用协程能够尽可能高的提升系统性能?