- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验--时间片轮转调度heu
操作系统
实 验 报 告
课程名称 操作系统实验 课程编号 0906553 实验项目名称 时间片轮转调度 学号 年级 姓名 专业 学生所在学院 指导教师 实验室名称地点
哈尔滨工程大学
计算机科学与技术学院
第七讲 时间片轮转调度
一、实验概述
1. 实验名称
时间片轮转调度
2. 实验目的
1)调试 EOS 的线程调度程序,熟悉基于优先级的抢先式调度。
2)为 EOS 添加时间片轮转调度,了解其它常用的调度算法。
3. 实验类型
验证型实验,设计型实验
4. 实验内容
(1)准备实验
(2)阅读控制台命令“rr”相关的源代码
(3)调试线程调度程序
(4)为 EOS 添加时间片轮转调度
(5)修改线程时间片的大小
二、实验环境
WINDOWS XP系统,EOS操作系统
三、实验过程
1. 设计思路和流程图
2. 算法实现
3. 需要解决的问题及解答
4. 主要数据结构、实现代码及其说明
5. 源程序并附上注释
VOID
PspRoundRobin(
VOID
)
/*++
功能描述:
时间片轮转调度函数,被定时计数器中断服务程序 KiIsrTimer 调用。
参数:
无。
返回值:
无。
--*/
{
if(NULL!=PspCurrentThreadRunning ==PspCurrentThread-State)
//判断中断线程是否仍处于运行状态
{
PspCurrentThread-RemainderTicks--;
//时间片减少
if(PspCurrentThread-RemainderTicks==0){
//判断时间片是否为0
PspCurrentThread-RemainderTicks=TICKS_OF_TIME_SLICE;
//时间片大小设置
if(BIT_TEST(PspReadyBitmap,PspCurrentThread-Priority))
//判断是否有线程的优先级于被中断线程优先级相同
{ PspReadyThread(PspCurrentThread);
//将被中断线程转入就绪状态,并将其插入对应优先级就绪队列的队尾
}
}
}
return 0;//返回一个值
}
6. 程序运行时的初值和运行结果
阅读控制台命令“rr”相关的源代码
1)按 F7 生成在本实验 3.1 中创建的 EOS Kernel 项目。
2)按 F5 启动调试。
3)待 EOS 启动完毕,在 EOS 控制台中输入命令“rr”后按回车。
(2)调试当前线程不被抢先的情况
1)结束之前的调试。
2)在 ke/sysproc.c 文件的 ThreadFunction 函数中,调用 fprintf 函数的代码行(第 680 行)添加一个断点。
3) 按 F5 启动调试。
4) 待 EOS 启动完毕,在 EOS 控制台中输入命令“rr”后按回车。“rr”命令开始执行后,会在断点处中断。
5) 查看 ThreadFunction 函数中变量 pThreadParameter-Y 的值应该为 0,说明正在调试的是第 0个新建的线程。
6) 激活虚拟机窗口,可以看到第 0 个新建的线程还没有在控制台中输出任何内容,原因是 fprintf函数还没有执行。
7) 激活 OS Lab 窗口后按 F5 使第 0 个新建的线程继续执行,又会在断点处中断。再次激活虚拟机窗口,可以看到第 0 个新建的线程已经在控制台中输出了第一轮循环的内容。可以多按几次 F5 查看每轮循环输出的内容。
8) 在 ps/sched.c 文件的 PspSelectNextThread 函数中,调用 BitScanReverse 函数扫描就绪位图的代码行(第 384 行)添加一个断点。
9) 按 F5 继续执行,当有定时计数器中断发生时(每 10ms 一次),就会在新添加的断点处中断。
10) 在“调试”菜单的“窗口”中选择“监视”,激活“监视”窗口(此时按 F1 可以获得关于“监视”窗口的帮助)。
11) 在“监视”窗口中添加表达式“/t PspReadyBitmap”,以二进制格式查看就绪位图的值。此时就绪位图的值应该为 100000001,表示优先级为 8 和 0 的两个就绪队列中存在就绪线程。(注意,如果就绪位图的值不是 100000001,就继续按 F5,直到就绪位图变为此值)。
12) 在“ 调试 ”菜 单中选 择“ 快速 监视”, 在“ 快速 监视” 对话 框的 “表达 式
原创力文档


文档评论(0)