操作系统实验 ucore lab7(未完待续)
练习1:理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题(不需要编码)
完成练习0后,建议大家比较一下(可用kdiff3等文件比较软件)个人完成的lab6和练习0完成后的刚修改的lab7之间的区别,分析了解lab7采用信号量的执行过程。执行make grade,大部分测试用例应该通过。
请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。
请在实验报告中给出给用户态进程/线程提供信号量机制的设计方案,并比较说明给内核级提供信号量机制的异同。
分析了解lab7采用信号量的执行过程
首先在init_main函数(系统启动之后的第二个进程)中启动检测哲学家问题的函数:
check_sync函数中首先初始化互斥锁,以及每个哲学家的信号量:
我们看到,初始化信号量将互斥锁mutex的value值设置为1,将每位哲学家的信号量的value值设置为0,说明初始状态下,互斥锁可用数为1,哲学家为阻塞状态:
然后调用了等待队列初始化函数:
我们看到,一层一层调用下去,最后一个函数是这个: