操作系统课程设计报告书文档格式.docx

上传人:b****5 文档编号:21541981 上传时间:2023-01-31 格式:DOCX 页数:25 大小:160KB
下载 相关 举报
操作系统课程设计报告书文档格式.docx_第1页
第1页 / 共25页
操作系统课程设计报告书文档格式.docx_第2页
第2页 / 共25页
操作系统课程设计报告书文档格式.docx_第3页
第3页 / 共25页
操作系统课程设计报告书文档格式.docx_第4页
第4页 / 共25页
操作系统课程设计报告书文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

操作系统课程设计报告书文档格式.docx

《操作系统课程设计报告书文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告书文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

操作系统课程设计报告书文档格式.docx

----------------------------------------------pcbobj.h---------------------------------------------

#include<

string>

usingnamespacestd;

#ifndefPCBOBJ_H_

#definePCBOBJ_H_

enumpStatus{Wait,Run,Finish,UNGO};

//定义进程的四种状态

classPCBobj{

public:

PCBobj();

PCBobj(stringname,intid,intreach,intexecute);

virtual~PCBobj();

intgetExecTime()const;

intgetHasExecTime()const;

intgetId()const;

intgetReachTime()const;

stringgetName()const;

pStatusgetStatus()const;

voidsetHasExecTime(inthasExecTime);

voidsetId(intpId);

voidsetStatus(pStatusstatus);

voidsetExecTime(intexecTime);

voidsetName(stringpName);

voidsetReachTime(intreachTime);

boolisFinish();

//进程是否运行完毕

boollast_statu;

//判断进程上一个cpu是否是运行态

private:

stringpName;

//进程名

intpId;

//进程优先数

intreachTime;

//进程到达时间

intexecTime;

//进程需要运行的时间

inthasExecTime;

//进程已经运行的时间

pStatusstatus;

};

typedefPCBobj*pcbobj;

#endif/*PCBOBJ_H_*/

-------------------------------------------pcbobj.cpp代码------------------------------------------------

#include"

PCBobj.h"

PCBobj:

:

PCBobj(){

hasExecTime=0;

status=UNGO;

last_statu=false;

}

PCBobj(stringname,intid,intreach,intexecute){

pName=name;

pId=id;

reachTime=reach;

execTime=execute;

~PCBobj(){}

intPCBobj:

getExecTime()const{

returnexecTime;

getHasExecTime()const{

returnhasExecTime;

getId()const{

returnpId;

stringPCBobj:

getName()const{

returnpName;

getReachTime()const{

returnreachTime;

pStatusPCBobj:

getStatus()const{

returnstatus;

voidPCBobj:

setHasExecTime(inthasExecTime){

this->

hasExecTime=hasExecTime;

setId(intpId){

pId=pId;

setStatus(pStatusstatus){

status=status;

setExecTime(intexecTime){

execTime=execTime;

setName(stringpName){

pName=pName;

setReachTime(intreachTime){

reachTime=reachTime;

boolPCBobj:

isFinish(){

boolFlag=false;

if(execTime==hasExecTime){

status=Finish;

Flag=true;

}

returnFlag;

-----------------------------------------------waitmanager.h------------------------------

#include<

iostream>

list>

#include"

#ifndefWAITMANAGER_H_

#defineWAITMANAGER_H_

classWaitManager{

WaitManager();

virtual~WaitManager();

voidadd(pcbobjnew_obj);

voidinsert(pcbobjnew_name);

voidremove(stringname);

voidremove();

boolempty();

pcbobjget();

pcbobjlast();

list<

pcbobj>

wait_PCB_list;

#endif/*WAITMANAGER_H_*/

-------------------------------------------waitmanager.cpp-----------------------------------

WaitManager.h"

WaitManager:

WaitManager(){}

~WaitManager(){}

voidWaitManager:

add(pcbobjnew_obj){

wait_PCB_list.push_back(new_obj);

new_obj->

setStatus(Wait);

boolWaitManager:

empty(){

returnwait_PCB_list.empty();

insert(pcbobjnew_obj){

if(wait_PCB_list.empty())

{

add(new_obj);

}else{

boolinsert_info=false;

//查看是否已经插入进去

for(list<

iteratorit=wait_PCB_list.begin();

it!

=wait_PCB_list.end();

it++){

if(new_obj->

getId()>

(*it)->

getId()){

wait_PCB_list.insert(it,new_obj);

new_obj->

insert_info=true;

break;

}

}

if(!

insert_info){

wait_PCB_list.push_back(new_obj);

new_obj->

remove(stringname){

if(empty()){

cout<

<

"

没有进程在就绪队列中"

endl;

}else

boolremove_info=false;

if((*it)->

getName()==name){

wait_PCB_list.erase(it);

remove_info=true;

remove_info){

cout<

name<

进程"

不存在"

remove(){

没有就绪进程在队列中"

wait_PCB_list.pop_front();

pcbobjWaitManager:

get(){

returnwait_PCB_list.front();

last(){

returnwait_PCB_list.back();

------------------------------------------------------cpumanager.h----------------------

#ifndefCPU_MANAGER_H_

#defineCPU_MANAGER_H_

enumcpu_Status{FREE,BUSY};

//cpu的状态

classcpu_Manager{

cpu_Manager();

virtual~cpu_Manager();

cpu_StatusgetCpu_info()const;

pcbobjgetCpu_pcb()const;

voidadd(pcbobjcpu_pcb);

voidupdate();

voidupdate(intargs);

intcpu_timeslice;

cpu_Statuscpu_info;

pcbobjcpu_pcb;

#endif/*CPU_MANAGER_H_*/

---------------------------------------------------cpumanager.cpp--------------------

cpu_Manager.h"

cpu_Manager:

cpu_Manager(){

cpu_pcb=0;

cpu_info=FREE;

cpu_timeslice=4;

~cpu_Manager(){

cpu_Statuscpu_Manager:

getCpu_info()const{

returncpu_info;

pcbobjcpu_Manager:

getCpu_pcb()const{

returncpu_pcb;

voidcpu_Manager:

add(pcbobjcpu_pcb1){

cpu_pcb=cpu_pcb1;

cpu_info=BUSY;

cpu_pcb=0;

update(){

cpu_pcb->

setStatus(Run);

setHasExecTime(

cpu_pcb->

getHasExecTime()+1);

update(intargs){

update();

setId(cpu_pcb->

getId()-args);

----------------------------------------------------schedul_simulate.h-----------------

#ifndefSCHEDUL_SIMULATE_H_

#defineSCHEDUL_SIMULATE_H_

voidchoice();

stringconvert_statu(pStatusstatu);

voidprocess_init(pcbobjprocess);

voidprocess_update(pcbobjprocess,inttime_record,WaitManager&

wait_manager);

voidprocess_update_id(pcbobjprocess,inttime_record,WaitManager&

//--------打印进程信息---------------

voidprocess_record(pcbobjprocess,inttime_record);

//----------从wait到run------------

voidwaitTOrun(WaitManager&

wait_manager,cpu_Manager&

cpu_manager);

voidrunTOwait(WaitManager&

voidFCFS(pcbobjprocess);

voidRR(pcbobjprocess);

voidHPF(pcbobjprocess);

#endif/*SCHEDUL_SIMULATE_H_*/

-------------------------------------------schedul_simulate.cpp-------------------------------

schedul_simulate.h"

voidchoice(){

cout<

1:

FCFS"

2:

RR"

3:

HPF"

4:

quit"

stringconvert_statu(pStatusstatu){

stringvalue="

UNGO"

;

switch(statu){

caseWait:

value="

Wait"

break;

caseRun:

Run"

caseFinish:

Finish"

caseUNGO:

returnvalue;

voidprocess_init(pcbobjprocess){

stringname;

intprocess_id;

intprocess_reach;

intprocess_execute;

cout<

"

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

<

endl;

for(inti=0;

i<

4;

i++){

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

cout<

请输入第"

(i+1)<

个进程的信息"

cin>

>

name;

process_id;

process_reach;

process_execute;

(process+i)->

setName(name);

setId(process_id);

setReachTime(process_reach);

setExecTime(process_execute);

第"

个进程信息已经初始化"

所有进程信息已经全部完成"

voidprocess_update(pcbobjprocess,inttime_record,WaitManager&

wait_manager){

if((process+i)->

getReachTime()==time_record){

wait_manager.add((process+i));

//直接加到末尾

voidprocess_update_id(pcbobjprocess,inttime_record,WaitManager&

wait_manager)

{

wait_manager.insert((process+i));

voidprocess_record(pcbobjprocess,inttime_record)

时刻:

time_record<

进程名\t优先数\t到达时间\t运行时间\t已经运行时间\t状态"

----------------------------------------------------------"

<

(process+i)->

getName()<

\t"

<

getId()<

getReachTime()<

getExecTime()<

getHasExecTime()<

\t\t"

if((process+i)->

last_statu)

convert_statu(Run)<

else

convert_statu((process+i)->

getStatus())<

(process+i)->

last_statu=false;

wait_manager,cpu_Manager&

cpu_manager){

cpu_manager.add(wait_manager.get());

wait_manager.remove();

pcbobjtemp=cpu_manager.getCpu_pcb();

temp->

last_statu=true;

wait_manager.add(temp);

voidFCFS(pcbobjprocess){

inttime_record=0;

PCBobj*process_last=process+3;

WaitManagerwait_manager;

cpu_Managercpumanager;

while(process_last->

getStatus()!

=Finish){

process_update(process,time_record,wait_manager);

process_record(process,time_record);

if(!

wait_manager.empty()&

&

cpumanager.getCpu_info()==FREE){

waitTOrun(wait_manager,cpuma

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

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

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

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