操作系统课程设计报告。
文件组织:实验1位于nachos-3.4.1项目。
实验2位于nachos-3.4.2项目。
实验3位于nachos-3.4.3项目。
实验4位于nachos-3.4.4项目。
以上**位于code文件夹。
输出位于output文件夹。
在nachos系统中实现按优先数调度线程。
研究各种调度策略算法的实现,分析各种调度算法的性能。
从nachos系统的基本内核。/threads/文件中可以看出nachos系统的基本内核实现了先进先出的调度策略。
调度类scheduler管理着一个就绪队列list。它的成员函数readytorun (current thread)将当前线程挂入该队列的队尾:
scheduler::readytorun (thread *thread)
debug('t', putting thread %s on ready list.", thread->getname())
thread->setstatus(ready);
readylist->append((void *)thread);
它的另一成员函数findnexttorun()则从list队首摘出一个就绪线程准备运行:
thread *
scheduler::findnexttorun ()
return (thread *)readylist->remove();
这从基本内核执行的输出中可以得到验证:
** thread 0 looped 0 times
** thread 1 looped 0 times
** thread 0 looped 1 times
** thread 1 looped 1 times
** thread 0 looped 2 times
** thread 1 looped 2 times
** thread 0 looped 3 times
** thread 1 looped 4 times
采用静态优先数先给定一个线程的基本优先级,该优先数可以在创建一个线程的时候指定,范围在0到100之间,数值越小优先级越低。
动态优先数计算方法为:
初始值 = 静态优先数。
执行线程每tick + 10
就绪线程每tick - 1
唤醒线程 - 5
当执行线程动态优先数为0时重新计算就绪队列动态优先数:
按降序调整就绪队列优先级,从就绪队列首选择新的执行线程。
1、 将thread目录下的所有文件拷贝到lab2中,并修改其文件。
incpath +=i../lab2 -i../machine
2、 在thread类中增加一个变量用于记录优先级并增加相应的构造函数与访问函数。
void setpriority(int p)
void increpriority(int in)else
int getpriority()
private:
int priority;
thread::thread(char* threadname,int p)
name = threadname;
stacktop = null;
stack = null;
status = just_created;
priority = 0;
priority = p;
#ifdef user_program
space = null;
#endif
3、 在scheduler类中增加一个方法用于为整个就绪队列中的所有线程改变优先级。
void threadlowpri(_int arg)
scheduler::addall()
5、 更改相应的加入就绪队列与从就绪队列中取一个线程运行的方法s
voidscheduler::readytorun (thread *thread)
debug('t', putting thread %s on ready list.", thread->getname())
thread->setstatus(ready);
readylist->sortedinsert((void *)thread,thread->getpriority())
/ scheduler::findnexttorun
/ return the next thread to be scheduled onto the cpu.
/ if there are no ready threads, return null.
/ side effect:
/ thread is removed from the ready list.
thread *
scheduler::findnexttorun ()
thread* thread = thread *)readylist->remove();
if(thread)
return thread;
6、 修改thread::yield()方法,使得在选取下一个线程运行的时候包括当前线程。
voidthread::yield ()
thread *nextthread;
intstatus oldlevel = interrupt->setlevel(intoff);
assert(this ==currentthread);
debug('t', yielding thread \"s\"", getname())
scheduler->readytorun(this);
nextthread = scheduler->findnexttorun();
if (nextthread !=null)
(void) interrupt->setlevel(oldlevel);
7、 修改测试类。
void******thread(_int which)
int num;
for (num = 0; num < 5; num++)
printf("thread %d exitn",(int) which);
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....