华北科技学院计算机系综合性实验
实验报告
课程名称操作系统实验学期2014至2015学年第一学期学生所在院部计算机学院年级2012专业班级学生姓名学号
任课教师
实验成绩
计算机系制
一、实验目的
通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。
二、实验要求
编写程序实现对3个进程的调度模拟。
三、实验方法内容
1.算法设计思路
每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。
进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。进程已占用CPU时间CPUTIME。
进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。
进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。
进程状态STATE。
队列指针NE_T,用来将PCB排成队列。
2.算法中用到的数据结构
typedefstruct{
intID;intPRIORITY;intCPUTIME;intALLTIME;intSTARTBLOCK;intBLOCKTIME;intSTATE;/0-运行1-阻塞2-就绪3-结束4-未到达intREACH;intTIME;
}PROCESS;
3.主要的常量变量
ID进程号;Time时间片长度;Total当前时刻;Sever周转时间;Reach到达时间;主要模块1、初始化模块,利用循环输入各个进程的初始状态。cout<<"请输入进程数:";cin>N;cout<<"请设置时间片长度:";cin>time;cout<<"请输入各进程初始状态:"<pro[i].CPUTIME=0;
pro[i].TIME=0;
cin>pro[i].ID>pro[i].PRIORITY>pro[i].REACH;
cin>pro[i].ALLTIME>pro[i].STARTBLOCK>pro[i].BLOCKTIME;
server[i]=pro[i].ALLTIME;
if(pro[i].REACH==0)pro[i].STATE=0;
elsepro[i].STATE=4;
2、进程调度模块,利用do{}-while()循环显示每个时间片内各个进程的状
cout<te_tcolor(12);
cout<======================"<te_tcolor(15);
cout<<"IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE"<for(i=0;icout<cout<cout<total+=time;for(i=0;ima_=-100;
l1=-1;
l=-1;
for(i=0;iif(pro[i].PRIORITY>ma_(pro[i].STATE==0||pro[i].STATE==2)){
l=i;
ma_=pro[i].PRIORITY;
if(pro[i].STATE==0)l1=i;
if(l!=-1l!=l1)pro[l].STATE=0;
if(l1!=-1)pro[l1].STATE=2;
flag=0;
for(i=0;iif(pro[i].STATE!=3)
flag=1;
break;
if(flag==0)break;
}while(1);
3、颜色模块,改变字体颜色使界面更清晰。
voidte_tcolor(intcolor)
SetConsoleTe_tAttribute(GetStdHandle
color);
四、实验代码
include"iostream.h"
include"windows.h"
/defineN5
typedefstruct{
intID;
intPRIORITY;(STD_OUTPUT_HANDLE),
intCPUTIME;intALLTIME;intSTARTBLOCK;intBLOCKTIME;intSTATE;/0-运行1-阻塞2-就绪3-结束4-未到达intREACH;intTIME;
}PROCESS;
voidte_tcolor(intcolor)
SetConsoleTe_tAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);}
voidmain(){
inti,time,ma_,l,l1,time1,flag=0,total=0,N,server[10],sum=0;PROCESSpro[10];te_tcolor(13);cout<<"注意:本程序中状态代表如下"<te_tcolor(15);cout<<"请输入进程数:";cin>N;cout<<"请设置时间片长度:";cin>time;cout<<"请输入各进程初始状态:"<for(i=0;i}do{cin>pro[i].ID>pro[i].PRIORITY>pro[i].REACH;cin>pro[i].ALLTIME>pro[i].STARTBLOCK>pro[i].BLOCKTIME;server[i]=pro[i].ALLTIME;if(pro[i].REACH==0)pro[i].STATE=0;elsepro[i].STATE=4;cout<======================"<te_tcolor(15);cout<<"IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE"<for(i=0;icout<total+=time;for(i=0;itime1=pro[i].ALLTIME;if(pro[i].STATE==0){}if(pro[i].STATE==1){}if(pro[i].STATE==2){/pro[i].CPUTIME+=time;pro[i].PRIORITY++;pro[i].BLOCKTIME--;if(pro[i].BLOCKTIME==0)pro[i].STATE=2;pro[i].TIME=total;if(pro[i].ALLTIME<=time){}else{}/pro[i].CPUTIME+=time;pro[i].ALLTIME-=time;pro[i].STARTBLOCK--;if(pro[i].STARTBLOCK==0){}pro[i].PRIORITY-=3;pro[i].TIME=total;pro[i].STATE=1;pro[i].BLOCKTIME=time1;pro[i].STARTBLOCK=time1;/pro[i].CPUTIME+=time1;pro[i].ALLTIME=0;pro[i].STATE=3;pro[i].TIME=total-time+time1;
}}pro[i].TIME=total;ma_=-100;l1=-1;l=-1;for(i=0;ima_(pro[i].STATE==0||pro[i].STATE==2)){}if(pro[i].STATE==0)l1=i;l=i;ma_=pro[i].PRIORITY;}while(1);cout<te_tcolor(15);
cout<<"IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE"<for(i=0;icout<}cout<"<"<<(float)(pro[i].TIME-pro[i].REACH)/server[i]<}cout<<"平均周转时间为:"<<(float)sum/N<te_tcolor(15);
五、实验结果
1.执行结果
2.结果分析
六、实验总结
操作系统是计算机系统中必不可少的系统软件。它是计算机系统
中各种资源的管理者和各种活动的组织者、指挥者。操作系统采用时间片法调度进程,使系统资源得到充分的利用,用户也可以花更少的时间完成更多的工作,这次模拟系统调度进程,让我们明白了系统时间片的调度方法和p,v原语操作情况,对操作系统理论的学习更加深一层。