共6页
华北科技学院计算机系综合性实验
实验报告
课程名称操作系统实验学期2024至2024学年第一学期学生所在院部计算机学院年级2024专业班级学生姓名学号
任课教师
实验成绩
计算机系制
一、实验目的
通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。
二、实验要求
编写程序实现对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;i cout< cout< cout< total+=time;for(i=0;i ma_=-100; l1=-1; l=-1; for(i=0;i if(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;i if(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;i cout< total+=time;for(i=0;i time1=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;i te_tcolor(15); cout<<"IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE"< for(i=0;i cout< }cout< "< "<<(float)(pro[i].TIME-pro[i].REACH)/server[i]< }cout<<"平均周转时间为:"<<(float)sum/N< te_tcolor(15); 五、实验结果 1.执行结果 2.结果分析 六、实验总结 操作系统是计算机系统中必不可少的系统软件。它是计算机系统 中各种资源的管理者和各种活动的组织者、指挥者。操作系统采用时间片法调度进程,使系统资源得到充分的利用,用户也可以花更少的时间完成更多的工作,这次模拟系统调度进程,让我们明白了系统时间片的调度方法和p,v原语操作情况,对操作系统理论的学习更加深一层。
举报
