南邮操作系统实验代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
system("cls");
print();
Sleep(1000);
}
else
{
fpcb[i].cpuTime -=P_TIME;
system("cls");
print();
Sleep(1000);
fpcb[i].process =finish;
fpcb[i].cpuTime = fpcb[i].allTime;
caseready:cout<<"就绪态"<<endl;break;
caserun:cout<<"运行态"<<endl;break;
casefinish:cout<<"完成态"<<endl;break;
}
}
cout<<"---------------------------------------------------------------------"<<endl;
strcpy_s(hpcb[i].name,5,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++;//为了输出改变前的相关信息
system("cls");
print();
Sleep(1000);
hpcb[f].cpuTime +=P_TIME;
hpcb[f].firstNum--;
hpcb[f].process =ready;
}
for(ii = 0; ii<P_NUM; ii++)//用于判断是否还有进程未完成
题目一:进程调度算法
实验代码
#include"stdafx.h"
#include<windows.h>
#include<iostream>
#include<string>
usingnamespacestd;
#define_CRT_SECURE_NO_WARNINGS//避免不安全因素发生
#defineP_NUM3//进程数
print();
Sleep(1000);
rpcb[i].process =finish;
rpcb[i].cpuTime = rpcb[i].allTime;//防止所用时间超过总的时间
system("cls");
print();
Sleep(1000);
}
else
{
rpcb[i].cpuTime -=P_TIME;
cout<<endl;
}
voidRPcb::print()
{
cout<<"********************************************"<<endl;
cout<<"进程名"<<"\t"<<"还需运行时间\t"<<"已用CPU时间"<<
"\t"<<"状态"<<endl;
for(inti = 0; i<P_NUM; i++)
intfirstNum;
};
HPcbhpcb[P_NUM];
classFPcb:publicPcb
{
public:
staticvoidprint();
staticvoidfcfs();
private:
intcomeTime;
};
FPcbfpcb[P_NUM];
classRPcb:publicPcb
{
{
fpcb[i].cpuTime -=P_TIME;
system("cls");
print();
Sleep(1000);
fpcb[i].cpuTime +=P_TIME;
fpcb[i].cpuTime = fpcb[i].allTime;
fpcb[i].process =finish;
fpcb[i + 1].process =run;
rpcb[i].process =finish;
rpcb[i].cpuTime = rpcb[i].allTime;//防止所用时间超过总的时间
system("cls");
print();
Sleep(1000);
}
e百度文库se
{
system("cls");
print();
Sleep(1000);
rpcb[i].process =run;
public:
staticvoidprint();
staticvoidrr();
};
RPcbrpcb[P_NUM];
voidRPcb::rr()//时间片轮转算法
{
intii, i = 0;
intk = 0;
for(; i<P_NUM; i++)
{
char* ch;
ch =newchar[1];
cout<<"请输入第"<<i + 1<<"个进程的进程名、需要运行的时间:"<<endl;
if(hpcb[ii].firstNum !=MIN)
break;
}while(ii<P_NUM);//还有进程未完成
cout<<"所有进程已运行完成!"<<endl;
}
voidFPcb::fcfs()//先来先服务算法
{
inti = 0;
for(; i<P_NUM; i++)
{
char* ch;
ch =newchar[1];
{
intii, f, i = 0;
for(; i<P_NUM; i++)
{
char* ch;
ch =newchar[1];
cout<<"请输入第"<<i + 1<<"个进程的进程名优先、需要运行的时间:"<<endl;
cin>>ch;
hpcb[i].name =newchar[strlen(ch) + 1];
system("cls");
print();
Sleep(1000);
}
}
else
{
fpcb[i].cpuTime -=P_TIME;
system("cls");
print();
Sleep(1000);
fpcb[i].cpuTime +=P_TIME;
}
}
}
cout<<"所有进程已运行完成!"<<endl;
fpcb[i].cpuTime = 0;
fpcb[i].process =ready;
}
for(i = 0; i<P_NUM; i++)//P_NUM个进程
{
for(intj = 0; j<fpcb[i].allTime; j +=P_TIME)//每个进程所用时间
{
fpcb[i].cpuTime +=P_TIME;//第i个进程所用时间加个时间片
cin>>ch;
rpcb[i].name =newchar[strlen(ch) + 1];
strcpy_s(rpcb[i].name,5,ch);
cin>>rpcb[i].allTime;
rpcb[i].cpuTime = 0;
rpcb[i].process =ready;
}
do
{
for(i = 0; i<P_NUM; i++) {
if(fpcb[i].cpuTime<fpcb[i].allTime)//第i个进程还未完成
fpcb[i].process =run;//将其状态设为就绪态
if(fpcb[i].cpuTime >= fpcb[i].allTime)
{
if((i + 1) !=P_NUM)//如果第i+1个进程不是最后一个进程,便于下一个程序从就绪状态到运行状态
{
cout<<rpcb[i].name<<"\t\t"<<rpcb[i].allTime - rpcb[i].cpuTime<<"\t\t"
<<rpcb[i].cpuTime<<"\t";
switch(rpcb[i].process)
{
casewait:cout<<"阻塞态"<<endl;break;
cout<<"请输入第"<<i + 1<<"个进程的进程名,需要运行的时间:"<<endl;
cin>>ch;
fpcb[i].name =newchar[strlen(ch) + 1];
strcpy_s(fpcb[i].name,5,ch);
cin>>fpcb[i].allTime;
fpcb[i].comeTime = i + 1;
#defineP_TIME2//时间片长度
#defineMIN-9999
enumstate//进程状态
{
ready,//就绪
run,//执行
wait,//阻塞
finish//完成
};
classPcb
{
public:
staticvoidprint() {};
~Pcb();
protected:
char* name;//进程名
}
}
for(ii = 0; ii<P_NUM; ii++)//用于判断是否还有进程未完成
if(rpcb[ii].process !=finish)
break;
}while(ii<P_NUM);//还有进程未完成
cout<<"所有进程已运行完成!"<<endl;
}
voidHPcb::highS()//最高优先数优先的调度算法
{
for(i = 0; i<P_NUM; i++)
if(rpcb[i].process ==run)
break;
rpcb[i].cpuTime +=P_TIME;
rpcb[i].process =run;
if(rpcb[i].cpuTime >= rpcb[i].allTime)//该进程执行完成
{
hpcb[f].process =finish;
hpcb[f].cpuTime = hpcb[f].allTime;//防止所用时间超过总的时间
system("cls");
print();
Sleep(1000);
}
else
{
hpcb[f].cpuTime -=P_TIME;//为了输出改变前的相关信息
hpcb[f].firstNum--;
hpcb[f].process =run;
if(hpcb[f].cpuTime >= hpcb[f].allTime)//该进程执行完成
{
hpcb[f].cpuTime -=P_TIME;
system("cls");
print();
Sleep(1000);
hpcb[f].firstNum =MIN;
{
cout<<hpcb[i].name<<"\t\t"<<hpcb[i].allTime - hpcb[i].cpuTime<<"\t\t"
<<hpcb[i].cpuTime<<"\t"<<hpcb[i].firstNum<<"\t";
switch(hpcb[i].process)
{
casewait:cout<<"阻塞态"<<endl;break;
}
intHPcb::getFirst()//得到优先级最高的进程
{
intk = 0;
for(inti = 1; i<P_NUM; i++)
if(hpcb[k].firstNum<hpcb[i].firstNum)
k = i;
returnk;
}
Pcb::~Pcb()
{
delete[]name;
}
voidHPcb::print()
intallTime;//需要运行时间
intcpuTime;//已用cpu时间
stateprocess;//进程状态
};
classHPcb:publicPcb
{
public:
staticvoidprint();
staticvoidhighS();
staticintgetFirst();
private:
if(rpcb[i].process ==ready)
{
rpcb[i].cpuTime +=P_TIME;
rpcb[i].process =run;
if(rpcb[i].cpuTime >= rpcb[i].allTime)//该进程执行完成
{
rpcb[i].cpuTime -=P_TIME;
system("cls");
system("cls");
print();
Sleep(1000);
rpcb[i].cpuTime +=P_TIME;
rpcb[i].process =ready;
}
}
}
for(i = 0; i<P_NUM; i++)
if(rpcb[i].process !=ready)
k++;
if(k == 2)
{
cout<<"**********************************************"<<endl;
cout<<"进程名"<<"\t"<<"还需运行时间\t"<<"已用CPU时间"<<"\t"<<"优先级"<<"\t"<<"状态"<<endl;
for(inti = 0; i<P_NUM; i++)
caseready:cout<<"就绪态"<<endl;break;
caserun:cout<<"运行态"<<endl;break;
casefinish:cout<<"完成态"<<endl;break;
相关文档
最新文档