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

📄 sy.cpp

📁 操作系统实验 实现先进先出算法 基于优先级算法 最短执行时间算法
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		a=Q1.front->next;
		b=Q2.front->next;
		for(i=1;i<=Q1num;i++)
		{	cout<<i<<".  "<<a->name;
			a=a->next;
			cout<<endl;}
		cout<<endl;
	    cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
		for(i=1;i<=Q2num;i++)
		{	cout<<i<<".  "<<b->name;
			b=b->next;
			cout<<endl;

		}
		cout<<endl;

	}//if((Q2num!=0)&&(Q1num!=0))
		
		if((Q2num!=0)&&(Q1num==0)){
		//等待队列为空
            h2=Q2.front->next;
		    minprior=h2->prior;
			min=Q2.front->next;//h2;
			for(i=1;i<=Q2num;i++){
				if((minprior>=(h2->prior))&&((h2->exe)!=1))
			{
				minprior=h2->prior;
				min=h2;
			}//if
			h2=h2->next;
			}//for
			h2=Q2.front;
			while((h2->next)!=min){
				h2=h2->next;
				}//while
			min->exe=1;
			cout<<"第"<<n<<"轮执行"<<endl;
			cout<<"正在执行的是:"<<min->name<<endl;
			cout<<"其执行时间是:"<<min->exetime<<endl;     
			cout<<"其优先级是:"<<min->prior<<endl<<endl;
			if(min!=Q2.rear)
				h2->next=min->next;
			else if((min->next)==NULL)
			{	Q2.rear=h2;
				Q2.rear->next=NULL;}
			Enteam(Q1,min);    //min执行完毕后进入等待队列
			Deteam(Q1,e);      //等待队列第一个PCB出队
			Enteam(Q2,e);
            cout<<"经过执行,当前等待队列为空!"<<endl<<endl;
			cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
			PCB b=Q2.front->next;;
			for(i=1;i<=Q2num;i++)
			{	cout<<i<<".  "<<b->name;
				b=b->next;
				cout<<endl;
			}
			cout<<endl;
		}//if((Q2num!=0)&&(Q1num==0))
	    	
		  if((Q1num!=0)&&(Q2num==0)){
		   //就绪队列为空
            h1=Q1.front->next;
		    minprior=h1->prior;
			min=Q1.front->next;//h2;
			for(i=1;i<=Q1num;i++){
				if((minprior>=(h1->prior))&&((h1->exe)!=1))
			{
				minprior=h1->prior;
				min=h1;
			}//if
			h1=h1->next;
			}//for
			h1=Q1.front;
			while((h1->next)!=min){
				h1=h1->next;
				}//while
			min->exe=1;
			cout<<"第"<<n<<"轮执行"<<endl;
			cout<<"正在执行的是:"<<min->name<<endl;
			cout<<"其执行时间是:"<<min->exetime<<endl;     
			cout<<"其优先级是:"<<min->prior<<endl<<endl;
			if(min!=Q1.rear)//->next)!=NULL)
				h1->next=min->next;
			else if((min->next)==NULL)
			{	Q1.rear=h1;
				Q1.rear->next=NULL;}
			Enteam(Q2,min);    //min执行完毕后进入就绪待队列
			Deteam(Q2,e);      //等待队列第一个PCB出队
			Enteam(Q1,e);
            cout<<"当前就绪队列为空,所以执行等待队列的PCB"<<endl;
			cout<<"经过执行,当前等待队列里的PCB是:"<<endl;
			PCB b=Q1.front->next;;
			for(i=1;i<=Q1num;i++)
			{	cout<<i<<".  "<<b->name;
				b=b->next;
				cout<<endl;
			}
			cout<<endl;
		}//if((Q1num!=0)&&(Q2num==0))
	}//for
}//Prior


void  Time(team Q1,team Q2){
	//最短执行时间的算法 每次执行就绪队列里时间短的PCB
	//Q1为等待态队列,Q2为就绪态队列
	PCB h1=Q1.front->next;
	PCB h2=Q2.front->next;
	PCB e=(PCB)malloc(sizeof(pcb)); //接收Q1中出队的PCB
	PCB min;//=(PCB)malloc(sizeof(pcb));            //记下优先级最高的PCB
    int mintime;      //记下最高的那个优先级数
	int i,n;
	for(int Q1num=0;h1!=NULL; Q1num++)
			{h1=h1->next;}//记下等待态中PCB数目 
	for(int Q2num=0;h2!=NULL; Q2num++)
			{h2=h2->next;}//记下就绪态中PCB数目
	cout<<"最短执行时间算法:"<<endl;
	for(n=1;n<=NUM;n++){
		if((Q2num!=0)&&(Q1num!=0)){
        h2=Q2.front->next;
		mintime=h2->exetime;
		min=Q2.front->next;//h2;
		for(i=1;i<=Q2num;i++){
			if((mintime>=(h2->exetime))&&((h2->exe)!=1))
			{
				mintime=h2->prior;
				min=h2;
			}//if
			h2=h2->next;
		}//for
		h2=Q2.front;
		while((h2->next)!=min){
			h2=h2->next;
		}//while
		min->exe=1;
		cout<<"第"<<n<<"轮执行"<<endl;
		cout<<"正在执行的是:"<<min->name<<endl;
		cout<<"其优先级是:"<<min->prior<<endl;
        cout<<"其执行时间是:"<<min->exetime<<endl<<endl;
		if(min!=Q2.rear)//->next)!=NULL)
			h2->next=min->next;
		else if((min->next)==NULL)
		{	Q2.rear=h2;
			Q2.rear->next=NULL;}
		Enteam(Q1,min);    //min执行完毕后进入等待队列
		Deteam(Q1,e);      //等待队列第一个PCB出队
		Enteam(Q2,e);
		cout<<"经过执行,当前等待队列里的PCB是:"<<endl;
		PCB a,b;
		a=Q1.front->next;
		b=Q2.front->next;
		for(i=1;i<=Q1num;i++)
		{	cout<<i<<".  "<<a->name;
			a=a->next;
			cout<<endl;}
		cout<<endl;
	    cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
		for(i=1;i<=Q2num;i++)
		{	cout<<i<<".  "<<b->name;
			b=b->next;
			cout<<endl;

		}
		cout<<endl;

	}//if((Q2num!=0)&&(Q1num!=0))
		
		if((Q2num!=0)&&(Q1num==0)){
		//等待队列为空
            h2=Q2.front->next;
		    mintime=h2->exetime;
			min=Q2.front->next;//h2;
			for(i=1;i<=Q2num;i++){
				if((mintime>=(h2->exetime))&&((h2->exe)!=1))
			{
				mintime=h2->exetime;
				min=h2;
			}//if
			h2=h2->next;
			}//for
			h2=Q2.front;
			while((h2->next)!=min){
				h2=h2->next;
				}//while
			min->exe=1;
			cout<<"第"<<n<<"轮执行"<<endl;
			cout<<"正在执行的是:"<<min->name<<endl;
			cout<<"其优先级是:"<<min->prior<<endl;
			cout<<"其执行时间是:"<<min->exetime<<endl<<endl;
			if(min!=Q2.rear)
				h2->next=min->next;
			else if((min->next)==NULL)
			{	Q2.rear=h2;
				Q2.rear->next=NULL;}
			Enteam(Q1,min);    //min执行完毕后进入等待队列
			Deteam(Q1,e);      //等待队列第一个PCB出队
			Enteam(Q2,e);
            cout<<"经过执行,当前等待队列为空!"<<endl<<endl;
			cout<<"经过执行,当前就绪队列里的PCB是:"<<endl;
			PCB b=Q2.front->next;;
			for(i=1;i<=Q2num;i++)
			{	cout<<i<<".  "<<b->name;
				b=b->next;
				cout<<endl;
			}
			cout<<endl;
		}//if((Q2num!=0)&&(Q1num==0))
	    	
		  if((Q1num!=0)&&(Q2num==0)){
		   //就绪队列为空
            h1=Q1.front->next;
		    mintime=h1->exetime;
			min=Q1.front->next;//h2;
			for(i=1;i<=Q1num;i++){
				if((mintime>=(h1->exetime))&&((h1->exe)!=1))
			{
				mintime=h1->exetime;
				min=h1;
			}//if
			h1=h1->next;
			}//for
			h1=Q1.front;
			while((h1->next)!=min){
				h1=h1->next;
				}//while
			min->exe=1;
			cout<<"第"<<n<<"轮执行"<<endl;
			cout<<"正在执行的是:"<<min->name<<endl;
			cout<<"其优先级是:"<<min->prior<<endl;
			cout<<"其执行时间是:"<<min->exetime<<endl<<endl;
			if(min!=Q1.rear)//->next)!=NULL)
				h1->next=min->next;
			else if((min->next)==NULL)
			{	Q1.rear=h1;
				Q1.rear->next=NULL;}
			Enteam(Q2,min);    //min执行完毕后进入就绪待队列
			Deteam(Q2,e);      //等待队列第一个PCB出队
			Enteam(Q1,e);
            cout<<"当前就绪队列为空,所以执行等待队列的PCB"<<endl;
			cout<<"经过执行,当前等待队列里的PCB是:"<<endl;
			PCB b=Q1.front->next;;
			for(i=1;i<=Q1num;i++)
			{	cout<<i<<".  "<<b->name;
				b=b->next;
				cout<<endl;
			}
			cout<<endl;
		}//if((Q1num!=0)&&(Q2num==0))
	}//for
}//Prior

void main() {
	team Q1,Q2,Q3,Q4,Q5,Q6;
	char a,b;
	cout<<"你将依次执行以下三种算法:"<<endl;
	cout<<"1.先来先服务算法"<<endl;
    cout<<"2.基于优先数的调度算法"<<endl;
	cout<<"3.最短执行时间调度算法"<<endl;
	cout<<endl;
	cout<<"执行先来先服务算法"<<endl<<endl;
    Initteam(Q1);
    Initteam(Q2);           //初始化队列
    Inti(Q1,Q2);           //随机产生0,1,状态为1的放在等待态,0的放在就绪态
    FIFO(Q1,Q2);           //先来先出调度算法
    FIFOtime(Q1,Q2);      //计算FIFO平均周转时间和平均带权周转时间
	cout<<"继续执行基于优先数的调度算法吗?(y/n)"<<endl;
    cin>>a;
	cout<<endl;
	if(a=='y'||a=='Y'){
	cout<<"执行基于优先数的调度算法"<<endl<<endl;
	Initteam(Q3);
	Initteam(Q4);           //初始化队列
	Inti(Q3,Q4);           //随机产生0,1,状态为1的放在等待态,0的放在就绪态
	Prior(Q3,Q4);}          //基于优先级算法
	cout<<"继续执行最短执行时间调度算法吗?(y/n)"<<endl;
	cin>>b;
	cout<<endl;
	if(b=='y'||b=='Y'){
	cout<<"执行最短执行时间调度算法"<<endl<<endl;
	Initteam(Q5);
	Initteam(Q6);           //初始化队列
	Inti(Q5,Q6);			//随机产生0,1,状态为1的放在等待态,0的放在就绪态
	Time(Q5,Q6);}          //最短执行时间算法
} 

⌨️ 快捷键说明

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