《操作系统课程设计》报告范本Word格式文档下载.docx
《《操作系统课程设计》报告范本Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《操作系统课程设计》报告范本Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
重复以上过程,直到所要进程都完成为止
四、程序流程图
是
五、程序源代码
#include"stdafx.h"
#include<
stdio.h>
#include<stdlib.h>
#include<string.h>
#include<
ctype.h>
#include<
iostream>
#include<fstream>
usingnamespacestd;
ofstreammyfile("
bb.txt",ios:
:
app||ios:
trunc);
typedefstruct node
{
charname[10];
/*进程名*/
int round;
/*进程分配的时间片*/
intcputime;
/*进程消耗的CUP时间*/
intneedtime;
/*进程需要的CUP时间*/
int count;
/*进程运行时间*/
char state;
/*进程的状态:
'
R':
运行,'
W'
:
等待,'
F'
结束*/
structnode*next;
/*指向下一个进程的指针*/
}PCB;
PCB *finish,*ready,*tail,*run;
/*指向三个队列的队首的指针,tail为就绪队列的队尾指针*/
intN;
/*定义进程的数目*/
void firstin(void)
{
if(ready!
=NULL)
{
run=ready;
ready=ready->next;
run->
state='
R'
;
run->next=NULL;
}
else
{
run=NULL;
}
}
voidprt1(chara)
ﻩcout<<
"name" <
<
"
cputime" <
"needtime"<<"
count"<
<" round"
"state"<
endl;
ﻩmyfile<
name"
;
myfile<<
"cputime";
myfile <<
needtime";
ﻩmyfile<
" count"
myfile<
round"
;
myfile<
" state"
endl;
ﻩ
}
voidprt2(chara,PCB *p)
{
ﻩcout<
p->name<
"
<p->
cputime<
<" "
p->
needtime<
"
<<p->
count<
p->round<<
"<<p->
state<
endl;
ﻩmyfile<
name<
"
myfile<<p->
cputime<<"
myfile<
needtime<<
<p->
count<<
"
myfile<
round<
";
ﻩﻩmyfile<
<p->
state<
}
voidprt(charalgo)
PCB*p;
prt1(algo);
if(run!
=NULL)
{
prt2(algo,run);
}
p=ready;
while(p!
{
prt2(algo,p);
p=p->
next;
}
p=finish;
while(p!
=NULL)
{
prt2(algo,p);
p=p->
next;
}
getchar();
void insert(PCB*q)
tail->next=q;
tail=q;
q->next=NULL;
}
voidrcreate_task(char algo)
PCB*p;
intn,time;
charna[10];
ready=NULL;
finish=NULL;
run=NULL;
cout<<
"请输入进程数目N:
";
cin>>N;
for(n=0;
n<
N;
n++)
{
p=(PCB*)malloc(sizeof(PCB));
cout<
<"
Enterthenameofprocess:
"<
cin>
>
na;
cout<<
Enterthetimeofprocess:
<endl;
cin>
time;
strcpy(p->
name,na);
p->
cputime=0;
needtime=time;
p->count=0;
state='
W'
p->
round=2;
if(ready!
=NULL)
insert(p);
}
else
p->next=ready;
ready=p;
tail=p;
run=ready;
ready=ready->next;
run->
state='
cout<
创建成功。
endl;
void chakan(charalgo)
if(run->count==run->
round)
run->count=0;
if(ready!
=NULL)
{
run->
state='W'
insert(run);
firstin();
ﻩ}
ﻩ}
prt(algo);
voidroundrun(charalgo)
while(run!
=NULL)
run->cputime=run->
cputime+1;
run->
needtime=run->
needtime-1;
count=run->count+1;
if(run->
needtime==0)
{
run->
next=finish;
finish=run;
run->
state='
run=NULL;
if(ready!
{
firstin();
}
else
if(run->
count==run->round)
run->
count=0;
if(ready!
=NULL)
{
run->state='
insert(run);
firstin();
prt(algo);
}
voidcaidan()
cout<
**************************主页************************"
endl;
cout<
*******************1.I创建若干进程*******************"
*******************2.C进程进行查看*******************"
cout<
*******************3.O进程进行调度*******************"
*******************4.H 结束 ********************"
<<
endl;
int main()
{loop1:
caidan();
charalgo;
cin>
>algo;
if(algo=='
i'||algo=='I'
)
ﻩ rcreate_task(algo);
else if(algo=='c'
||algo=='
C')
{
ﻩ chakan(algo);
ﻩelseif(algo=='o'
||algo=='
O')
ﻩroundrun(algo);
ﻩelseif(algo=='
h'
||algo=='
H')
ﻩ{
ﻩﻩgotoloop2;
ﻩ}
ﻩgotoloop1;
loop2:
ﻩmy();
ﻩreturn0;
六、运行结果
七、问题及解决方法
(1)处理器调度总是选队首进程运行。
采用动态改变优先数的办法,进程每运行一次优先数就减“1”。
由于本实习是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行
(2) 进程运行一次后,若要求运行时间〉0,则再将它加入队列(按优先数大小插入,且置队首标志);
若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。
(3)若“就绪”状态的进程队列不为空,则重复上面
(1)和
(2)的步骤,直到所有进程都成为“结束”状态。
(4) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。
(5) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
八、心得体会
操作系统是计算机系统中必不可少的系统软件。
它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。
操作系统采用时间片法调度进程,使系统资源得到充分的利用,用户也可以花更少的时间完成更多的工作,这次模拟系统调度进程,让我明白了系统时间片的调度方法,对操作系统理论的学习更加深一层。
通过这次的课设也让我充分的体会到了要真正的理解计算机操作系统的工作原理应该多上机做试验和操作,这样才能领悟的更深更好。
或许程序完成的有点粗糙但是也花了一些心里,感觉自己还时弄懂了它的实现过程,以前觉得操作系统都时些理论上的东西对于具体的实践说实话还确实没怎么弄过。
所以这次的课程设计让我学到了更多的东西。