上海应用技术学院程序设计语言实验报告实验名称时间片轮转调度实验序号实验五实验日期姓名学号指导教师专业计算机科学与技术班级成绩一、实验目的及要求为 EOS调度器添加时间片轮转调度算法,了解常用调度算法。二、实验环境 Windows XP;Tevation OS Lab 。三、实验内容1 准备实验按照下面的步骤准备实验:1. 启动 OS Lab。2. 新建一个 EOS Kernel 项目。如图 1. 图 1 3. 在“项目管理器”窗口中双击Floppy.img文件,使用 FloppyImageEditor工具打开此软盘镜像。如图2。图 2 4. 将本实验文件夹中的multi.exe文件添加到软盘镜像的根目录中。如图3。图 3 5. 点击 FloppyImageEditor工具栏上的保存按钮,关闭该工具。2 阅读 multi.exe的源代码在本实验文件夹中找到multi.exe的源代码文件 multi.c,使用 OS Lab打开此文件,仔细阅读此文件中的源代码。在阅读的过程中需要注意下面的问题:在 main 函数中使用 ThreadFunction线程函数创建了23 个新线程。这样在该应用程序创建的进程中,算上主线程后就会包括24 个线程。主线程会在控制台的第0 行循环输出计数,其它的线程也会在控制台的对应行循环输出计数,这样就可以很方便的观察各个线程执行的情况。各个线程在向控制台输出时使用“关中断”和“开中断”进行了互斥。原则上在应用程序中是不能使用“关中断”和“开中断”指令的,这里是为了保证各个线程不进行让权等待,保证实验的效果。为了保证实验效果,所有的线程(包括主线程)都是死循环。也就是说所有的线程都不会结束执行。3 执行 multi.exe 按照下面的步骤执行multi.exe,查看其运行效果:1. 按 F7生成在 3.1 中创建的 EOS Kernel 项目。如图 4。图 4 2. 按 F5启动调试。如图5。图 5 3. 在 EOS控制台中输入“ A:\multi.exe”后按回车。在 multi.exe开始执行后,观察其执行结果(如图6)会发现 multi.exe的执行没有体现其源代码的设计意图。通过之前对multi.c的分析, multi 进程中的 24 个线程应该在控制台对应的行中不停地输出字符。而这里只有主线程在运行,其它线程都没有运行。图 6 造成上述现象的原因是什么呢?因为进程内的所有线程在被创建时都采用了默认优先级8,这就造成这 24 个线程的优先级都是相同的。而此时EOS只实现了基于优先级的抢先式调度算法,还没有实现时间片轮转调度算法,所以至始至终都只有主线程在运行,其它具有相同优先级的线程都没有运行...