操作系统进程调度C语言代码

  • 格式:docx
  • 大小:36.81 KB
  • 文档页数:4

操作系统进程调度C语言代码

#include

#define MAX 20

//进程控制块

typedef struct PCB

char name[10]; // 进程名

int AT; // 到达时间

int BT; // 服务时间

int Pri; // 优先数

int FT; // 完成时间

int WT; //等待时间

int RT; // 响应时间

int position; // 第几号进程

int flag; // 用来判断进程是否执行过

}PCB;

//进程调度

void schedule(PCB a[], int n, int alg)

int i, j, k, flag, temp;

int count = 0; int pri_max = 0;

float ATAT = 0.0;

float AWT = 0.0;

float ART = 0.0;

PCBt;

//各种算法的调度

if (alg == 1)

printf("采用先来先服务调度:\n");

//根据到达时间执行

for (i = 0; i < n; i++)

for (j = i + 1; j < n; j++)

if (a[i].AT > a[j].AT)

t=a[i];

a[i]=a[j];

a[j]=t;

}

//按到达时间依次执行

for (i = 0; count != n; i++)

for (j = 0; j < n; j++) //查找第一个到达时间小于等于当前时间的进程

if (a[j].AT <= i && a[j].flag == 0)

//记录运行时间

a[j].BT--;

//如果运行完成,记录完成时间、等待时间、响应时间

if (a[j].BT == 0)

a[j].FT=i+1;

a[j].WT = a[j].FT - a[j].AT - a[j].Pri;

a[j].RT=a[j].WT;

a[j].flag = 1;

count++;

}

else

break;

}

}

}

else if (alg == 2)

printf("采用最短服务时间优先(非抢占)调度:\n"); for (i = 0; count != n; i++)

//找出服务时间最短的进程,并将其放置到最前面

for (j = 0; j < n; j++)