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