下载此文档

nachos 实验9.doc


文档分类:中学教育 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
Lab9 设计并实现具有优先级的线程调度策略实验目标熟悉nachos中的线程调度策略设计并实现具有优先级的线程调度策略实验环境ubuntu操作系统 nachos- gcc--mips编译器关键源代码及注释通过查看nachos源代码的Thread,List和Scheduler类,我们发现nachos系统中是采用非抢占式的FCFS线程调度策略的,线程一旦占用了CPU,就会一直运行到线程结束或被阻塞。thread目录下的list类定义就绪队列的数据结构,所有的链表操作都可以通过里面定义的函数来操作。其中的SortedInsert函数,每当插入一个item时,就会根据其"sortKey”大小把item插入到合适的位置,最后list中的item是按照sortKey的大小升序排列的。voidList::SortedInsert(void*item,intsortKey)//这是实现优先级调度策略的关键{ListElement*element=newListElement(item,sortKey);ListElement*ptr; //keeptrackif(IsEmpty()){ //iflistisempty,putfirst=element;last=element;}elseif(sortKey<first->key){ //itemgoesonfrontoflist element->next=first; first=element;}else{ //lookforfirsteltinlistbiggerthanitemfor(ptr=first;ptr->next!=NULL;ptr=ptr->next){if(sortKey<ptr->next->key){ element->next=ptr->next; ptr->next=element; return; } } last->next=element; //itemgoesatendoflist last=element;}}在:Thread的Yield方法和scheduler中可以看到,当一个线程要插入到就绪队列上时,只是将该线程加到了队尾,当一个线程被阻塞或运行结束时,就让绪队列中的第一个线程运行,这样的调度只能是FCFS调度。voidThread::Yield(){Thread*nextThread;IntStatusoldLevel=interrupt->SetLevel(IntOff);ASSERT(this==currentThread);DEBUG('t',"Yieldingthread\"%s\"\n",getName());nextThread=scheduler->FindNextToRun();if(nextThread!=NULL){ scheduler->ReadyToRun(this); scheduler->Run(nextThread);}(void)interrupt->SetLevel(oldLevel);}voidScheduler::ReadyToRun(Thread*thread){DEBUG('t',"Puttingthread%sonreadylist.\n",thread->getName());thread->setStatu

nachos 实验9 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
最近更新