操作系统课设进程调度模拟程序.docx

上传人:b****2 文档编号:2225315 上传时间:2023-05-02 格式:DOCX 页数:27 大小:115.37KB
下载 相关 举报
操作系统课设进程调度模拟程序.docx_第1页
第1页 / 共27页
操作系统课设进程调度模拟程序.docx_第2页
第2页 / 共27页
操作系统课设进程调度模拟程序.docx_第3页
第3页 / 共27页
操作系统课设进程调度模拟程序.docx_第4页
第4页 / 共27页
操作系统课设进程调度模拟程序.docx_第5页
第5页 / 共27页
操作系统课设进程调度模拟程序.docx_第6页
第6页 / 共27页
操作系统课设进程调度模拟程序.docx_第7页
第7页 / 共27页
操作系统课设进程调度模拟程序.docx_第8页
第8页 / 共27页
操作系统课设进程调度模拟程序.docx_第9页
第9页 / 共27页
操作系统课设进程调度模拟程序.docx_第10页
第10页 / 共27页
操作系统课设进程调度模拟程序.docx_第11页
第11页 / 共27页
操作系统课设进程调度模拟程序.docx_第12页
第12页 / 共27页
操作系统课设进程调度模拟程序.docx_第13页
第13页 / 共27页
操作系统课设进程调度模拟程序.docx_第14页
第14页 / 共27页
操作系统课设进程调度模拟程序.docx_第15页
第15页 / 共27页
操作系统课设进程调度模拟程序.docx_第16页
第16页 / 共27页
操作系统课设进程调度模拟程序.docx_第17页
第17页 / 共27页
操作系统课设进程调度模拟程序.docx_第18页
第18页 / 共27页
操作系统课设进程调度模拟程序.docx_第19页
第19页 / 共27页
操作系统课设进程调度模拟程序.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统课设进程调度模拟程序.docx

《操作系统课设进程调度模拟程序.docx》由会员分享,可在线阅读,更多相关《操作系统课设进程调度模拟程序.docx(27页珍藏版)》请在冰点文库上搜索。

操作系统课设进程调度模拟程序.docx

操作系统课设进程调度模拟程序

沈阳理工大学课程设计专用纸

Noi

 

 

进程调度模拟程序1i

II

1.设计目的及要求1:

I

I

2.概要设计11

II

3.算法流程图2:

I

I

四•源程序及注释6:

I

I

五.运行结果及分析16:

I

I

六•课程设计总结19;

I

I

七.参考文献19;

沈阳理T•人学

进程调度模拟程序:

I

I

I

I

I

1.设计目的及要求i

I

I

I

I

I

编写一个进用调度程序,允许多个进用并行执行。

木次设计将采用三种筛法实现进觀:

I

的行执行.分别是杲岛优先数优先的调度算法(即把处理机分配给优先数垠岛的进秤):

I

.先来先服务算法.按时间片轮转调度算法。

:

Ia

I

I

I

2.概要设计1

I

Ia

Ia

(D每个进程令•个进序控制块(PCB)表示。

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

进程名、:

I

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

:

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

进程;

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

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

3每个进程的状态可以是就绪w(Wait).运行R(Run)、或完成F(Finish)三种状[

态之一。

I

4建立一个pcbobjf]的数细来存放讲秤队列。

:

建立一个类pcbobj存放进程的备种信息并对这些信息的操作。

:

建立一个类wait_manager来对就绪进程进行管理。

I建立一个类cpu.manager来对运行的进聊进行管理。

沈阳理T•人学

沈阳理工大学课程设计专用纸

No2

三.算法流程图

图1一1上程序流程图

沈阳理T•人学

 

沈阳理工大学课程设计专用纸

No?

图1一2FCFS算法流程图

沈阳理T•人学

 

沈阳理工大学课程设计专用纸

No4

图1一3RR算法流用图

沈阳理T•人学

 

沈阳理工大学课程设计专用纸

No5

图1一4HPF算法流卅图

沈阳理T•人学

 

沈阳理工大学课程设计专用纸

Nob

四.源程序及注

Tr

 

 

pcbobj.h

#include

usingnamespacestd;

#ifndefPCBOBJ_H_

#definePCBOBJ_H_

enumpStaUis{Wait,Run,Finish,UNGO}"/定义进程的四种状态

classPCBobj{

public:

PCBobj();

PCBobj(stringnamejntidjntreachjntexecute);

virtual-PCBobjO;

intgetExecTime()const;

intge(HasExecTime()const;

intgetld()const;

intgetReachTinie()const;

siringgetName()const;

pStalusgetStatus()const;

voidsetHasExecTime(inthasExecTime);

voidsetld(intpld);

voidsetStatus(pStatusstatus);

voidsetExecTime(intexecTime);

voidsetName(stringpName);

voidsetReachTime(intreachTime);

boolisFinish();〃进程是否运行完毕

boollast_statu;//^l]断进程上一个cpu是否是运行态

private:

stringpName;〃进丹名

in(pld;〃进秤优先数

intreachTime;〃进軒•到达时间

intexecTime;〃进杆1•需要运彳j:

的时间

inihasExecTime;//进程lL经运彳J:

的时间

pStalusstatus;

};

typedefPCBobj*pcbobj;

#endif/*PCBOBJ_H_*/

pcbobj.cpp代码include”PCBobj.h”

PCBobj:

:

PCBobj(){

hasExecTime=O;

沈阳理「•人学

status=UNGO;

last_statu=false;

PCBobj:

:

PCBobj(stringnamejntidjntreachjntexecute)!

pName=name;

pld=id;

reachTime=reach;

execTime=execuie;

hasExecTime=O;status=UNGO:

}

PCBobj:

:

-PCBobj(){}

intPCBobj:

:

getExecTime()const{

returnexecTime;

intPCBobj:

:

getHasExecTime()const{returnhasExecTime;

}

intPCBobj:

:

ge(Id()const{

returnpld;

}

stringPCBobj:

:

gelName()const{

returnpName;

I

intPCBobj:

getReachTime()const{

returnreachTime;

pStatusPCBobj:

:

getStatus()const{

returnstatus;

voidPCBobj:

:

setHasExecTime(inthasExecTime){this->hasExecTime=hasExecTime;

voidPCBobj:

:

setId(intpld){this->pld=pld;

}

voidPCBobj:

:

setStatus(pStatusstatus)!

this->status=status;

voidPCBobj:

:

setExecTime(intexecTime){this->execTime=execTime;

I

沈阳理T•人学

voidPCBobj:

:

setName(stringpName){lhis->pName=pName;

voidPCBobj:

:

setReachTime(intreachTime){this->reachTime=reachTime;

boolPCBobj:

:

isFinish(){

boolFlag=false;if(execTime==hasExecTime){slatus=Finish;

Flag=true;

}

returnFlag;

}

waitmanager.h#include

#include

#includeHPCBobj.hM

#ifndefWAITMANAGER.H.

#defineWAITMANAGER_H_

classWaitManager{

public:

WaitManager();virtual-WaitManager();voidadd(pcbobjnew_obj);voidinsert(pcbobjnew_name);voidremove(stringname);voidremove();

boolemptyO;

pcbobjget();

pcbobjlast();

private:

listwait.PCBJist;

);

#endif/*WAITMANAGER.H.♦/

waitmanager.cpp-#includeHWaitManager.hH

WaitManager:

:

WaitManager(){}WaitMana2er:

>WaitManager(){}voidWaitManager:

:

add(pcbobjnew_obj){

wait_PCB」ist.push_back(new_obj);new_obj->setStatus(Wait);

I

boolWaitManager:

:

en】ply(){

沈阳理T•人学

returnwait_PCB」is(・cmply();

voidWaitManager:

:

insert(pcbobjnew_obj){

if(wail_PCBJist.emptyO)

{

add(new_obj);

}else{

boolinsertJnfo=false;//t*t看是古己经插入进去

for(Iist:

:

iteratorit=waitJPCB_list.begin();it!

=waitJPCBJist.end();it++){

if(new_obj->getld()>(*it)->getld()){

wait_PCBJist.insert(it,new_obj);

ncw^obj・>sc(SkHus(Wait);

insert」nfo=l「ue;

break;

}

}

if(!

insert」nfo){

wait_PCBJist.push_back(new_obj);

new_obj->setStatus(Wait);

voidWaitManager:

:

remove(stringname){

if(empty()){

coutvv”没有进程在就绪队列屮”vvendl;

}else

{

boolremovefo=false;

for(list:

:

iteratorit=wait_PCBJist.begin();it!

=wait_PCBJist.end();it++){if((*it)->getName()==name){

wail_PCBJist.erase(it);

remove_info=tme;

break;

}

}

if(!

removejnfo){

cout«name«H进程《不存在H«endl;

}

}

}

voidWaitManager:

:

remove(){

if(empty()){

coutvv”没有就绪进程在队列+M«endl;

沈阳理T•人学

}else

wait_PCBJist.pop_front();

pcbobjWaitManager:

:

get(){

returnwait_PCBJist.front();

pcbobjWaitManager:

:

last(){

returnwait.PCBJist.back();

}

pumanagcr.h-

#includePCBobj.hn

#ifndefCPU_MANAGER

#defineCPU_MANAGER_H_

enumcpu.Status{FREE.BUSY}^/cpu的状态classcpu_Manager{

public:

cpu_Manager();

virtual~cpu_Manager();

voidremove();

cpu^StatusgetCpuJnfo()const;

pcbobjgetCpu_pcb()const;

voidadd(pcbobjcpu_pcb);

voidupdate();

voidupdate(intargs);

intcpu_timeslice;

private:

cpu.Statuscpujnfo;

pcbobjcpu_pcb;

};

#endif/*CPU_MANAGER_H_*/

cpumanager.cpp-#includencpu_Manager.hH

cpu_Manager:

:

cpu_Manager(){

cpu_pcb=();

cpu_info=FREE;

cpu_timeslice=4;

cpu_Manager:

>cpu_Manager(){

cpu_pcb=O;

I

cpu_Statuscpu_Manager:

:

getCpu_info()const{

沈阳理T•人学

returncpujnfo;

pcbobjcpu^Manager:

:

getCpu_pcb()const{returncpu_pcb;

voidcpu_Manager:

:

add(pcbobjcpu_pcbl){cpu_pcb=cpu_pcbI;cpuJnfo=BUSY;

voidcpu_Manager:

:

remove(){this->cpu_pcb=O;cpu_info=FREE;

voidcpu_Manager:

:

update(){cpu_pcb->setStatus(Run);cpu_pcb->setHasExecTime(

cpu_pcb->getHasExecTime()+l);

voidcpu_Manager:

:

update(intargs){

update();cpu_pcb->setld(cpu_pcb->getld()-args);

scheduLsimulate.h

#include"WaitManager.h0

#includeHcpu_Manager.hH

#ifndefSCHEDUL_SIMULATE_H_

#defineSCHEDUL_SIMULATE_H_

voidchoice();

stringconvert_statu(pStatusstatu);

voidprocess_init(pcbobjprocess);

voidprocess_update(pcbobjprocessjnttime_record,WaitManager&wait_manager);voidprocess_update」d(pcbobjprocessJnttime_record,WaitManager&wait_manager);

//——打印进程信息

voidprocess_record(pcbobjprocessJnttime.record);

//从wait至ljrunvoidwaitTOrun(WaitManager&wait_manager,cpu_Manager&cpu_manager);

voidrunTOwail(WaitManager&wait_manager,cpu_Manager&cpu_nianager);

voidFCFS(pcbobjprocess);

voidRR(pcbobjprocess);

voidHPF(pcbobjprocess);

#endif/*SCHEDUL_SIMULATE_H_♦/

scheduLsimulate.cpp

#incIudeHscheduLsimulate.hH

voidchoice(){

 

沈阳理T•人学

沈阳理工大学课程设计专用纸

NoI2

 

cout«nl:

FCFSn«endI;

cout«n2:

RRH«endl;

cout«n3:

HPF,,«endl;

cou(v<”4:

quir‘vvendl;

stringconvert_statu(pStatusstatu){

stringvalue=f,UNGOH;

switch(statu){

caseWait:

value=”Wait”;

break;

caseRun:

value="Run";

break;

caseFinish:

value="Finish";

break;

caseUNGO:

value="UNGO”;

returnvalue;

voidprocess.init(pcbobjprocess){

stringname;

intprocess.id;

intprocess^reach;

intprocess_execute;

cout«"请按顺序输入进程的唯一标识…进程名进程的优先级进程的到达时间进程的运行时间"«endl;

for(inti=0;i<4;i++){

//process里的hasExecTime和status己经被初始化

cout«"请输入第"vv(i+1)«"个进程的信息"«endl;

cin»name;

cin»processjd;

cin»process^reach;

cin»pr(Kess_execute;

(process+i)->setName(name);

(process+i)->setId(process.id);

(process+i)->setReachTime(process_reach);

(process+i)->setExecTime(process_execute);

cout«”第”«(i+1)«”个进稈信息已经初始化,,«endl:

cout«"所有进程信息已经全部完成«endl;

沈阳理T•人学

沈阳理工大学课程设计专用纸

NoI3

 

 

voidprocess_update(pcbobjprocess,inttime_record,WaitManager&wait_manager){for(inti=0;i<4;i++){

if((process+i)->getReachTime()==time_record){wait_manager.add((process+i))y/H接加到末尾

}

}

}

voidprocess_update.id(pcbobjprocess,inttime_record,WaitManager&wait_manager){

for(inti=0;i<4;i++){

if((process+i)->getReachTime()==time.record){

waiLmanager.insert((process+i));

voidprocess_record(pcbobjprocess,inttime_record)

{

cout«"时亥ij:

"«time_record«endl;

cout«”进程名\l优先数\t到达时间\(运行时间\t已经运行时间\t状态"«endl;cout«••H

«endl;

for(inti=0;iv4;i++){

cout«(process+i)->getName()«M\tH

«(process+i)->getld()«H\tH

«(process+i)->getReachTime()«°\tH

«(process+i)->getExecTime()«H\tH

«(process+i)->getHasExecTime()«M\t\tn;

if((process+i)->Iast_statu)

cout«convert_statu(Run)«endl;

else

cout«convert_statu((process+i)->getStatus())«endl;(process+i)->lascsta(u=false;

cout«•'''

«endl;

voidwaitTOrun(WaitManager&wait_manager,cpu_Manager&cpu.manager){cpu_manager・add(wait_manager.get());

wait_manager.remove();

I

沈阳理T•人学

voidrunTOwait(WaitManager&wait_manager,cpu_Manager&cpu_manager){pcbobj(emp=cpu_managc「・gelCpu_pcb();

temp->last_statu=true;

wait_manager.add(temp);

voidFCFS(pcbobjprocess){

inttimc_record=0;

PCBobj*process_last=process+3;

WaitManagerwait_manager;

cpu^Managercpumanager;

while(processJast->getStatus()!

=Finish){process_update(process,time_record,wait_manager);proccss_rccord(proccss,timc_rccord);

if(!

wait_manager.empty()&&cpumanager.getCpu_info()==FREE){waitTOrun(wait_manager,cpumanager);

if(cpumanager.getCpufo()==BUSY){

cpumanager.update();

if(cpumanager.getCpu_pcb()->isFinish())cpumanager.removeO;

}

time_record++;

if(process_last->getStatus()!

=UNGO&&!

wait_manager.empty())//L2经到达{process.last=wait.manager.Iast();

}

I

process_record(process,time_record);

voidRR(pcbobjprocess){

inttime_record=0;

PCBobj*process_last=process+3;

WaitManagerwait_manager;

cpu_Managercpumanager;

intk=();//记录时间片满则为零

while(processJast->getStatus()!

=Finish){

process_update(process,time_record,wait_manager);process_record(processJime_record);

if(!

wait_manager.empty()&&cpumanager.getCpu」nfo()==FREE){waitTOrun(wait_manager,cpumanager);

}

if(cpumanager.getCpufo()==BUSY){

cpunianager.

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2