动态优先权进程调度算法模拟实验报告.docx

上传人:b****6 文档编号:9144349 上传时间:2023-02-03 格式:DOCX 页数:10 大小:17.38KB
下载 相关 举报
动态优先权进程调度算法模拟实验报告.docx_第1页
第1页 / 共10页
动态优先权进程调度算法模拟实验报告.docx_第2页
第2页 / 共10页
动态优先权进程调度算法模拟实验报告.docx_第3页
第3页 / 共10页
动态优先权进程调度算法模拟实验报告.docx_第4页
第4页 / 共10页
动态优先权进程调度算法模拟实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

动态优先权进程调度算法模拟实验报告.docx

《动态优先权进程调度算法模拟实验报告.docx》由会员分享,可在线阅读,更多相关《动态优先权进程调度算法模拟实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

动态优先权进程调度算法模拟实验报告.docx

动态优先权进程调度算法模拟实验报告

 

华北电力大学

实验报告

 

实验名称动态优先权进程调度算法模拟

课程名称计算机操作系统

 

专业班级:

学生姓名:

学号:

成绩:

指导教师:

实验日期:

一﹑实验目的:

通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。

二﹑实验内容:

(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。

(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:

进程标识数ID。

进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。

进程已占用CPU时间CPUTIME。

进程还需占用的CPU时间ALLTIME。

当进程运行完毕时,ALLTIME变为0。

进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。

进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。

进程状态STATE。

队列指针NEXT,用来将PCB排成队列。

(3)优先数改变的原则:

进程在就绪队列中呆一个时间片,优先数增加1。

进程每运行一个时间片,优先数减3。

(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。

(5)分析程序运行的结果,谈一下自己的认识。

三、设计思路和方法

通过VC++程序模拟动态优先权程序调度算法,主要思路和方法就是,通过结构体模拟计算机的控制模组,构造一个PCB结构体即进程控制块结构体,用来记录当前进程的的相关状态信息,包括进程标识符、处理机状态、进程调度信息、进程控制信息。

并通过C++语言模拟计算机的相关调度算法,对构建的PCB进程进行模拟调度和运行,从而实现用计算机对进程的调度过程进行过程仿真。

四、数据结构和算法

数据结构:

1.包含PCB信息的结构体

2.包含进程信息的顺序表结构

算法:

优先权=(等待时间+要求服务时间)/要求服务时间

Rp=(等待时间+要求服务时间)/要求服务时间=相应时间/要求服务时间

系统将所有就绪队列按优先级高低排成一个队列,每次调度时,将CPU分配给优先级最高的进程,并令其执行一个时间片,而后中断,寻找并运行下一个优先级最高的进程。

而所有进程的优先权在随进程的推进或随其等待时间的增加而增加,而被调度之后的程序则降低一定的优先级,从而使所有进程都有运行的机会,从而保证系统能在给定的时间内响应所有用户的请求。

五﹑程序代码和输出

1程序代码如下

#include""

#include""

PUTIME=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;

}

do{

cout<

"<

textcolor(12);

cout<

textcolor(15);

cout<<"IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE"<

for(i=0;i

cout<

cout<

cout<

}

total+=time;

for(i=0;i

if(pro[i].STATE==4&&pro[i].REACH

pro[i].STATE=1;

}

}

for(i=0;i

time1=pro[i].ALLTIME;

if(pro[i].STATE==0){

if(pro[i].ALLTIME<=time){

PUTIME+=time1;

pro[i].ALLTIME=0;

pro[i].STATE=3;

pro[i].TIME=total-time+time1;

}

else{

PUTIME+=time;

pro[i].ALLTIME-=time;

pro[i].STARTBLOCK--;

if(pro[i].STARTBLOCK==0){

pro[i].STATE=1;

pro[i].BLOCKTIME=time1;

pro[i].STARTBLOCK=time1;

}

pro[i].PRIORITY-=3;

pro[i].TIME=total;

}

}

if(pro[i].STATE==1){

pro[i].BLOCKTIME--;

if(pro[i].BLOCKTIME==0)pro[i].STATE=2;

pro[i].TIME=total;

}

if(pro[i].STATE==2){

PUTIME+=time;

pro[i].PRIORITY++;

pro[i].TIME=total;

}

}

max=-100;

l1=-1;

l=-1;

for(i=0;i

if(pro[i].PRIORITY>max&&(pro[i].STATE==0||pro[i].STATE==2)){

l=i;

max=pro[i].PRIORITY;

}

if(pro[i].STATE==0)l1=i;

}

if(l!

=-1&&l!

=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);

cout<

"<

textcolor(12);

cout<

textcolor(15);

cout<<"IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE"<

for(i=0;i

cout<

cout<

cout<

}

cout<

"<

cout<<"进程号到达时间结束时间周转时间带权周转时间"<

textcolor(10);

for(i=0;i

cout<<""<

sum+=pro[i].TIME-pro[i].REACH;

}

cout<<"平均周转时间为:

"<<(float)sum/N<

textcolor(15);

}

2输入

注意:

本程序中状态代表如下

0-运行1-阻塞2-就绪3-结束4-未到达

请输入进程数:

5

请设置时间片长度:

4

请输入各进程初始状态:

IDPRIORITYREACHALLTIMESTARTBLOCKBLOCKTIME

123014

264031

203452

212434

152453

3输出结果

当前时刻为:

0

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1200144

2600314

2004524

2104344

1504534

当前时刻为:

4

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1200131

2600314

2004511

2104331

1504521

当前时刻为:

8

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1200121

2700300

2104502

2104321

1504511

当前时刻为:

12

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1200111

2700303

2204502

2104311

1604500

当前时刻为:

16

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1300100

2700303

2304502

2204302

1600503

当前时刻为:

20

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1300103

2700303

2404500

2304302

1600503

当前时刻为:

24

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1300103

2700303

2400503

2404300

1600503

当前时刻:

28

========================各进程状态为======================

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

1300103

2700303

2400503

2400303

1600503

各进程运行结束!

进程号到达时间结束时间周转时间带权周转时间

1316131.#INF

24841.#INF

232421

222826

121614

平均周转时间为:

六﹑遇到问题和体会

本次试验感觉难度比较大,有很多生疏的指令。

但在老师和同学的帮助下都解决了。

总体上还是对进程概念和进程调度过程有了一个更深的理解。

在这次试验中也暴露出自己不少的缺点,希望以后试验中可以改正!

本文利用C语言对动态优先权的进程调度算法进行了设计和模拟实现。

程序可实现动态的进行各个进程相关信息的录入,如CPUTIME、ALLTIME、STARTBLOCK、BLOCKTIME等信息。

并充分考虑了进程在执行过程中可能发生的多种情况,更好的体现了进程的就绪态、执行态、阻塞态三者之间的关系以及相互的转换。

程序的运行过程清晰的体现了动态优先权的调度算法的执行过程,有利于加深对算法的理解和掌握。

由于抢占式调度算法与硬件密切相关,由软件实现非常困难,所以本程序实现的是非抢占式的动态优先权进程调度算法。

抢占式的动态优先权进程调度算法的模拟实现有待于进一步研究。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1