- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序代码:
#includeiostream.h
#includestdlib.h
#includestring.h
#includeconio.h
#define NULL 0
class PCB
{
public:
PCB();
PCB(char n[10],int f,int time);//初始化函数
void calPCB(int t);//进程调度
void waitPCB();//进程等待
int statePCB();//返回PCB进程状态
void rewritePCB(char n[10],int i,int j);//重置PCB信息
void print();
void reduce();
int f;//优先级
int state;//进程状态 就绪状态为1,完成状态为0
void prin();
private:
char name[10];
int rtime;//需要运行时间
int utime;//已运行时间
// PCB* next;//链表指针
};
PCB::PCB()
{
name[10]=\0;
f=0,rtime=0,utime=0,state=0;
}
PCB::PCB(char n[10],int f,int time)
{
strcpy(name,n);
f=f;
rtime=time;
utime=0;
state=1;//初始化进程状态为就绪
// next=NULL;
}
void PCB::calPCB(int t)
{
utime=utime+t;
if(utime==rtime)
state=0;
}
void PCB::waitPCB()
{
f++;//进程等待,优先级+1
}
int PCB::statePCB()
{
return state;
}
void PCB::rewritePCB(char n[10],int i,int j)
{
strcpy(name,n);
f=i;
rtime=j;
utime=0;
state=1;
}
void PCB::print()
{
cout此次运行进程name endl;//进程调度输出
}
void PCB::reduce()
{
f--;
}
void PCB::prin()
{
coutname f utime rtime ;
if(state==0)
cout完成endl;
else
cout就绪endl;
}
//
class Squeue
{
public:
Squeue(int num);
void EnSqueue(int i);//第i个PCB块
void DelSqueue(int i);
void sort();
int NumSqueue();
int Empty();
int maxPCB();
void operate(int max);
PCB* A;
private:
int front;
int rear;
char b[100];
};
Squeue::Squeue(int num)
{
front=0;rear=-1;
A=new PCB[num+1];
EnSqueue(1);
}
void Squeue::EnSqueue(int i)
{
char a[10];
int m,n;
cout输入:第i个进程的名称、优先级和运行时间(以回车键区分):endl;
cinamn;
rear++;
A[rear].rewritePCB(a,m,n);
}
void Squeue::sort()
{
int i,j;
PCB X(x,0,0);
for(i=front;irear;i++)
{
for(j=i+1;j=rear;j++)
{
if(A[j].fA[i].f)
{
X=A[i];
A[i]=A[j];
A[j]=X;
}
}
}
}
int Squeue::NumSqueue()
{
return (rear-front+1);
}
void Squeue::DelSqueue(int i)
{
PCB X(x,0,0);
X=A[i];
A[i]=A[front];
A[front]=X;
front++;
}
int Squeue::Empty()
{
if(rear!=front-1)
return 1;
文档评论(0)