网站大量收购闲置独家精品文档,联系QQ:2885784924

Nachos实验9设计并实现具有优先级的线程调度策略分析.doc

Nachos实验9设计并实现具有优先级的线程调度策略分析.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
word格式精心整理版 范文范例 学习指导 实验目的 Nachos系统采用基本的先来先服务的线程调度策略,本次试验的目的: 熟悉Nachos原有的线程调度策略 设计并实现具有优先级的线程调度策略 实验环境 linux操作系统,Nachos操作系统 实验分析 将原有的先来先服务的线程调度策略改为按优先级调度的策略,那么每个线程需添加属性priority,决定当前线程的优先级高低。定义优先级取值范围为1-7,其中1为最高,7为最低。那么在当前线程被阻塞的时候,调度函数通过判断当前就绪队列中的线程中谁的优先级最高,就调度谁,使其运行。 更为优化的办法是,每次将一个线程插入的就绪队列中时,就按照线程的优先级顺序插入,让List中的等待时间片的线程依照优先级从高到低排好序,那么每次查询下一要执行的线程的时候,无需再遍历List,直接从头指针上截取即可,如此插入和移除的平均时间将节省一半。 关键源代码及注释 threadtest.cc 改写原有的测试函数 //---------------------------------------------------------------------- // ThreadTest //@Lizhen 11/16/09 ??? 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 //---------------------------------------------------------------------- Thread::Thread(char* threadName, int p) { if(p1) priority = 1; else if(p7) priority = 7; else priority = p; ??? name = threadName; ??? stackTop = NULL; ??? stack = NULL; ??? status = JUST_CREATED; #ifdef USER_PROGRAM ??? space = NULL; #endif } //-----------------------------------------------------------------

文档评论(0)

文档分享 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档