淘豆网
1/5
文档分类:中学教育 > 中学实验

nachos 实验9.doc


下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

特别说明:文档预览什么样,下载就是什么样。

0/100
您的浏览器不支持进度条
更多>>该用户其他文档
下载所得到的文件列表
nachos 实验9.doc
文档介绍:
Lab9 设计并实现具有优先级的线程调度策略实验目标熟悉nachos中的线程调度策略设计并实现具有优先级的线程调度策略实验环境ubuntu操作系统 nachos-3.4 gcc-2.8.1-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 内容来自淘豆网www.taodocs.com转载请标明出处.