您好,欢迎来到99网。
搜索
您的当前位置:首页操作系统进程调度算法模拟实验报告

操作系统进程调度算法模拟实验报告

来源:99网

华北科技学院计算机系综合性实验

实验报告

课程名称操作系统实验学期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;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;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;i

cout<

}cout<

"<

"<<(float)(pro[i].TIME-pro[i].REACH)/server[i]<

}cout<<"平均周转时间为:"<<(float)sum/N<

te_tcolor(15);

五、实验结果

1.执行结果

2.结果分析

六、实验总结

操作系统是计算机系统中必不可少的系统软件。它是计算机系统

中各种资源的管理者和各种活动的组织者、指挥者。操作系统采用时间片法调度进程,使系统资源得到充分的利用,用户也可以花更少的时间完成更多的工作,这次模拟系统调度进程,让我们明白了系统时间片的调度方法和p,v原语操作情况,对操作系统理论的学习更加深一层。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务