06时间片轮转调度

06时间片轮转调度

ID:30221563

大小:537.50 KB

页数:14页

时间:2018-12-27

06时间片轮转调度_第1页
06时间片轮转调度_第2页
06时间片轮转调度_第3页
06时间片轮转调度_第4页
06时间片轮转调度_第5页
资源描述:

《06时间片轮转调度》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案《操作系统》实验报告实验题目时间片轮转调度学生姓名lee学号专业班级指导教师院系名称计算机与信息学院2017年10月30日精彩文档实用标准文案实验6时间片轮转调度1.实验目的与要求l调试EOS的线程调度程序,熟悉基于优先级的抢先式调度。l为EOS添加时间片轮转调度,了解其它常用的调度算法。2.实验原理阅读本书第5章中的第5.4节。重点理解EOS当前使用的基于优先级的抢先式调度,调度程序执行的时机和流程,以及实现时间片轮转调度的细节。3.实验内容3.1准备实验按照下面的步骤准备实验:1.启动OSLab。2.新

2、建一个EOSKernel项目。3.2阅读控制台命令“rr”相关的源代码阅读ke/sysproc.c文件中第690行的ConsoleCmdRoundRobin函数,及该函数用到的第649行的ThreadFunction函数和第642行的THREAD_PARAMETER结构体,学习“rr”命令是如何测试时间片轮转调度的。在阅读的过程中需要特别注意下面几点:l在ConsoleCmdRoundRobin函数中使用ThreadFunction函数做为线程函数,新建了20个优先级为8的线程,做为测试时间片轮转调度用的线程。l在新建

3、的线程中,只有正在执行的线程才会在控制台的对应行(第0个线程对应第0行,第1个线程对应第1行)增加其计数,这样就可以很方便的观察到各个线程执行的情况。l控制台对于新建的线程来说是一种临界资源,所以,新建的线程在向控制台输出时,必须使用“关中断”和“开中断”进行互斥(参见ThreadFunction函数的源代码)。l由于控制台线程的优先级是24,高于新建线程的优先级8,所以只有在控制台线程进入“阻塞”状态后,新建的线程才能执行。l新建的线程会一直运行,原因是在ThreadFunction函数中使用了死循环,所以只能在Co

4、nsoleCmdRoundRobin函数的最后调用TerminateThread函数来强制结束这些新建的线程。按照下面的步骤执行控制台命令“rr”,查看其在没有时间片轮转调度时的执行效果:1.按F7生成在本实验3.1中创建的EOSKernel项目。2.按F5启动调试。3.待EOS启动完毕,在EOS控制台中输入命令“rr”后按回车。命令开始执行后,观察其执行效果(如图1),会发现并没有体现“rr”命令相关源代码的设计意图。通过之前对这些源代码的学习,20个新建的线程应该在控制台对应的行中轮流地显示它们的计数在增加,而现在

5、只有第0个新建的线程在第0行显示其计数在增加,说明只有第0个新建的线程在运行,其它线程都没有运行。造成上述现象的原因是:所有20精彩文档实用标准文案个新建线程的优先级都是8,而此时EOS只实现了基于优先级的抢先式调度,还没有实现时间片轮转调度,所以至始至终都只有第0个线程在运行,而其它具有相同优先级的线程都没有机会运行,只能处于“就绪”状态。图1:没有时间片轮转调度时“rr”命令的执行效果3.3调试线程调度程序在为EOS添加时间片轮转调度之前,先调试一下EOS的线程调度程序PspSelectNextThread函数,学

6、习就绪队列、就绪位图以及线程的优先级是如何在线程调度程序中协同工作的,从而加深对EOS已经实现的基于优先级的抢先式调度的理解。3.3.1调试当前线程不被抢先的情况正像图1中显示的,新建的第0个线程会一直运行,而不会被其它同优先级的新建线程或者低优先级的线程抢先。按照下面的步骤调试这种情况在PspSelectNextThread函数中处理的过程。1.结束之前的调试。2.在ke/sysproc.c文件的ThreadFunction函数中,调用fprintf函数的代码行(第680行)添加一个断点。3.按F5启动调试。4.待E

7、OS启动完毕,在EOS控制台中输入命令“rr”后按回车。“rr”命令开始执行后,会在断点处中断。5.查看ThreadFunction函数中变量pThreadParameter->Y的值应该为0,说明正在调试的是第0个新建的线程。图2执行效果精彩文档实用标准文案6.激活虚拟机窗口,可以看到第0个新建的线程还没有在控制台中输出任何内容,原因是fprintf函数还没有执行。7.激活OSLab窗口后按F5使第0个新建的线程继续执行,又会在断点处中断。再次激活虚拟机窗口,可以看到第0个新建的线程已经在控制台中输出了第一轮循环的内

8、容。可以多按几次F5查看每轮循环输出的内容。图3第一轮循环通过之前的调试,可以观察到第0个新建的线程执行的情况。按照下面的步骤调试,查看当有中断发生从而触发线程调度时,第0个新建的线程不会被抢先的情况。1.在ps/sched.c文件的PspSelectNextThread函数中,调用BitScanReverse函数扫描就绪位图的代

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。