山大操作系统课程设计报告(全套)(6)
计算机科学与技术学院实验报告:9
实验题目:设计并实现具有优先级的线程调度策略 日期:2010-11-13 Email: 实验目的:
Nachos系统采用基本的FCFS的线程调度策略,修改成为具有优先级的线程调度策略
硬件环境:
软件环境:
linux操作系统,Nachos操作系统
实验步骤:
1.修改Thread类的构造函数,加入优先级priority属性,并且加入getPrioty方法。以便在线程的 等待队列中找到优先级最高的线程。其中,线程优先级的范围从1到7,默认为7,即最低优先级。 修改代码如下:(thread.cc,thread.h) class Thread {
…………………………………… public:
Thread(char* debugName, int priority=7);// initialize a Thread ………………………………………………… int getPriority(){return this->priority; }
Thread::Thread(char* threadName, int p) {
if(p<1) priority = 1;
else if(p>7) priority = 7; else priority = p; name = threadName; stackTop = NULL; stack = NULL;
status = JUST_CREATED; #ifdef USER_PROGRAM space = NULL; #endif }
2,首先,了解Nachos系统原来的线程调度方式。通过读threadtest.cc,thread.cc,scheduler.cc文件 中的内容了解线程调度的方式。
首先,修改threadtest.cc 文件中的ThreadTest方法,创建有优先级的Thread,代码如下:
然后,从Thread类中找到Fork方法,代码如下:
这说明ThreadTest方法的目的是,实例化新的线程,调用Fork方法,也就是让新产生的线程去执行SimpleThread方法,并且把 当前执行的线程加入到等待队列。
从SimpleThread的定义中可以知道,新生产的线程就是打印一条信息然后去执行Yield();
通过查看yield,可知,先从等待队列中找到一个线程保留在nextThread中,并将当前线程加到等待队列,然后使nextThread运行 void
Thread::Yield () {
Thread *nextThread;
IntStatus oldLevel = interrupt->SetLevel(IntOff);
ASSERT(this == currentThread);
DEBUG('t', \
nextThread = scheduler->FindNextToRun(); if (nextThread != NULL) { scheduler->ReadyToRun(this); scheduler->Run(nextThread); }
(void) interrupt->SetLevel(oldLevel); }
3, 为了实现按优先级调度,需要按优先级选择等待队列中的,即状态为ready的线程,因而,在线程插入,移除等待队列的时候使用List类中提供好的SortedInsert(void *item, int sortKey) SortedRemove(int *keyPtr)
方法,而不是原来使用的Append,Remove方法;
void
Scheduler::ReadyToRun (Thread *thread) {
DEBUG('t', \
thread->setStatus(READY);
readyList->SortedInsert((void *)thread, thread->getPriority()); }
//----------------------------------------------------------------------
Thread *
Scheduler::FindNextToRun () {
int p;
return (Thread *)readyList->SortedRemove(&p); }
4, 结果显示:
lu@ubuntu:~/csc2404/nachos-3.4/code/threadsWithPrioty$ ./nachos ******* thread 2 looped 0 times ******* thread 4 looped 0 times ******* thread 2 looped 1 times ******* thread 2 looped 2 times ******* thread 4 looped 1 times ******* thread 2 looped 3 times ******* thread 4 looped 2 times ******* thread 2 looped 4 times ******* thread 4 looped 3 times ******* thread 4 looped 4 times ******* thread 5 looped 0 times ******* thread 5 looped 1 times ******* thread 5 looped 2 times ******* thread 3 looped 0 times ******* thread 5 looped 3 times ******* thread 3 looped 1 times ******* thread 5 looped 4 times ******* thread 3 looped 2 times ******* thread 1 looped 0 times ******* thread 3 looped 3 times ******* thread 1 looped 1 times ******* thread 3 looped 4 times ******* thread 1 looped 2 times ******* thread 1 looped 3 times ******* thread 1 looped 4 times
No threads ready or runnable, and no pending interrupts. Assuming the program completed. Machine halting!
Ticks: total 400, idle 10, system 390, user 0 Disk I/O: reads 0, writes 0 Console I/O: reads 0, writes 0 Paging: faults 0
Network I/O: packets received 0, sent 0
Cleaning up...
5, 结果分析:
可以看出,线程执行的顺序不是在ThreadTest中的生成Thread(1,2,3,4,5)的顺序,而是按照优先级的顺序 调度的。首先从等待队列中找一个优先级最高的线程,然后把当前运行的线程加入到等待队列中,然后再运行
(本次实验所在所在位置:csc2404/nachos-3.4/code/threadsWithPrioty) 结论分析与体会:
通过这个实验,为了实现线程优先级的调度,细致分析了Thread目录下的各个文件的内容,尤其是thread.cc, Scheduler.cc,文件中对于线程的状态,以及调度函数的实现等问题上面有了更深一步的了解。从而,知道如何 修改可以实现线程的优先级调度问题,也就是管理一个SortedList,其内容是状态为Ready的线程。 由概念到实践,了解了简单的线程调度的实现。
返回
…… 此处隐藏:1436字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




