操作系统实验5 进程调度模拟程序设计.docx

上传人:b****8 文档编号:29226345 上传时间:2023-07-21 格式:DOCX 页数:13 大小:113.92KB
下载 相关 举报
操作系统实验5 进程调度模拟程序设计.docx_第1页
第1页 / 共13页
操作系统实验5 进程调度模拟程序设计.docx_第2页
第2页 / 共13页
操作系统实验5 进程调度模拟程序设计.docx_第3页
第3页 / 共13页
操作系统实验5 进程调度模拟程序设计.docx_第4页
第4页 / 共13页
操作系统实验5 进程调度模拟程序设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

操作系统实验5 进程调度模拟程序设计.docx

《操作系统实验5 进程调度模拟程序设计.docx》由会员分享,可在线阅读,更多相关《操作系统实验5 进程调度模拟程序设计.docx(13页珍藏版)》请在冰豆网上搜索。

操作系统实验5 进程调度模拟程序设计.docx

操作系统实验5进程调度模拟程序设计

实验报告书

课程名:

《操作系统原理实验》

题目:

实验5进程调度模拟实验

实验类别:

【设计】

班级:

学号:

姓名:

 

一、实验内容

进程调度算法:

采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)或者时间片轮转法。

每个进程有一个进程控制块(PCB)表示。

进程控制块可以包含如下信息:

进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

等待I/O的时间以时间片为单位进行计算,可随机产生,也可事先指定。

每个进程的状态可以是就绪R(Ready)、运行R(Run)、等待(Wait)或完成F(Finish)四种状态之一。

就绪进程获得CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、等待进程以及各个进程的PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止。

用C或C++

二、实验目的与要求

在采用多道程序设计的设计中的系统中,往往有若干个进程同时处于就绪状态。

当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器

本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度工作。

三、实验环境

Visual+C++6.0

四、实验步骤

1、实验准备知识

处理器调度总是选对首进程运行。

采用动态改变优先数的办法,进程每运行一次优先数就减“1”。

由于本次实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:

优先数—1

要求运行时间—1

来模拟进程的一次运行。

进程运行一次后,若要求运行时间≠0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间≠0,则把它的状态修改成“结束”,且结束队列。

若“就绪”状态的进程队列不为空,则重复上面的步骤,直到所有都成为“结束”状态。

2、实验任务分析流程图

3、源程序

#include

#include

#include

#defineP_NUM3//进程数

#defineP_TIME1//时间片长度

#defineMIN-9999

enumstate//进程状态

{

ready,//就绪

run,//执行

wait,//阻塞

finish//完成

};

classPcb

{

public:

staticvoidprint(){};

~Pcb();

protected:

char*name;//进程名

intallTime;//需要运行时间

intcpuTime;//已用cpu时间

stateprocess;//进程状态

};

classHPcb:

publicPcb

{

public:

staticvoidprint();

staticvoidhighS();

staticintgetFirst();

private:

intfirstNum;

};

HPcbhpcb[P_NUM];

classFPcb:

publicPcb

{

public:

staticvoidprint();

staticvoidfcfs();

private:

intcomeTime;

};

FPcbfpcb[P_NUM];

intHPcb:

:

getFirst()//得到优先级最高的进程

{

intk=0;

for(inti=1;i

if(hpcb[k].firstNum

k=i;

returnk;

}

voidHPcb:

:

highS()//最高优先数优先的调度算法

{

intii,f,i=0;

for(;i

{

char*ch;

ch=newchar[1];

cout<<"请输入第"<

"<

//cout<<"请输入第"<

"<

cin>>ch;

hpcb[i].name=newchar[strlen(ch)+1];

strcpy(hpcb[i].name,ch);

cin>>hpcb[i].firstNum>>hpcb[i].allTime;

hpcb[i].cpuTime=0;

hpcb[i].process=ready;

}

do

{

f=getFirst();

hpcb[f].cpuTime+=P_TIME;

hpcb[f].firstNum--;

hpcb[f].process=run;

if(hpcb[f].cpuTime>=hpcb[f].allTime)//该进程执行完成

{

hpcb[f].firstNum=MIN;

hpcb[f].process=finish;

hpcb[f].cpuTime=hpcb[f].allTime;//防止所用时间超过总的时间

system("cls");

print();

Sleep(1000);

}

else

{

hpcb[f].firstNum++;//为了输出改变前的相关信息

system("cls");

print();

Sleep(1000);

hpcb[f].firstNum--;

hpcb[f].process=ready;

}

for(ii=0;ii

if(hpcb[ii].firstNum!

=MIN)

break;

}while(ii

cout<<"所有进程已运行完成!

"<

}

Pcb:

:

~Pcb()

{

delete[]name;

}

voidHPcb:

:

print()

{

cout<<"*********************************************************************"<

cout<<"进程名"<<"\t"<<"还需运行时间\t"<<"已用CPU时间"<<"\t"<<"优先级"<<"\t"<<"状态"<

for(inti=0;i

{

Cout<

switch(hpcb[i].process)

{

casewait:

cout<<"阻塞态"<

caseready:

cout<<"就绪态"<

caserun:

cout<<"运行态"<

casefinish:

cout<<"完成态"<

}

}

cout<<"---------------------------------------------------------------------"<

cout<

}

voidFPcb:

:

print()

{

cout<<"*********************************************************************"<

cout<<"进程名"<<"\t"<<"还需运行时间\t"<<"已用CPU时间"<<"\t"<<"状态"<

for(inti=0;i

{

cout<

switch(fpcb[i].process)

{

casewait:

cout<<"阻塞态"<

caseready:

cout<<"就绪态"<

caserun:

cout<<"运行态"<

casefinish:

cout<<"完成态"<

}

}

cout<<"---------------------------------------------------------------------"<

cout<

}

intmain()

{

cout<<"最高优先数优先的调度算法\n"<

HPcb:

:

highS();

return0;

}

五、结果分析与实验体会

实验结果:

程序运行后,开始运行优先数最高的进程3,3由就绪态变为运行态,此时1,2处于就绪态,3的优先数-1;3继续运行1次,3的优先数变为1,此时,进程1和3处于就绪态,2处于运行态;以此类推。

直到所有进程运行结束。

实验体会:

通过本次实验了解了载用多道程序设计的设计中的系统中,有若干个进程同时处于就绪状态时,通过设定程序的优先数来解决程序的运行顺序。

进一步了解了在单处理器情况下的处理器调度,加深对处理器调度工作的认识。

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

当前位置:首页 > 自然科学 > 物理

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

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