- 有"spoc"标记的题是要求拿清华学分的同学要在实体课上完成,并按时提交到学生对应的ucore_code和os_exercises的git repo上。
- ucore中的调度点在哪里,完成了啥事?
- 进程控制块中与调度相关的字段有哪些?
- ucore的就绪队列数据结构在哪定义?在哪进行修改?
- ucore的等待队列数据结构在哪定义?在哪进行修改?
- 调度算法支撑框架中的各个函数指针的功能是啥?会被谁在何种情况下调用?
- 调度函数schedule()的调用函数分析,可以了解进程调度的原因。请分析ucore中所有可能的调度位置,并说明可能的调用原因。
- 时间片轮转调度算法是如何基于调度算法支撑框架实现的?
- 时钟中断如何调用RR_proc_tick()的?
- stride调度算法的思路?
- stride算法的特征是什么?
- stride调度算法是如何避免stride溢出问题的?
- 无符号数的有符号比较会产生什么效果?
- 什么是斜堆(skew heap)?
即在ucore运行过程中通过cprintf
函数来完整地展现出来多个进程在调度算法和框架的支撑下,在相关调度点如何动态调度和执行的细节。(约全面细致约好)
请完成如下练习,完成代码填写,并形成spoc练习报告
需写练习报告和简单编码,完成后放到git server 对应的git repo中
实验代码 https://github.com/clarkliucs/ucore_lab/tree/master/labcodes_answer/lab6_result/kern
在所有内核中schedule的调用点都进行了cprintf的输出,用来观察被调度的进程是哪个
在trap函数schedule调度点前也进行了同样的输出