操作系统:FCFS调度算法简单实现
- 由于本人(小白一个)一直以来想要写博客,加上最近学习操作系统,为了巩固自己的学习成果以及加深印象,现在决定开始写博客,可以说这是我的第一篇博客。
- 这篇文章主要描述的计算机操作系统的FCFS(先来先服务)的调度算法,可以用在进程调度和作业调度中。它的基本思想是按进程或作业到达的时间先后顺序进行调度。
- 下面就详细讲下本小白实现此简单算法的基本功能,过程以及思想。
基本功能:
1、输出每个进程的调度时间表
2、上一个进程结束前,下一个进程还没有到达,程序计算周转时间仍然正确
3、进程可以不按到达时间大小排列输入,输出的调度时间表依然正确
首先我们得知道进程是怎么构造的,在这篇文章中我是以结构体数组的形式来构造多个进程,结构体里的各个成分分别表示进程的基本信息,数组的大小为常数 5。
以下是我的进程具体构造:
struct PCB
{
char name[8]; //进程名称
int arrive_time; //到达时间
int run_time; //运行时间
int finish_time; //完成时间
int zhouzhuan_time; //周转时间
float daiquan_time; // 带权周转时间
};
#define N 5
struct PCB pcb[N],temp;
输入进程功能:自定义一个输入函数,设置for循环语句,循环输入,很容易实现
void input()
{
int i;
cout<<"--------------------------------------"<<endl;
cout<<" FCFS调度算法 "<<endl;
cout<<"--------------------------------------"<<endl;
cout<<" 输入五个进程信息:"<<endl;
for ( i=0;i<N;i++)
{
printf("请输入进程名:\n" );
scanf("%s",pcb[i].name);
printf("请输入到达时间:");
scanf("%d",&pcb[i].arrive_time);
printf("请输入要运行时间:");
scanf("%d",&pcb[i].run_time);
}
cout<<"各进程:"<<endl;
for( i=0;i<N;i++)
{
printf("%s ",pcb[i].name);
printf("%d ",pcb[i].arrive_time);
printf("%d \n",pcb[i].run_time);
}
}
要实现进程无需按到达时间先后输入,则需要将输入的进程按照到达时间先后进行排序,然后计算各个进程的各个时间。这里我设置了一个排序自定义函数。
void sort()//按照到达时间对进程进行排序
{
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{