Skip to content

Latest commit

 

History

History
50 lines (29 loc) · 2.01 KB

06-2-lab6-spoc-discussion.md

File metadata and controls

50 lines (29 loc) · 2.01 KB

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中

实验代码 https://github.com/clarkliucs/ucore_lab/tree/master/labcodes_answer/lab6_result/kern

在所有内核中schedule的调用点都进行了cprintf的输出,用来观察被调度的进程是哪个

在trap函数schedule调度点前也进行了同样的输出