实验任务
练习¶
为了实现lab7的目标,lab2提供了2个基本练习和2个扩展练习,要求完成实验报告。 注意有“LAB7”的注释,代码中所有需要完成的地方(challenge除外)都有“LAB7”和“YOUR CODE”的注释 对实验报告的要求: - 基于markdown格式来完成,以文本方式为主 - 填写各个基本练习中要求完成的报告内容 - 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别 - 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点) - 列出你认为OS原理中很重要,但在实验中没有对应上的知识点
练习1: 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题(不需要编码)¶
请在实验报告中给出内核级信号量的设计描述,并说明其大致执行流程。
请在实验报告中给出给用户态进程/线程提供信号量机制的设计方案,并比较说明给内核级提供信号量机制的异同。
练习2: 完成内核级条件变量和基于内核级条件变量的哲学家就餐问题(需要编码)¶
首先掌握管程机制,然后基于信号量实现完成条件变量实现,然后用管程机制实现哲学家就餐问题的解决方案(基于条件变量)。
完成代码编写后,编译并运行代码:make qemu -j 16
如果可以得到如 编译方法所示的显示内容(仅供参考,不是标准答案输出),则基本正确。
请在实验报告中给出内核级条件变量的设计描述,并说明其大致执行流程。
请在实验报告中给出给用户态进程/线程提供条件变量机制的设计方案,并比较说明给内核级提供条件变量机制的异同。
请在实验报告中回答:能否不用基于信号量机制来完成条件变量?如果不能,请给出理由,如果能,请给出设计说明和具体实现。
扩展练习 Challenge : 在ucore中实现简化的死锁和重入探测机制¶
在ucore下实现一种探测机制,能够在多进程/线程运行同步互斥问题时,动态判断当前系统是否出现了死锁产生的必要条件,是否产生了多个进程进入临界区的情况。 如果发现,让系统进入monitor状态,打印出你的探测信息。
扩展练习 Challenge : 参考Linux的RCU机制,在ucore中实现简化的RCU机制¶
在ucore 下实现下Linux的RCU同步互斥机制。可阅读相关Linux内核书籍或查询网上资料,可了解RCU的设计实现细节,然后简化实现在ucore中。 要求有实验报告说明你的设计思路,并提供测试用例。下面是一些参考资料: