设计并实现具有优先级的线程调度策略.docVIP

设计并实现具有优先级的线程调度策略.doc

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

Nachos 实验9 设计并实现具有优先级的线程调度策略 实验目的 Nachos系统采用基本的先来先服务的线程调度策略,本次试验的目的: 熟悉Nachos原有的线程调度策略 设计并实现具有优先级的线程调度策略 实验环境 linux操作系统,Nachos操作系统 实验分析 将原有的先来先服务的线程调度策略改为按优先级调度的策略,那么每个线程需添加属性priority,决定当前线程的优先级高低。定义 优先级取值范围为1-7,其中1为最高,7为最低。那么在当前线程被阻塞的时候,调度函数通过判断当前就绪队列中的线程中谁的优先级最高,就调度谁,使其 运行。 更为优化的办法是,每次将一个线程插入的就绪队列中时,就按照线程的优先级顺序插入,让List中的等待时间片的线程依照优先级从高到低排好序,那么每次查询下一要执行的线程的时候,无需再遍历List,直接从头指针上截取即可,如此插入和移除的平均时间将节省一半。 关键源代码及注释 threadtest.cc 改写原有的测试函数 //---------------------------------------------------------------------- // ThreadTest //@Lizhen 11/16/09 // Set up a few threads with priority keys, by forking a thread // to call original SimpleThread to see the thread choosed by priority. // Priority key must be choosen between 1 and 7. // The lowest is 7 and highest is 1. //---------------------------------------------------------------------- void ThreadTest() { ??? DEBUG(t, Entering SimpleTest); ??? Thread *t = new Thread(1,5);//线程1,优先级为5* Thread *t2 = new Thread(2,1); Thread *t3 = new Thread(3,3); ??? t-Fork(SimpleThread, 1); t2-Fork(SimpleThread, 2); t3-Fork(SimpleThread, 3); } *优先级取值范围:1-7,1为最高,7为最低。 thread.h和thread.cc 为了实现根据线程thread按照优先级进行调度,在Thread类中增加参数priority,优先级取值范围为1至7,1为最高,7为最低。 因为整个系统中必然会有许多地方都使用了Thread,要将这所有的地方找出来并增加线程优先级似乎是不现实的,更改后系统的正确性和稳定性也是受质疑的,为了尽最大限度地不改动源代码,不删除原有的构造函数,改写为不给优先级赋值时默认优先级为7。 .h public: ??? Thread(char* debugName, int priority=7);// initialize a Thread ??????//@LiZhen 11/11/09 ?????? //If do not initialize the priority, ?????? //give the lowest priority to it. ?????? //Priority rage from 1 to 7. ??? void Yield(); ??? // Relinquish the CPU if any ?????? // other thread is runnable ??????//@LiZhen 11/11/09 .c //---------------------------------------------------------------------- // Thread::Thread // Initialize a thread control block, so that we can then call // Thread::Fork. // // threadName is an arbitrary string, useful for debugging. // // @LiZhen 11/11/09 // modified by LiZhen at Nov 11, 2009 //---------------------------------------------

文档评论(0)

xjj2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档