⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpupriority.cpp

📁 操作系统CPU优先级调度算法的模拟
💻 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 + -