2024年4月12日发(作者:)
《操作系统》实验报告
实验题目 时间片轮转调度
学生姓名
lee
学 号
专业班级
指导教师
院系名称 计算机与信息学院
2017 年 10
月 30 日
实验6 时间片轮转调度
1. 实验目的与要求
调试EOS的线程调度程序,熟悉基于优先级的抢先式调度。
为EOS添加时间片轮转调度,了解其它常用的调度算法。
2. 实验原理
阅读本书第5章中的第5.4节。重点理解EOS当前使用的基于优先级的抢先式调度,调度程
序执行的时机和流程,以及实现时间片轮转调度的细节。
3. 实验内容
3.1 准备实验
按照下面的步骤准备实验:
1. 启动OS Lab。
2. 新建一个EOS Kernel项目。
3.2 阅读控制台命令“rr”相关的源代码
阅读ke/sysproc.c文件中第690行的ConsoleCmdRoundRobin函数,及该函数用到的第649
行的ThreadFunction函数和第642行的THREAD_PARAMETER结构体,学习“rr”命令是如何测试
时间片轮转调度的。在阅读的过程中需要特别注意下面几点:
在ConsoleCmdRoundRobin函数中使用ThreadFunction函数做为线程函数,新建了20个
优先级为8的线程,做为测试时间片轮转调度用的线程。
在新建的线程中,只有正在执行的线程才会在控制台的对应行(第0个线程对应第0行,
第1个线程对应第1行)增加其计数,这样就可以很方便的观察到各个线程执行的情况。
控制台对于新建的线程来说是一种临界资源,所以,新建的线程在向控制台输出时,
必须使用“关中断”和“开中断”进行互斥(参见ThreadFunction函数的源代码)。
由于控制台线程的优先级是24,高于新建线程的优先级 8,所以只有在控制台线程进
入“阻塞”状态后,新建的线程才能执行。
新建的线程会一直运行,原因是在ThreadFunction函数中使用了死循环,所以只能在
ConsoleCmdRoundRobin函数的最后调用TerminateThread函数来强制结束这些新建的线
程。
按照下面的步骤执行控制台命令“rr”,查看其在没有时间片轮转调度时的执行效果:
1. 按F7生成在本实验3.1中创建的EOS Kernel项目。
2. 按F5启动调试。
3. 待EOS启动完毕,在EOS控制台中输入命令“rr”后按回车。
命令开始执行后,观察其执行效果(如图1),会发现并没有体现“rr”命令相关源代码的设计
意图。通过之前对这些源代码的学习,20个新建的线程应该在控制台对应的行中轮流地显
示它们的计数在增加,而现在只有第0个新建的线程在第0行显示其计数在增加,说明只有
发布评论