实验五-时间片轮转调度

实验五-时间片轮转调度

ID:39575951

大小:697.00 KB

页数:11页

时间:2019-07-06

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

《实验五-时间片轮转调度》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上海应用技术学院程序设计语言实验报告实验名称时间片轮转调度实验序号实验五实验日期姓名学号指导教师专业计算机科学与技术班级成绩一、实验目的及要求为EOS调度器添加时间片轮转调度算法,了解常用调度算法。二、实验环境WindowsXP;TevationOSLab。三、实验内容1准备实验按照下面的步骤准备实验:1.启动OSLab。2.新建一个EOSKernel项目。如图1.图13.在“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像。如图2。图21.将本实验文件夹中的multi

2、.exe文件添加到软盘镜像的根目录中。如图3。图32.点击FloppyImageEditor工具栏上的保存按钮,关闭该工具。2阅读multi.exe的源代码在本实验文件夹中找到multi.exe的源代码文件multi.c,使用OSLab打开此文件,仔细阅读此文件中的源代码。在阅读的过程中需要注意下面的问题:l在main函数中使用ThreadFunction线程函数创建了23个新线程。这样在该应用程序创建的进程中,算上主线程后就会包括24个线程。l主线程会在控制台的第0行循环输出计数,其它的线程也会在控制台的对应行循环输出计数

3、,这样就可以很方便的观察各个线程执行的情况。l各个线程在向控制台输出时使用“关中断”和“开中断”进行了互斥。原则上在应用程序中是不能使用“关中断”和“开中断”指令的,这里是为了保证各个线程不进行让权等待,保证实验的效果。l为了保证实验效果,所有的线程(包括主线程)都是死循环。也就是说所有的线程都不会结束执行。3执行multi.exe按照下面的步骤执行multi.exe,查看其运行效果:1.按F7生成在3.1中创建的EOSKernel项目。如图4。图41.按F5启动调试。如图5。图52.在EOS控制台中输入“A:multi.

4、exe”后按回车。在multi.exe开始执行后,观察其执行结果(如图6)会发现multi.exe的执行没有体现其源代码的设计意图。通过之前对multi.c的分析,multi进程中的24个线程应该在控制台对应的行中不停地输出字符。而这里只有主线程在运行,其它线程都没有运行。图6造成上述现象的原因是什么呢?因为进程内的所有线程在被创建时都采用了默认优先级8,这就造成这24个线程的优先级都是相同的。而此时EOS只实现了基于优先级的抢先式调度算法,还没有实现时间片轮转调度算法,所以至始至终都只有主线程在运行,其它具有相同优先级的线

5、程都没有运行。4为EOS添加时间片轮转调度算法4.1要求修改EOS内核项目ps/sched.c文件中的PspRoundRobin函数(第335行),在其中实现时间片轮转调度算法。如图7。图74.2测试方法1.代码修改完毕后,按F7生成EOS内核项目。如图8。图82.按F5启动调试。如图9。图93.在EOS控制台中输入“A:multi.exe”后按回车。应能看到24个线程并发执行的效果,如图10。图10图2:进行时间片轮转调度时multi.exe的执行效果图3:PspRoundRobin函数的流程图4.3提示l在EOS操作系

6、统运行过程中,TCB指针变量PspCurrentThread始终指向当前线程。所以,当发生中断时,PspCurrentThread就指向被中断的线程。PspCurrentThread的定义参见ps/sched.c的第44行。TCB结构体定义参见ps/psp.h的第58行。lPspRoundRobin函数在被调用时,被中断线程(PspCurrentThread指向的线程)的状态可能已经改变(例如从运行状态转变为等待状态)。所以要先判断一下被中断线程是否仍处于运行状态,只有当被中断线程处于运行状态时才能进行时间片轮转调度。在Ps

7、pRoundRobin中的第一行代码可以如下:if(NULL!=PspCurrentThread&&Running==PspCurrentThread->State){//在此实现时间片轮转调度算法}线程状态的定义可以参见ps/psp.h的第93行。lPspRoundRobin函数具体的流程可以参考图3。l被中断线程所拥有的时间片保存在PspCurrentThread->RemainderTicks中。l重新为被中断线程分配时间片时,可以使用头文件ps/psp.h中第104行的宏定义TICKS_OF_TIME_SLICE,目

8、前为6。注意,此宏定义表示每次给线程分配的时钟滴答(Tick)数量,多个时钟滴答组成了线程的时间片。时钟滴答的大小是由定时器中断的频率确定的,目前每秒触发100次定时器中断,所以每个时钟滴答的大小是10ms。l在检查是否存在和被中断线程优先级相同的就绪线程时,只需要扫描32位就绪位图即可。

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

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

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