操作系统 进程管理 报告Word文档下载推荐.docx
《操作系统 进程管理 报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统 进程管理 报告Word文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。
其中0为idle进程,用户进程为1,2,3……)
2.进程优先级priority:
idle进程为0,用户优先级大于0且随机产生,数值越大优先级越高
3.进程占用CPU的执行时间CPUT:
4.进程总共需要运行时间AllT:
用随机数生成
5.进程状态:
0—表示就绪,1—表示运行,2—表示阻塞
6.队列指针next,存放多个进程的PCB链表
(2)优先数的改变策略
1.进程在就绪队列每呆一个时间片优先数+1
2.进程每运行一次,优先数-3
(3)执行可通过循环、睡眠等多种方式模拟,阻塞和唤醒可通过捕获键盘按键来执行。
是
排放在对手,ready指向p
获取就绪队列的长度
检查并打印出正在运行的进程和等待中的进程
如果执行时间和进程所需时间相同,则释放该进程的空间,否则进程优先数减1,并且将状态改为等待
P要进程长度len不为0,就不断循环执行,直至len=0
循环比较,将p放在适当的位置
否
比较进程优先级,p优先级高
输入进程信息
开始
程序框图:
三、所用仪器、材料(设备名称、型号、规格等):
VC++6.0
4、实验方法、步骤
源程序:
#include<
stdio.h>
stdlib.h>
conio.h>
#definegetpch(type)(type*)malloc(sizeof(type))//将申请内存空间函数自定义为getpch(type)
structpcb{//定义进程控制块的结构
charname[10];
//进程名称
charstate;
//进程状态
intsuper;
//进程优先级
intneedtime;
//进程总共需要的cpu时间
intrtime;
inttijiaotime;
intstarttime;
intfinishtime;
intzztime;
intdzztime;
structpcb*link;
//进程指向下一个进程的指针
}*ready=NULL,*p;
//ready表示指向就绪队列中首元素的指针,初始化为NULL,p用来存放当前刚输入的PCB
typedefstructpcbPCB;
//自定义PCB结构体
intpzztime=0;
intpdzztime=0;
intnum;
inttime=10000;
voidsort()
{
PCB*first,*second;
intinsert=0;
//insert用于记录当前PCBp是否插在就绪队列的尾部
if((ready==NULL)||((p->
super)>
(ready->
super)))//如果就绪队列为空或当前process的super比就绪队列中的第一各元素大,则:
{//注:
就绪队列中的元素按优先级从高到低排的
p->
link=ready;
//把P放在队首,并且让ready指向p
ready=p;
}
else//就绪队列不为空,p的super不比首元素大,那就循环进行比较
{
first=ready;
second=first->
link;
//first和second都是两个用于循环的变量
while(second!
=NULL)//一直比较到就绪队列的末尾
if((p->
(second->
super))//当前进程的优先级大于原就绪队列中second所指向的元素时,就把p插入到first和second所指向的元素之间
link=second;
first->
link=p;
second=NULL;
insert=1;
//插入队列记录符号
else
first=first->
//两个循环变量继续后移,为下一轮循环做准备
second=second->
if(insert==0)first->
//循环到最后了,如果insert仍为0的话,就把P放在队尾
}
//*******************************PCB输入模块*********************************************
voidinput()
inti;
printf("
\n请输入进程数:
"
);
scanf("
%d"
&
num);
for(i=0;
i<
num;
i++)
\n第%d个进程:
\n"
i);
p=getpch(structpcb);
\n进程名:
%s"
p->
name);
\n优先数:
p->
super);
\n运行时间:
needtime);
\n提交时间:
tijiaotime);
rtime=0;
state='
w'
;
//所有进程的初始状态都是等待状态
link=NULL;
sort();
//*******************************PCB就绪队列中元素计数模块********************************
intspace()//计算就绪队列中PCB的总数
intl=0;
PCB*pr=ready;
//获取就绪队列的头指针ready
while(pr!
=NULL)//循环计数
l++;
pr=pr->
return(l);
//*******************************打印PCB信息模块*****************************************
voiddisp(PCB*pr)
\nqname\tstate\tpriority\n"
time=pr->
tijiaotime>
time?
pr->
tijiaotime:
time;
pr->
starttime=time;
time+=pr->
needtime;
R'
finishtime=time;
zztime=pr->
finishtime-pr->
tijiaotime;
dzztime=pr->
zztime/pr->
pzztime=pr->
zztime+pzztime;
pdzztime=pr->
dzztime+pdzztime;
printf("
|%s\t"
pr->
|%c\t"
state);
|%d\t\t\n"
作业名提交时间开始时间所需时间结束时间周转时间带权周转时间\n"
%s%d%d%d%d%d%d"
name,pr->
tijiaotime,pr->
starttime,pr->
needtime,pr->
finishtime,pr->
zztime,pr->
dzztime);
//****************************检查当前有哪些进程在运行,那些处于wait状态*******************************
voidcheck()
PCB*pr;
\nThecurrentrunningprocessis:
%s\n"
disp(p);
pr=ready;
\nThestateoftheWaitingList:
=NULL)//打印其它等待的进程
disp(pr);
//*******************************打印已经完成的进程并释放内存空间**********************************
voiddestroy()
\nAfterthisdispatch,theprocess[%s]willfinish.\n"
free(p);
//*******************************本程序实行的是动态优先级调度************************************
//进程运行一段时间(这里设为5)后将其优先级减一,插入后续队列
voidrunning()
(p->
rtime)+=5;
if(p->
rtime==p->
needtime)//如果执行时间和该进程所需时间相等则撤销该进程
destroy();
else//未执行完毕则优先级减一并将状态改为w
super)--;
//加入队列并重新排序
//*******************************主函数模块*************************************************
voidmain()//主函数
intlen,h=0;
//h表示进程调度的次数,每调度一次,h++
charch;
input();
//输入程序
len=space();
//获取就绪队列长度
while((len!
=0)&
&
(ready!
=NULL))
ch=getchar();
h++;
\nTheexecutenumber:
%d\n"
h);
p=ready;
//以下三行是将P从就绪队列的队首摘除
ready=p->
//将P的状态改为R
check();
running();
pzztime=pzztime/num;
pdzztime=pdzztime/num;
\n平均周转时间,平均带权周转时间\n"
%d,%d"
pzztime,pdzztime);
\nProcessAnyKeytoContinue..."
\n\nAlltheprocesseshasfinishedrunning"
//所有进程已经完成
5、实验过程原始记录
1.输入进程数
2.输入第0个进程
3.3输入第1个进程
4.输入第2个进程
5.运行结果
6、实验总结:
操作系统是计算机系统中必不可少的系统软件,它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。
操作系统采用时间片法调度进程,是系统资源得到充分利用,用户可以花更少的时间完成过多的工作。
通过这次实验,将以前只会做题的过程转化外程序执行的过程,模拟了在单处理机情况下的处理及调度问题,体会到了程序执行的过程,加深了对进程调度的理解。