操作系统实验5 进程调度模拟程序设计.docx
- 文档编号:29226345
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:13
- 大小:113.92KB
操作系统实验5 进程调度模拟程序设计.docx
《操作系统实验5 进程调度模拟程序设计.docx》由会员分享,可在线阅读,更多相关《操作系统实验5 进程调度模拟程序设计.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验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处于运行态;以此类推。 直到所有进程运行结束。 实验体会: 通过本次实验了解了载用多道程序设计的设计中的系统中,有若干个进程同时处于就绪状态时,通过设定程序的优先数来解决程序的运行顺序。 进一步了解了在单处理器情况下的处理器调度,加深对处理器调度工作的认识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统实验5 进程调度模拟程序设计 操作系统 实验 进程 调度 模拟 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)