华北电力大学实验报告|| 实验名称时间片轮转调度课程名称计算机操作系统||专业班级:软件 1002 学生姓名:赵策学号: 201009020228 成绩: 指导教师:宋亚奇实验日期: 华北电力大学实验报告第页共页一. 实验目的及要求 EOS 的线程调度程序,熟悉基于优先级的抢先式调度。 添加时间片轮转调度,了解其它常用的调度算法。 OSLab 集成实验环境二. 实验方法及环境 1. 准备实验 1)启动 OSLab 。 2)新建一个 EOS Kernel 项目。 “rr”相关的源代码 1)按F7生成在本实验 中创建的 EOS Kernel 项目。 2)按F5启动调试。 3)待EOS 启动完毕,在 EOS 控制台中输入命令“rr”后按回车。 a)调试当前线程不被抢先的情况 1)结束之前的调试。 2)在ke/ 文件的 ThreadFunction 函数中,调用 fprintf 函数的代码行(第680 行)添加一个断点。 3)按F5启动调试。 4)待EOS 启动完毕,在EOS 控制台中输入命令“rr”后按回车。“rr”命令开始执行后, 会在断点处中断。 5)查看 ThreadFunction 函数中变量 pThreadParameter->Y 的值应该为 0,说明正在调试的是第 0个新建的线程。 6)激活虚拟机窗口,可以看到第 0个新建的线程还没有在控制台中输出任何内容,原因是fprintf 函数还没有执行。 7)激活 OSLab 窗口后按 F5使第 0个新建的线程继续执行,又会在断点处中断。再次激活虚拟机窗口,可以看到第 0个新建的线程已经在控制台中输出了第一轮循环的内容。可以多按几次 F5查看每轮循环输出的内容。 b)调试当前线程被抢先的情况 1)选择“调试”菜单中的“删除所有断点”,删除之前添加的所有断点。 2)在ps/ 文件的 PspSelectNextThread 函数的第 395 行添加一个断点。 3)按F5继续执行,激活虚拟机窗口,可看到第 0个新建的线程正在执行。 4)在虚拟机窗口中按下一次空格键, EOS 会在之前添加的断点处中断。 5)在“监视”窗口中查看就绪位图的值为 1000000000000000100000001 ,说明此时在华北电力大学实验报告第页共页优先级为 24 的就绪队列中存在就绪线程。在“监视”窗口中添加表达式“ListGetCount(&PspReadyListHeads[24]) ”,其值为 1,说明优先级为 24的就绪队列中只有一个就绪线程。扫描就绪位图后获得的最高优先级的值 HighestPriority 也就应该是 24。 6)按 F10 单步调试一次,执行的语句会将当前正在执行的第 0 个新建的线程,放入优先级为 8 的就绪队列的队首。“监视”窗口中显示的优先级为 8 的就绪队列中的线程数量就会增加 1,变为 20。 7 )继续按 F10 单步调试,直到在第 444 行中断执行,注意观察线程调度执行的每一个步骤。此时,正在执行的第 0 个新建的线程已经进入了“就绪”状态,让出了 CPU 。线程调度程序接下来的工作就是选择优先级最高的非空就绪队列的队首线程作为当前运行线程,也就是让优先级为
实验6.时间片轮转调度 来自淘豆网m.daumloan.com转载请标明出处.