




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海应用技术学院程序设计语言实验报告实验名称时间片轮转调度实验序号实验五实验日期姓 名学 号指导教师专 业计算机科学与技术班 级 成 绩1、 实验目的及要求为EOS调度器添加时间片轮转调度算法,了解常用调度算法。2、 实验环境 Windows XP;Tevation OS Lab。三、实验内容1 准备实验按照下面的步骤准备实验:1. 启动OS Lab。2. 新建一个EOS Kernel项目。如图1.图13. 在“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像。如图2。图24. 将本实验文件夹中的multi.exe文件添加到软盘镜像的根目录中。如图3。图35. 点击FloppyImageEditor工具栏上的保存按钮,关闭该工具。2 阅读multi.exe的源代码在本实验文件夹中找到multi.exe的源代码文件multi.c,使用OS Lab打开此文件,仔细阅读此文件中的源代码。在阅读的过程中需要注意下面的问题:l 在main函数中使用ThreadFunction线程函数创建了23个新线程。这样在该应用程序创建的进程中,算上主线程后就会包括24个线程。l 主线程会在控制台的第0行循环输出计数,其它的线程也会在控制台的对应行循环输出计数,这样就可以很方便的观察各个线程执行的情况。l 各个线程在向控制台输出时使用“关中断”和“开中断”进行了互斥。原则上在应用程序中是不能使用“关中断”和“开中断”指令的,这里是为了保证各个线程不进行让权等待,保证实验的效果。l 为了保证实验效果,所有的线程(包括主线程)都是死循环。也就是说所有的线程都不会结束执行。3 执行multi.exe按照下面的步骤执行multi.exe,查看其运行效果:1. 按F7生成在3.1中创建的EOS Kernel项目。如图4。图42. 按F5启动调试。如图5。图53. 在EOS控制台中输入“A:multi.exe”后按回车。在multi.exe开始执行后,观察其执行结果(如图6)会发现multi.exe的执行没有体现其源代码的设计意图。通过之前对multi.c的分析,multi进程中的24个线程应该在控制台对应的行中不停地输出字符。而这里只有主线程在运行,其它线程都没有运行。图6造成上述现象的原因是什么呢?因为进程内的所有线程在被创建时都采用了默认优先级8,这就造成这24个线程的优先级都是相同的。而此时EOS只实现了基于优先级的抢先式调度算法,还没有实现时间片轮转调度算法,所以至始至终都只有主线程在运行,其它具有相同优先级的线程都没有运行。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操作系统运行过程中,TCB指针变量PspCurrentThread始终指向当前线程。所以,当发生中断时,PspCurrentThread就指向被中断的线程。PspCurrentThread的定义参见ps/sched.c的第44行。TCB结构体定义参见ps/psp.h的第58行。l PspRoundRobin函数在被调用时,被中断线程(PspCurrentThread指向的线程)的状态可能已经改变(例如从运行状态转变为等待状态)。所以要先判断一下被中断线程是否仍处于运行状态,只有当被中断线程处于运行状态时才能进行时间片轮转调度。在PspRoundRobin中的第一行代码可以如下:if (NULL != PspCurrentThread & Running = PspCurrentThread-State) / 在此实现时间片轮转调度算法线程状态的定义可以参见ps/psp.h的第93行。l PspRoundRobin函数具体的流程可以参考图3。l 被中断线程所拥有的时间片保存在PspCurrentThread-RemainderTicks中。l 重新为被中断线程分配时间片时,可以使用头文件ps/psp.h中第104行的宏定义TICKS_OF_TIME_SLICE,目前为6。注意,此宏定义表示每次给线程分配的时钟滴答(Tick)数量,多个时钟滴答组成了线程的时间片。时钟滴答的大小是由定时器中断的频率确定的,目前每秒触发100次定时器中断,所以每个时钟滴答的大小是10ms。l 在检查是否存在和被中断线程优先级相同的就绪线程时,只需要扫描32位就绪位图即可。可以使用下面的代码作为判断语句中的布尔表达式:BIT_TEST(PspReadyBitmap, PspCurrentThread-Priority)BIT_TEST是一个宏定义函数,其定义参见inc/eosdef.h的第219行。如果存在和被中断线程优先级相同的就绪线程,此函数返回非0(TURE),否则返回0(FALSE)。变量PspReadyBitmap是32为就绪位图,其定义参见ps/sched.c的第28行。l 可以使用下面的代码将被中断线程转入就绪状态:PspReadyThread(PspCurrentThread);函数PspReadyThread的定义参见ps/sched.c的第106行。5 修改线程的时间片大小 在你成功为EOS添加了时间片轮转调度算法后,可以按照下面的步骤修改时间片的大小:1. 在OS Lab的“项目管理器”窗口中找到ps/psp.h文件,并双击打开此文件。如图11。图112. 将ps/psp.h第104行定义的TICKS_OF_TIME_SLICE的值修改为1。如图12。图124. 按F7生成EOS内核项目。如图13。图135. 按F5启动调试。如图14。图143. 在EOS控制台中输入“A:multi.exe”后按回车。观察multi.exe执行的效果。如图15。图15你还可以按照上面的步骤为TICKS_OF_TIME_SLICE取一些极端值,例如20和100等,分别观察multi.exe运行的效果。通过分析造成运行效果不同的原因,理解时间片的大小对时间片轮转调度造成的影响。以100为例,过程如下: (1)修改TICKS_OF_TIME_SLICE的值为100。如图16。图16(2)F7生成项目。如图17。图17(3)F5调试。如图18。图184、 实验结果与分析 1、实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省衡阳市衡山县星源学校2025-2026学年七年级上学期开学数学试题(无答案)
- 2024-2025学年湖北省荆州市石首市八年级(上)期末数学试卷(含答案)
- 环境形象题目及答案高中
- 扣分安全驾驶培训课件
- 2025年广电摄影考试题目及答案
- 2025年残疾工作考试题目及答案
- 2025年驾照考试科三题目及答案
- 卫生健康职业技能竞赛(危重新生儿救治项目)理论及技能操作知识考试题库(含答案)
- 情绪管理课件教学
- 画技法考试题目及答案
- 跟痛症教学讲解课件
- 《教育魅力-青年教师成长钥匙》
- 《生物多样性公约》及国际组织课件
- 绪论(遗传学)课件
- 滴定管使用课件
- 单片机应用技术项目教程C语言版ppt课件(完整版)
- 公司金融课件(完整版)
- 公司员工薪资审批表
- 四年级公共安全教育全册教案(海峡教育出版社)
- 高处作业审批表
- 太湖综合整工程生态清淤取土工程施工组织设计
评论
0/150
提交评论