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

📄 1234.cpp

📁 一个用vc编写的调度算法程序
💻 CPP
字号:
#include<iostream.h>
//int scheduling(int mode);

const int meml=3;//后备队列最大长度。
const int lnum=3;//就绪队列数量。
const int readyl=3;//就绪队列最大长度。
const int timepiece=20;//时间片大小,单位:指令周期。
//-------------------------------------------------------------------
//
//      主函数
//
void main(void)
{
	int mode=1;//0:时间片轮转法,1:多级反馈队列调度算法。
	int cpu=0;//服务时间计数器。
	int memln=meml;//后备队列实际长度。
	int readyln[lnum];//就绪队列实际长度。
	int clock;//时钟。
	int fl=0;//就绪队列序号。
	int i,j,k;
	int nm[meml],am[meml],bm[meml],cm[meml],dm[meml],em[meml];//后备队列。
	float fm[meml];
	int nr[lnum][readyl+1],br[lnum][readyl+1],hr[lnum][readyl+1];//就绪队列。


	for(i=0;i<lnum;i++)//队列长度初始化。
		readyln[i]=0;
	for(i=0;i<readyl;i++)//就绪队列初始化。
		for(j=0;j<lnum;j++)
		{
			br[j][i]=0;
			nr[j][i]=0;
			hr[j][i]=0;
		}
	for(i=0;i<meml;i++)//数据输入。
	{
		cin>>bm[i];
		nm[i]=i;
		cm[i]=-1;
	}
//-------------------------------------------------------------------
	for(clock=0;;clock++)//时钟循环。
	{
		if(memln&&readyln[0]<readyl)//进程由后备队列调入就绪队列。
		{
			nr[0][readyln[0]]=nm[meml-memln];
			br[0][readyln[0]]=bm[meml-memln];
			hr[0][readyln[0]]=br[0][readyln[0]];
			am[meml-memln]=clock;
			memln--;readyln[0]++;
		}
		if(!cpu)//由就绪队列中取进程。
		{
			k=1;
			if(mode)
			{
				for(i=0;i<lnum;i++)
					if(readyln[i])
					{
						fl=i;
						break;
					}
				for(i=0;i<fl;i++)
					k*=2;
			}
			cpu=timepiece*k;
			if(!fl&&cm[nr[fl][0]]==-1)
				cm[nr[fl][0]]=clock;
		}

		cpu--;
		hr[fl][0]--;
		if(!cpu&&hr[fl][0])
		{
			if(fl==lnum||!mode)
			{
				br[fl][readyln[fl]]=br[fl][0];
				nr[fl][readyln[fl]]=nr[fl][0];
				hr[fl][readyln[fl]]=hr[fl][0];
				for(i=0;i<readyln[fl];i++)
				{
					br[fl][i]=br[fl][i+1];
					nr[fl][i]=nr[fl][i+1];
					hr[fl][i]=hr[fl][i+1];
				}
			}
			else
			{
				br[fl+1][readyln[fl+1]]=br[fl][0];
				nr[fl+1][readyln[fl+1]]=nr[fl][0];
				hr[fl+1][readyln[fl+1]]=hr[fl][0];
				readyln[fl+1]++;
				for(i=0;i<readyln[fl];i++)
				{
					br[fl][i]=br[fl][i+1];
					nr[fl][i]=nr[fl][i+1];
					hr[fl][i]=hr[fl][i+1];
				}
				readyln[fl]--;
			}
		}
		if(!hr[fl][0])
		{
			dm[nr[fl][0]]=clock+1;
			for(i=0;i<readyln[fl]-1;i++)
			{
				br[fl][i]=br[fl][i+1];
				nr[fl][i]=nr[fl][i+1];
				hr[fl][i]=hr[fl][i+1];
			}
			readyln[fl]--;
			cpu=0;
		}

		if(!memln)
		{
			k=0;
			for(i=0;i<lnum;i++)
				k+=readyln[i];
			if(!k)
				break;
		}
	}

	for(i=0;i<meml;i++)
	{
		em[i]=dm[i]-am[i];
		fm[i]=(float)em[i]/(float)bm[i];
		cout<<"\n"<<am[i]<<" "<<bm[i]<<" "<<cm[i]<<" "<<dm[i]<<" "<<em[i]<<" "<<fm[i];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -