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