📄 cpupriority.cpp
字号:
#include <iostream.h>
class PCB
{
public:
char pname[20]; //进程名
int level; //进程的优先级
int runtime; //估计运行时间
char state; //进程状态
class PCB * next; //尾链接指针
class PCB * pre; //头链接指针
public:
void ShowInf()
{
cout<<"进程名:"<<pname<<endl;
cout<<"运行级:"<<level<<endl;
cout<<"估计运行时间:"<<runtime<<endl;
cout<<"进程状态:"<<state<<endl;
cout<<endl;
}
};
PCB pcb[5];
PCB *pcbHead;
PCB *pCurRunProc;
long CurTime;
//创建进程
void CreateProcess()
{
//链接就绪进程头尾
pcb[0].next = &pcb[1];
pcb[1].next = &pcb[2];
pcb[2].next = &pcb[3];
pcb[3].next = &pcb[4];
pcb[4].next = NULL;
pcb[0].pre = NULL;
pcb[1].pre = &pcb[0];
pcb[2].pre = &pcb[1];
pcb[3].pre = &pcb[2];
pcb[4].pre = &pcb[3];
pcbHead = &pcb[0];
//初始化5个进程信息
cout<<"请输入5个进程信息:"<<endl;
for(int i = 0;i < 5;i++)
{
cout<<"请输入进程"<<i+1<<"的信息:"<<endl;
cout<<"进程名:";
cin>>pcb[i].pname;
cout<<"运行级:";
cin>>pcb[i].level;
cout<<"估计运行时间:";
cin>>pcb[i].runtime;
pcb[i].state = 'R';
}
cout<<endl<<"以下为运行记录:"<<endl;
}
//选择进程
int SelectProcess()
{
int nRC = 0;
PCB *pcbTemp = pcbHead;
//如果就绪进程队列为空,退出
if( pcbTemp == NULL)
return 0;
pCurRunProc = NULL;
int lv = 65535;
//从就绪进程队列中选择出一个高优先级的进程
do
{
if((pcbTemp->state == 'R') && (pcbTemp->level <= lv))
{
lv = pcbTemp->level;
pCurRunProc = pcbTemp;
}
pcbTemp = pcbTemp->next;
}
while( pcbTemp != NULL);
return 1;
}
//运行进程
void RunProcess()
{
if(pCurRunProc->runtime == 0)
{
pCurRunProc->state = 'C';
//就绪进程头
if(pCurRunProc == pcbHead)
{
pcbHead = pCurRunProc->next;
pCurRunProc->pre = NULL;
pCurRunProc->next = NULL;
}
//就绪进程尾
else if(pCurRunProc->next == NULL)
{
if(pCurRunProc->pre != NULL)
{
pCurRunProc->pre->next = NULL;
pCurRunProc->pre = NULL;
}
else
{
pcbHead = NULL;
}
pCurRunProc->next = NULL;
}
//就绪进程中
else
{
pCurRunProc->pre->next = pCurRunProc->next;
pCurRunProc->next->pre = pCurRunProc->pre;
pCurRunProc->pre = NULL;
pCurRunProc->next = NULL;
}
}
else
{
pCurRunProc->level++;
pCurRunProc->runtime--;
CurTime++;
cout<<"当前时间:"<<CurTime<<endl;
pCurRunProc->ShowInf();
}
}
void main()
{
CurTime = 0;
CreateProcess();
int nRun = SelectProcess();
//当没有进程可运行时退出
while( nRun == 1)
{
nRun = SelectProcess();
RunProcess();
}
cout<<endl<<"进程运行完毕!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -