操作系统课程设计报告书文档格式.docx
- 文档编号:21541981
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:25
- 大小:160KB
操作系统课程设计报告书文档格式.docx
《操作系统课程设计报告书文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告书文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
----------------------------------------------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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告书