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

📄 进程调度.cpp

📁 一个用VC++编定的按优先权调度算法和先来先服务调度算法实现进程调度的程序。
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<iostream.h> 
const int MAXNUM=10;		//定义最大进程数 
//定义进程结构体
typedef struct node
{
	char name[10];		//名称
    int status;			   //状态
    int time;			   //服务时间
    int PRI;			   //优先级
    int finished;		   //完成标志
    int finish_time;       //完成时间
    int wait_time;		   //等待时间
}pcb; 

pcb pcbs[MAXNUM]; 
int count;			//定义数量

//初始化,将数据全部置为空
void initial()
{
	int i; 
    for(i=0;i<MAXNUM;i++)
	{
		strcpy(pcbs[i].name,"");
        pcbs[i].status=0;
        pcbs[i].time=0;
        pcbs[i].PRI=0; 
        pcbs[i].finished=0;
        pcbs[i].wait_time=0;
        pcbs[i].finish_time=0;
	} 
    count=0;
} 


int input() //输入进程信息
{   
	int i; 
    count=0;
    cout<<"*******************************"<<endl;
    cout<<"**进  程  调  度  系   统    **"<<endl;
    cout<<"**廖德云  计算机06级1班54号  **"<<endl;
    cout<<"*******************************"<<endl;
    cout<<"                               "<<endl;
    cout<<"请输入就绪进程数(最大数为10):"<<endl;
    cin>>i;
    while(i)
	{
		cout<<"---->请输入第"<<count+1<<"条记录<----"<<endl;
        cout<<"^^^^…^^^^^请输入进程名: ^^^^^…^^^^"<<endl;
        scanf("%s",pcbs[count].name);
        cout<<"^^^…^^^^^^请输入服务时间:^^^^^…^^^"<<endl;
        scanf("%d",&pcbs[count].time);
        cout<<"请输入进程优先级(数越小,优先级越高):"<<endl;
        scanf("%d",&pcbs[count].PRI);
        count++;
        i--;
	}

    //显示所输入的信息
    cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
    cout<<"所有进程信息:"<<endl;
    cout<<"进程名     服务时间    优先级"<<endl;
    for(i=0;i<count;i++)
	{
		cout<<"  "<<pcbs[i].name<<"            "<<pcbs[i].time<<"         "<<pcbs[i].PRI<<endl;
	}
    return(1);
}
  //将数据的完成时间和等待时间和完成标志置为0,以供其他算法使用
void init()
{ 
	int i; 

    for(i=0;i<MAXNUM;i++)
	{ 
		pcbs[i].finished=0;
        pcbs[i].wait_time=0;
		pcbs[i].finish_time=0;
	}
} 

//优先级调度算法

int PRI()
{
	int i,j,p;
    int passed_time=0;
    int total; 
    int queue[MAXNUM];			//定义队列
    int current_PRI; 
    for(i=0;i<count;i++)
	{
		current_PRI=100;
        for(j=0;j<count;j++)
		{
			if((pcbs[j].finished==0)&&(pcbs[j].PRI<current_PRI))
			{
				p=j;
                current_PRI=pcbs[j].PRI;
			}
		}
        queue[i]=p;
        pcbs[p].finished=1;
        pcbs[p].wait_time+=passed_time;
    	pcbs[p].finish_time=pcbs[p].wait_time+pcbs[p].time;
        passed_time+=pcbs[p].time;
	} 

 
    cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
    cout<<"优先级调度算法:"<<endl;
    cout<<"进程名   等待时间     完成时间"<<endl;
    for(i=0;i<count;i++)
	{
		cout<<"  "<<pcbs[queue[i]].name<<"        "<<pcbs[queue[i]].wait_time<<"             "<<pcbs[queue[i]].finish_time<<endl;
	} 

    total=0;
    for(i=0;i<count;i++)
	{
		total+=pcbs[i].wait_time;
	}
    return total;
} 

//先来先服务算法
int FCFS()
{
	int i,j;
    int total; 
    //输出数据结果
    cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
    cout<<"FCFS调度算法:"<<endl;
    cout<<"进程名   等待时间   完成时间"<<endl;
    for(i=0;i<count;i++)
	{
		pcbs[i].finish_time=pcbs[i].wait_time+pcbs[i].time;
        cout<<"  "<<pcbs[i].name<<"         "<<pcbs[i].wait_time<<"          "<<pcbs[i].finish_time<<endl;
        for(j=i+1;j<count;j++)
		{
			pcbs[j].wait_time+=pcbs[i].time;
		}
	}
    total=0;
    for(i=0;i<count;i++)
	{
		total+=pcbs[i].wait_time;
	}
    return total;
} 

//主函数
void main()
{
	int flag; 
    int fcfstotal;
    int PRItotal;

    initial();       //调用初始化函数
    flag=input(); //调用输入进和信息函数
    if(flag==1)
	{
		fcfstotal=FCFS();
        init(); 
        PRItotal=PRI();
	}
    //输出两种算法的总体情况
    cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
    cout<<"调    度    算法   "<<"总等待时间  "<<"平均等待时间"<<endl;
    cout<<"先来先服务  算法:       "<<fcfstotal<<"           "<<fcfstotal/count<<endl;
    cout<<"优先  权    算法:       "<<PRItotal<<"           "<<PRItotal/count<<endl;
    cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
}

⌨️ 快捷键说明

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