os_exercises

lab6 spoc 思考题

  • 有"spoc"标记的题是要求拿清华学分的同学要在实体课上完成,并按时提交到学生对应的ucore_code和os_exercises的git repo上。

个人思考题

总体介绍

  • ucore中的调度点在哪里,完成了啥事?
  • 进程控制块中与调度相关的字段有哪些?
  • ucore的就绪队列数据结构在哪定义?在哪进行修改?
  • ucore的等待队列数据结构在哪定义?在哪进行修改?

调度算法支撑框架

  • 调度算法支撑框架中的各个函数指针的功能是啥?会被谁在何种情况下调用?
  • 调度函数schedule()的调用函数分析,可以了解进程调度的原因。请分析ucore中所有可能的调度位置,并说明可能的调用原因。

时间片轮转调度算法

  • 时间片轮转调度算法是如何基于调度算法支撑框架实现的?
  • 时钟中断如何调用RR_proc_tick()的?

stride调度算法

  • stride调度算法的思路?
  • stride算法的特征是什么?
  • stride调度算法是如何避免stride溢出问题的?
  • 无符号数的有符号比较会产生什么效果?
  • 什么是斜堆(skew heap)?

小组练习与思考题

(1)(spoc) 理解调度算法支撑框架的执行过程

即在ucore运行过程中通过cprintf函数来完整地展现出来多个进程在调度算法和框架的支撑下,在相关调度点如何动态调度和执行的细节。(越全面细致越好)

请完成如下练习,完成代码填写,并形成spoc练习报告

需写练习报告和简单编码,完成后放到git server 对应的git repo中

练习用的lab6 spoc exercise project source code