操作系统实验六.pdfVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

实验六时间片轮转调度

一、实验目的

·调试EOS的线程调度程序,熟悉基于优先级的抢先式调度。

·为EOS添加时间片轮转调度,了解其它常用的调度算法。

二、实验内容

1、执行了实验指导书3.2的步骤,学习了“rr”命令是如何测试时间片轮转调

度的。算法实现原理是,按进程到达顺序(FCFS原则)将进程依次加入就绪队

列当中,然后将CPU分配给位于队首的进程,确定一个时间片,让该进程执行

一个时间片。当该进程执行时间到时,该进程可能已经执行完毕(可能在时间片

未到时就以及执行完毕),或者未执行完毕,如果是前者只需将进程弹出队列即

可,如果是后者则将该进程加入队尾,并将CPU分配给新的队首进程,如此循

环。在没有时间片轮转调度时的执行结果如下图所示。

2、执行了实验指导书3.3的步骤,对EOS的线程调度程序PspSelectNextThread

函数进行调试,学习了就绪队列、就绪位图以及线程的优先级是如何在线程调度

程序中协同工作的。

调试当前线程不被抢先的情况:基于优先级的抢先式调度算法,新建的第0

个线程会一直运行,而不会被其它同优先级的新建线程或者低优先级的线程抢先。

通过调试可以观察到“rr”命令新建的第0个线程始终处于运行状态,而不会

被其它具有相同优先级的线程抢先。对在EOS内核中实现这种调度算法进行调

试,刷新“就绪线程队列”窗口,观察到如下图结果。在“监视”窗口中添加表

达式“/tPspReadyBitmap”,以二进制格式查看就绪位图变量的值,此时就绪位

图的值为100000001,表示优先级为8和0的两个就绪队列中存在就绪线程。

在“快速监视”对话框的“表达式”中输入表达式“*PspCurrentThread”,查看

当前正在运行的线程(即被中断的线程)的线程控制块中各个域的值。

通过以上调试线程调度函数PspSelectNextThread的执行过程,“rr”命令新

建的第0个线程在执行线程调度时没有被抢先的原因可以归纳为两点:

(1)第0个线程仍然处于“运行”状态;

(2)没有比其优先级更高的处于就绪状态的线程。

调试当前线程被抢先的情况:如果有比第0个新建的线程优先级更高的线程

进入就绪状态,则第0个新建的线程就会被抢先,例如在第0个线程运行的过程

中,按下空格键,就会让之前处于阻塞状态的控制台派遣线程进入就绪状态,而

控制台派遣线程的优先级为24,高于优先级为8的第0个新建的线程,线程调

度函数就会让控制台派遣线程抢占处理器。

通过调试,刷新“就绪线程队列”窗口,观察到下图内容,可以看到,在

32位就绪位图中第24位用绿色高亮显示且值为1,说明优先级为24的就绪队

列中存在就绪线程。在“32个链表头组成的就绪队列”中可以查看优先级为24的

就绪队列中挂接了一个处于就绪状态的线程,进一步可确认其为控制台派遣线程。

由于线程调度函数PspSelectNextThread在前面扫描就绪位图时已经发现

了存在优先级为24的就绪线程,其优先级高于正在运行的第0个新建的线程,

所以在刚刚执行的语句中将当前正在运行的第0个新建的线程放入优先级为8

的就绪队列的队首,并将其状态设置为就绪状态。此时刷新“就绪线程队列”窗

口,可以看到新建的第0个线程已经挂接在了优先级为8的就绪队列的队首,

优先级为8的就绪队列中一共挂接了10个线程。

继续进行调试,直到在PspSelectNextThread函数返回前中断执行,此时,

优先级为24的控制台派遣线程已经进入了运行状态,在中断返回后,就可以开

始执行了。刷新“就绪线程队列”窗口,可以看到线程调度函数已经将控制台派

遣线程移出了就绪队列。

通过以上的调试过程,我观察到了基于优先级的抢先式调度算法中高优先级

线程抢占处理器的完成过程和源代码实现。

在每个线程拥有优先级和时间配额后,通常线程先在许多等待函数的调用中

进入等待状态,进入等待状态线程的时间配额不会被重置,而是在等待事件出现

时,线程的时间配额被减1相当于1/3个时钟间隔;如果线程的优先级大于等于

14在等待事件出现时,线程的优先级被重置。可能在这两种情况下出现抢先的

情况:一个是高优先级线程的等待完

文档评论(0)

188****8709 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档