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

📄 zuoyediaodu.txt

📁 模拟操作系统的作业调度
💻 TXT
字号:
#include<iostream>
#include<iomanip>
int FCFS();    //First Come First Service  
int MSF();     //Most Short First
struct JCB
{
	int JN;
	float TS;  //提交时间
	float TR;  //运行时间
	float TB;  //开始时间
	float TC;  //完成时间
	float TI;  //周转时间
	float WI;  //带权周转时间
};
/////////////////////////////////////////////////////////////////////////////////////

int main()
{
	std::cout<<"1,先来先服务调度算法"<<std::endl;
	std::cout<<"2,最短作业优先调度算法"<<std::endl;
	std::cout<<"3,Exit!"<<std::endl;
	std::cout<<"Please make a choice:";
	int choice;
	std::cin>>choice;
	switch(choice)
	{
	case 1:
		FCFS();
	    break;
	case 2:
	    MSF();
	    break;
	case 3:
		std::cout<<"You choose to exit!"<<std::endl;
		break;
	default:
		std::cout<<"\aNo such a choice!";
		break;
	} 
	return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////

FCFS()
{
	int i;
	std::cout<<"请输入作业的个数:";
	int size;
	std::cin>>size;
	JCB *jcb=new JCB[size];
	std::cout<<"请输入各个作业的提交时间和运行时间:"<<std::endl;
	for(i=0;i<size;i++)
	{
		jcb[i].JN=i+1;
		std::cin>>jcb[i].TS>>jcb[i].TR;
	}
	    std::cout<<"\n";
		float temp;
		//按提交时间排序
		for(i=0;i<size;i++)
			for(int t=i+1;t<size;t++)
			{
				if(jcb[i].TS>jcb[t].TS)
				{
					temp=jcb[i].TS;jcb[i].TS=jcb[t].TS;jcb[t].TS=temp;
					temp=jcb[i].JN;jcb[i].JN=jcb[t].JN;jcb[t].JN=temp;
					temp=jcb[i].TR;jcb[i].TR=jcb[t].TR;jcb[t].TR=temp;
				}
			}
			jcb[0].TB=jcb[0].TS;
			jcb[0].TC=jcb[0].TS+jcb[0].TR;
			jcb[0].TI=jcb[0].TC-jcb[0].TS;
			jcb[0].WI=jcb[0].TI/jcb[0].TR;
			
			for(i=1;i<size;i++)
			{
				if(jcb[i].TS<jcb[i-1].TC)
					jcb[i].TB=jcb[i-1].TC;
				else
					jcb[i].TB=jcb[i].TS;
				jcb[i].TC=jcb[i].TB+jcb[i].TR;
				jcb[i].TI=jcb[i].TC-jcb[i].TS;
				jcb[i].WI=jcb[i].TI/jcb[i].TR;
			}
			std::cout<<"****************************************************"<<std::endl;
			std::cout<<"JN\tTS\tTR\tTB\tTC\tTI\tWI\t"<<std::endl;
			
			for(int a=0;a<size;a++)
				for(int b=a+1;b<size;b++)
				{
					JCB ntemp;
					if(jcb[a].JN>jcb[b].JN){ntemp=jcb[a];jcb[a]=jcb[b];jcb[b]=ntemp;}
				}
				for(i=0;i<size;i++)
			{
				std::cout<<jcb[i].JN<<"\t"<<jcb[i].TS<<"\t"<<jcb[i].TR<<"\t"<<jcb[i].TB<<"\t";
				std::cout<<jcb[i].TC<<"\t"<<jcb[i].TI<<std::setprecision(4)<<"\t"<<jcb[i].WI<<std::setprecision(4)<<"\t"<<std::endl;
			}
				std::cout<<"****************************************************"<<std::endl;
			return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////

MSF()
{
	int i;
	std::cout<<"请输入作业的个数:";
	int size;
	std::cin>>size;
	JCB *b=new JCB[size];   //用来保存已运行的作业
	JCB *jcb=new JCB[size];
	std::cout<<"请输入各个作业的提交时间和运行时间:"<<std::endl;
	for(i=0;i<size;i++)
	{
		jcb[i].JN=i+1;
		std::cin>>jcb[i].TS>>jcb[i].TR;
	}
	    std::cout<<"\n";
		float temp;   //临时变量
		JCB ntemp;   //临时变量
		
	     //按提交时间排序
		for(i=0;i<size;i++)
			for(int t=i+1;t<size;t++)
			{
				if(jcb[i].TS>jcb[t].TS)
				{
					temp=jcb[i].TS;jcb[i].TS=jcb[t].TS;jcb[t].TS=temp;
					temp=jcb[i].JN;jcb[i].JN=jcb[t].JN;jcb[t].JN=temp;
				    temp=jcb[i].TR;jcb[i].TR=jcb[t].TR;jcb[t].TR=temp;
				}
			}
			jcb[0].TB=jcb[0].TS;
			jcb[0].TC=jcb[0].TS+jcb[0].TR;
			jcb[0].TI=jcb[0].TC-jcb[0].TS;
			jcb[0].WI=jcb[0].TI/jcb[0].TR;
			b[0]=jcb[0];

			for(int j=1;j<size;j++)
			{
				if(jcb[j].TS>b[j-1].TC)
				{
					b[j]=jcb[j];
					b[j].TB=b[j].TS;
					b[j].TC=b[j].TB+b[j].TR;
					b[j].TI=b[j].TC-b[j].TS;
					b[j].WI=b[j].TI/b[j].TR;
					
				}
				
				else
				{
					int k,n=1;
					ntemp=jcb[j];
					for(k=j+1;k<size;k++)
					{
						if(jcb[k].TS<=b[j-1].TC&&jcb[k].TR<jcb[j].TR)
						{
							jcb[j]=jcb[k];
							jcb[k]=ntemp;
						}
						else continue;
					}
					b[j]=jcb[j];
					b[j].TB=b[j-1].TC;
					b[j].TC=b[j].TB+b[j].TR;
					b[j].TI=b[j].TC-b[j].TS;
					b[j].WI=b[j].TI/b[j].TR;
					
				}
			}

			std::cout<<"*****************************************************"<<std::endl;
			std::cout<<"JN\tTS\tTR\tTB\tTC\tTI\tWI\t"<<std::endl;
			
			for(int a=0;a<size;a++)
				for(int r=a+1;r<size;r++)
				{
					JCB ntemp;
					if(b[a].JN>b[r].JN){ntemp=b[a];b[a]=b[r];b[r]=ntemp;}
				}
				for(i=0;i<size;i++)
			{
				std::cout<<b[i].JN<<"\t"<<b[i].TS<<"\t"<<b[i].TR<<"\t"<<b[i].TB<<"\t";
				std::cout<<b[i].TC<<"\t"<<b[i].TI<<std::setprecision(4)<<"\t"<<b[i].WI<<std::setprecision(4)<<"\t"<<std::endl;
			}
				std::cout<<"*****************************************************"<<std::endl;
				int main();
			return 0;
}

⌨️ 快捷键说明

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