操作系统课程设计试验报告格式Word下载.doc
《操作系统课程设计试验报告格式Word下载.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计试验报告格式Word下载.doc(49页珍藏版)》请在冰豆网上搜索。
.
..
..
指导教师评阅成绩:
XXX1:
实验项目一
项目名称:
实验目的:
实验时间:
人员分工:
实验环境:
实验环境的搭建过程、选用的操作系统、机器配置、编译器等。
实验内容:
对实践过程的详细说明,针对已经满足的实践要求,采用了何种算法或思想,对Nachos平台的哪些代码进行了什么样的修改。
实验结果:
对实践要求的满足程度,代码是否编写完成,是否调试通过,能否正常运行,本项目的要求中共满足了哪几项。
参考文献:
实验项目二
实验项目名称:
Nachos中的线程管理
实验项目目的:
1.最多能够同时存在128个用户线程
2.改变为遵循“优先级调度”的抢占式调度
参与人员及分工:
乔心轲,何赵平,康小芳完成主要代码编写;
崔蓉,张文进行程序的测试及维护。
nNachos:
NotAnotherCompletelyHeuristicOperatingSystem
nLinux
nGcc
nWindows
1.对于最多能够同时存在128个用户线程,我们在Thread.cc中声明了一个static变量numOfThreads;
具体代码如下:
staticintnumOfThreads=0;
//thecountofthethreads
在Thread的构造函数中对其值进行加1;
即每创建一个线程时,都会把numOfThreads加1;
++numOfThreads;
并在SimpleThread()中进行了如下修改,完成了最多能够同时存在128个用户线程。
staticvoid
SimpleThread(intwhich)
{
if(numOfThreads<
128){
for(inti=0;
i<
(kernel->
currentThread->
Time())-(kernel->
executeTime)+2;
i++){
cout<
<
"
***thread"
<
which<
"
looped"
kernel->
executeTime<
times.\n"
;
cout<
priority"
Priority()<
\n"
kernel->
Yield();
}
}
else{
if(count==0)
printf("
Thenumberofthethreadscannotbelargerthan128!
);
kernel->
count++;
}
}
为了实现遵循“优先级调度”的抢占式调度策略,首先为Thread增加了三个变量:
executeTime;
time;
priority
在Thread.h中对它们的声明:
public:
Thread(char*debugName);
//initializeaThread
~Thread();
//deallocateaThread
//NOTE--threadbeingdeleted
//mustnotberunningwhendelete
//iscalled
intexecuteTime;
//Thetimethatthisthreadhasexecuted
//basicthreadoperation
voidsetExTime(intexT);
//settheexecuteTimeofthethreadtoexT
intTime();
//returnthetimethatthethreadshouldbeserved
voidsetTime(intt);
//setthetimethatthethreadshouldbeservedtot
voidsetPriority(intpri);
//setthepriorityofthethreadtopri
intPriority();
//returnthepriorityofthethread
private:
//someoftheprivatedataforthisclassislistedabove
inttime;
//thetimethatthethreadshouldbeservedintpriority;
//thepriorityofeachthread
在Thread.cc中的实现:
Thread:
:
Thread(char*threadName)
name=threadName;
stackTop=NULL;
stack=NULL;
status=JUST_CREATED;
for(inti=0;
i<
MachineStateSize;
i++){
machineState[i]=NULL;
//notstrictlynecessary,since
//newthreadignorescontents
//ofmachineregisters
}
space=NULL;
executeTime=1;
setPriority(0);
setTime
(2);
在Fork()中对numOfThreads进行了+1操作:
void
Fork(VoidFunctionPtrfunc,void*arg)
{
Interrupt*interrupt=kernel->
interrupt;
Scheduler*scheduler=kernel->
scheduler;
IntStatusoldLevel;
DEBUG(dbgThread,"
Forkingthread:
name<
f(a):
(int)func<
arg);
StackAllocate(func,arg);
oldLevel=interrupt->
SetLevel(IntOff);
scheduler->
ReadyToRun(this);
//ReadyToRunassumesthatinterrupts
//aredisabled!
(void)interrupt->
SetLevel(oldLevel);
++numOfThreads;
}
//---------------------------------------------------------------------
//Thread:
setExTime
//settheexecuteTimeofthethreadtoexT
void
setExTime(intexT){
executeTime=exT;
setPriority
//setthepriorityofthethreadtopri
setPriority(intpri)
priority=pri;
Priority
//returnthepriorityofthethread
int
Priority(){
returnpriority;
//setthetimeofthethreadtot