一、实验目的
模拟作业调度算法,学习作业在操作系统中的调度过程,加深对作业管理的理解。
二、实验内容
本实验模拟单处理器系统的作业调度,加深对作业调度算法的理解。用某种语言编程实现先 来先服务、短作业优先和最高响应比优先算法。有一些简单的界面,能够运行,仿真操作系统中 作业调度的原理和过程。
(1)按照先来先服务
(2)按照最短作业优先
(3)按照最高响应比优先
三、实验原理
作业调度算法主要有先来先服务法 FCFS、短作业优先法 SJF、最高响应比优先法、定时轮转 法等。本实验响应比计算公式为:RP = (等待时间+要求服务时间)/要求服务时间。
四、代码实现
(1)先来先服务
void fcfs(int num) //先来先服务
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < 12; j++) {
workfcfs[i][j] = work[i][j];
}
}
int i = 0;
//开始时间
workfcfs[i][4] = workfcfs[i][1];
workfcfs[i][5] = workfcfs[i][2];
//完成时间
workfcfs[i][6] = workfcfs[i][4] + (workfcfs[i][5] + workfcfs[i][3]) / 60;
workfcfs[i][7] = (workfcfs[i][5] + workfcfs[i][3]) % 60;
//等待时间
workfcfs[i][8] = 0;
//周转时间
workfcfs[i][9] = (workfcfs[i][6] * 60 + workfcfs[i][7]) - (workfcfs[i][1] * 60 + workfcfs[i][2]);
//周转系数
workfcfs[i][10] = (workfcfs[i][9]) * 1.0 / (workfcfs[i][3]);
i++;
for (; i < num; i++) {
if ((workfcfs[i][1] * 60 + workfcfs[i][2]) >= (workfcfs[i - 1][6] * 60 + workfcfs[i - 1][7])) {
workfcfs[i][4] = workfcfs[i][1];
workfcfs[i][5] = workfcfs[i][2];
}
else
{
workfcfs[i][4] = workfcfs[i-1][6];
workfcfs[i][5] = workfcfs[i-1][7];
}
//完成时间
workfcfs[i][6] = workfcfs[i][4] + (workfcfs[i][5] + workfcfs[i][3]) / 60;
workfcfs[i][7] = (workfcfs[i][5] + workfcfs[i][3]) % 60;
//等待时间
workfcfs[i][8] = (workfcfs[i][4] * 60 + workfcfs[i][5]) - (workfcfs[i][1] * 60 + workfcfs[i][2]);
//周转时间
workfcfs[i][9] = (workfcfs[i][6] * 60 + workfcfs[i][7]) - (workfcfs[i][1] * 60 + workfcfs[i][2]);
//周转系数
workfcfs[i][10] = (workfcfs[i][9]) * 1.0 / (workfcfs[i][3]);
}
}
void printfcfs(int num) //输出先来先服务
{
float pjzz = 0;//平均周转时间
float dqpjzz = 0;//平均带权周转时间
printf("\n模拟进程FCFS(先来先服务)调度的输出结果:\n");
printf("作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间\n");
for (int i = 0; i < num; i++) {
printf("%d%12s %02d:%02d %d(分钟)\t ", workfcfs[i][0], workname[i],workfcfs[i][1],workfcfs[i][2],workfcfs[i][3]);
printf("%02d:%02d %02d:%02d\t %d(分钟)\t%d(分钟)\n",workfcfs[i][4],workfcfs[i][5],workfcfs[i][6],workfcfs[i][7],workfcfs[i][8],workfcfs[i][9]);
pjzz += workfcfs[i][9];
dqpjzz += workfcfs[i][10];
}
printf("平均周转时间为:%.2f", pjzz /num);
printf("\n平均带权周转时间为:%.2f\n\n", dqpjzz /num);
}
(2)输出最短作业优先
int findshort(int now,int num) //寻找已经到达的最短作业
{
int shortID = worksjf[0][0]-1;
//先寻找已经到达的作业中有没有符合要求的
for (int i = 1; i < num; i++) {
if (worksjf[i][1] * 60 + worksjf[i][2] <= now && worksjf[i][3] <= maxtime&&worksjf[i][11]==0) {
shortID = worksjf[i][0]-1;
}
}
//假如已到达时间内没有作业,就找到达时间外的
if(shortID==worksjf[0][0]-1){
for (int j = 1; j < num; j++) {
if (worksjf[j][3] <=maxtime && worksjf[j][11] == 0) {
shortID = worksjf[j][0]-1;
}
}
}
//如果都没找到,就返回一个不存在的值,可以自己调
if (shortID ==0)return 6;
worksjf[shortID][11] = 1;
return shortID;
}
void sjf(int num) //最短作业优先
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < 12; j++) {
worksjf[i][j] = work[i][j];
}
}
int i = 0;
//开始时间
worksjf[i][4] = worksjf[i][1];
worksjf[i][5] = worksjf[i][2];
//完成时间
worksjf[i][6] = worksjf[i][4] + (worksjf[i][5] + worksjf[i][3]) / 60;
worksjf[i][7] = (worksjf[i][5] + worksjf[i][3]) % 60;
//等待时间
worksjf[i][8] = 0;
//周转时间
worksjf[i][9] = (worksjf[i][6] * 60 + worksjf[i][7]) - (worksjf[i][1] * 60 + worksjf[i][2]);
//周转系数
worksjf[i][10] = (worksjf[i][9]) * 1.0 / (worksjf[i][3]);
worksjf[i][11] = 1;
worksjfid[i]=worksjf[i][0]-1;
int ID = i;
int now= worksjf[i][6] * 60 + worksjf[i][7];
i++;
for (; i < num; i++) {
int lastID = ID;
ID = findshort(now, num);
worksjfid[i] = ID;
if ((worksjf[ID][1] * 60 + worksjf[ID][2]) >= (worksjf[lastID][6] * 60 + worksjf[lastID][7])) {
worksjf[ID][4] = worksjf[ID][1];
worksjf[ID][5] = worksjf[ID][2];
}
else
{
worksjf[ID][4] = worksjf[lastID][6];
worksjf[ID][5] = worksjf[lastID][7];
}
//完成时间
worksjf[ID][6] = worksjf[ID][4] + (worksjf[ID][5] + worksjf[ID][3]) / 60;
worksjf[ID][7] = (worksjf[ID][5] + worksjf[ID][3]) % 60;
now = worksjf[ID][6] * 60 + worksjf[ID][7];
//等待时间
worksjf[ID][8] = (worksjf[ID][4] * 60 + worksjf[ID][5]) - (worksjf[ID][1] * 60 + worksjf[ID][2]);
//周转时间
worksjf[ID][9] = (worksjf[ID][6] * 60 + worksjf[ID][7]) - (worksjf[ID][1] * 60 + worksjf[ID][2]);
//周转系数
worksjf[ID][10] = (worksjf[ID][9]) * 1.0 / (worksjf[ID][3]);
}
}
void printsjf(int num) {
float pjzz = 0;//平均周转时间
float dqpjzz = 0;//平均带权周转时间
printf("\n模拟进程SJF(最短作业优先)调度的输出结果:\n");
printf("作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间\n");
for (int k = 0; k < num; k++) {
int i = worksjfid[k];
printf("%d%12s %02d:%02d %d(分钟)\t ", worksjf[i][0],workname[i], worksjf[i][1], worksjf[i][2], worksjf[i][3]);
printf("%02d:%02d %02d:%02d\t %d(分钟)\t%d(分钟)\n", worksjf[i][4], worksjf[i][5], worksjf[i][6], worksjf[i][7], worksjf[i][8], worksjf[i][9]);
pjzz += worksjf[i][9];
dqpjzz += worksjf[i][10];
}
printf("平均周转时间为:%.2f", pjzz / num);
printf("\n平均带权周转时间为:%.2f\n\n", dqpjzz / num);
}
(3)按照最高响应比优先
int findmh(int now, int num,int lastID) //寻找已经到达的最高响应比作业
{
int starttime = 0, waittime = 0;
float high = 0;
int ID = 6;
for (int i = 1; i < num; i++) {
if (workmh[i][11] == 0) {
//先计算开始时间
if ((workmh[i][1] * 60 + workmh[i][2]) >= (workmh[lastID][6] * 60 + workmh[lastID][7])) {
starttime = workmh[i][1] * 60 + workmh[i][2];
}
else
{
starttime = workmh[lastID][6] * 60 + workmh[lastID][7];
}
//计算等待时间
waittime = starttime - (workmh[i][1] * 60 + workmh[i][2]);
//计算最高响应比并记录当前ID
float d=(waittime + workmh[i][3])*(1.0) / workmh[i][3];
if (d > high) {
high = d;
ID = i;
}
}
}
if (ID == 6)return 6;
workmh[ID][11] = 1;
return ID;
}
void mostxy(int num) //最高响应比优先
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < 12; j++) {
workmh[i][j] = work[i][j];
}
}
int i = 0;
//开始时间
workmh[i][4] = workmh[i][1];
workmh[i][5] = workmh[i][2];
//完成时间
workmh[i][6] = workmh[i][4] + (workmh[i][5] + workmh[i][3]) / 60;
workmh[i][7] = (workmh[i][5] + workmh[i][3]) % 60;
//等待时间
workmh[i][8] = 0;
//周转时间
workmh[i][9] = (workmh[i][6] * 60 + workmh[i][7]) - (workmh[i][1] * 60 + workmh[i][2]);
//周转系数
workmh[i][10] = (workmh[i][9]) * 1.0 / (workmh[i][3]);
workmh[i][11] = 1;
workmhid[i] = workmh[i][0] - 1;
int ID = i;
int now = workmh[i][6] * 60 + workmh[i][7];
i++;
for (; i < num; i++) {
int lastID = ID;
ID = findmh(now, num,lastID);
workmhid[i] = ID;
if ((workmh[ID][1] * 60 + workmh[ID][2]) >= (workmh[lastID][6] * 60 + workmh[lastID][7])) {
workmh[ID][4] = workmh[ID][1];
workmh[ID][5] = workmh[ID][2];
}
else
{
workmh[ID][4] = workmh[lastID][6];
workmh[ID][5] = workmh[lastID][7];
}
//完成时间
workmh[ID][6] = workmh[ID][4] + (workmh[ID][5] + workmh[ID][3]) / 60;
workmh[ID][7] = (workmh[ID][5] + workmh[ID][3]) % 60;
now = workmh[ID][6] * 60 + workmh[ID][7];
//等待时间
workmh[ID][8] = (workmh[ID][4] * 60 + workmh[ID][5]) - (workmh[ID][1] * 60 + workmh[ID][2]);
//周转时间
workmh[ID][9] = (workmh[ID][6] * 60 + workmh[ID][7]) - (workmh[ID][1] * 60 + workmh[ID][2]);
//周转系数
workmh[ID][10] = (workmh[ID][9]) * 1.0 / (workmh[ID][3]);
}
}
void printmh(int num) {
float pjzz = 0;//平均周转时间
float dqpjzz = 0;//平均带权周转时间
printf("\n模拟进程最高响应比调度的输出结果:\n");
printf("作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间\n");
for (int k = 0; k < num; k++) {
int i = workmhid[k];
printf("%d%12s %02d:%02d %d(分钟)\t ", workmh[i][0], workname[i], workmh[i][1], workmh[i][2], workmh[i][3]);
printf("%02d:%02d %02d:%02d\t %d(分钟)\t%d(分钟)\n", workmh[i][4], workmh[i][5], workmh[i][6], workmh[i][7], workmh[i][8], workmh[i][9]);
pjzz += workmh[i][9];
dqpjzz += workmh[i][10];
}
printf("平均周转时间为:%.2f", pjzz / num);
printf("\n平均带权周转时间为:%.2f\n\n", dqpjzz / num);
}
五、实验总结
这个实验用的二维数组存储数据,比较笨重,可以自定义一个类存储数据再用数组存储类,这样更好操作,而且类里面的名字也会比二维数组更好辨识,本文更多的是提供思路,希望有所帮助qwq。
整个代码如下:
#include<iostream>
using namespace std;
int work[10][20];//存放作业数据
int workfcfs[10][20];//fcfs数据
int worksjf[10][20];//sjf数据
int workmh[10][20];//mh数据
char workname[10][10];//存放作业名字
int worksjfid[20];//sjfid顺序
int workmhid[20];//mhid顺序
int maxtime=0;//作业中最长进程时间
/*
work[][0]作业编号
work[][1] work[][2]提交时间
work[][3]要求服务运行时间
work[][4] work[][5]开始时间
work[][6] work[][7]完成时间
work[][8]等待时间
work[][9]周转时间
work[][10]周转系数
work[][11]记录作业是否已调用
*/
int input() {
FILE* file = fopen("作业调度.txt", "rt");
printf("作业编号 作业名称 提交时间 要求服务运行时间(分钟)\n");
int i = 0;
while (1) {
if (EOF == fscanf(file, "%d %s %d:%d %d", &work[i][0],&workname[i],&work[i][1], &work[i][2], &work[i][3]))break;
printf("%d%13s %02d:%02d %8d\n", work[i][0], workname[i], work[i][1], work[i][2], work[i][3]);
work[i][11] = 0;//当前未执行
if (work[i][3] > maxtime)maxtime = work[i][3];
i++;
}
return i;
}
void fcfs(int num) //先来先服务
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < 12; j++) {
workfcfs[i][j] = work[i][j];
}
}
int i = 0;
//开始时间
workfcfs[i][4] = workfcfs[i][1];
workfcfs[i][5] = workfcfs[i][2];
//完成时间
workfcfs[i][6] = workfcfs[i][4] + (workfcfs[i][5] + workfcfs[i][3]) / 60;
workfcfs[i][7] = (workfcfs[i][5] + workfcfs[i][3]) % 60;
//等待时间
workfcfs[i][8] = 0;
//周转时间
workfcfs[i][9] = (workfcfs[i][6] * 60 + workfcfs[i][7]) - (workfcfs[i][1] * 60 + workfcfs[i][2]);
//周转系数
workfcfs[i][10] = (workfcfs[i][9]) * 1.0 / (workfcfs[i][3]);
i++;
for (; i < num; i++) {
if ((workfcfs[i][1] * 60 + workfcfs[i][2]) >= (workfcfs[i - 1][6] * 60 + workfcfs[i - 1][7])) {
workfcfs[i][4] = workfcfs[i][1];
workfcfs[i][5] = workfcfs[i][2];
}
else
{
workfcfs[i][4] = workfcfs[i-1][6];
workfcfs[i][5] = workfcfs[i-1][7];
}
//完成时间
workfcfs[i][6] = workfcfs[i][4] + (workfcfs[i][5] + workfcfs[i][3]) / 60;
workfcfs[i][7] = (workfcfs[i][5] + workfcfs[i][3]) % 60;
//等待时间
workfcfs[i][8] = (workfcfs[i][4] * 60 + workfcfs[i][5]) - (workfcfs[i][1] * 60 + workfcfs[i][2]);
//周转时间
workfcfs[i][9] = (workfcfs[i][6] * 60 + workfcfs[i][7]) - (workfcfs[i][1] * 60 + workfcfs[i][2]);
//周转系数
workfcfs[i][10] = (workfcfs[i][9]) * 1.0 / (workfcfs[i][3]);
}
}
void printfcfs(int num) {
float pjzz = 0;//平均周转时间
float dqpjzz = 0;//平均带权周转时间
printf("\n模拟进程FCFS(先来先服务)调度的输出结果:\n");
printf("作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间\n");
for (int i = 0; i < num; i++) {
printf("%d%12s %02d:%02d %d(分钟)\t ", workfcfs[i][0], workname[i],workfcfs[i][1],workfcfs[i][2],workfcfs[i][3]);
printf("%02d:%02d %02d:%02d\t %d(分钟)\t%d(分钟)\n",workfcfs[i][4],workfcfs[i][5],workfcfs[i][6],workfcfs[i][7],workfcfs[i][8],workfcfs[i][9]);
pjzz += workfcfs[i][9];
dqpjzz += workfcfs[i][10];
}
printf("平均周转时间为:%.2f", pjzz /num);
printf("\n平均带权周转时间为:%.2f\n\n", dqpjzz /num);
}
int findshort(int now,int num) //寻找已经到达的最短作业
{
int shortID = worksjf[0][0]-1;
for (int i = 1; i < num; i++) {
if (worksjf[i][1] * 60 + worksjf[i][2] <= now && worksjf[i][3] <= maxtime&&worksjf[i][11]==0) {
shortID = worksjf[i][0]-1;
}
}
if(shortID==worksjf[0][0]-1){
for (int j = 1; j < num; j++) {
if (worksjf[j][3] <=maxtime && worksjf[j][11] == 0) {
shortID = worksjf[j][0]-1;
}
}
}
if (shortID ==0)return 6;
worksjf[shortID][11] = 1;
return shortID;
}
void sjf(int num) //最短作业优先
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < 12; j++) {
worksjf[i][j] = work[i][j];
}
}
int i = 0;
//开始时间
worksjf[i][4] = worksjf[i][1];
worksjf[i][5] = worksjf[i][2];
//完成时间
worksjf[i][6] = worksjf[i][4] + (worksjf[i][5] + worksjf[i][3]) / 60;
worksjf[i][7] = (worksjf[i][5] + worksjf[i][3]) % 60;
//等待时间
worksjf[i][8] = 0;
//周转时间
worksjf[i][9] = (worksjf[i][6] * 60 + worksjf[i][7]) - (worksjf[i][1] * 60 + worksjf[i][2]);
//周转系数
worksjf[i][10] = (worksjf[i][9]) * 1.0 / (worksjf[i][3]);
worksjf[i][11] = 1;
worksjfid[i]=worksjf[i][0]-1;
int ID = i;
int now= worksjf[i][6] * 60 + worksjf[i][7];
i++;
for (; i < num; i++) {
int lastID = ID;
ID = findshort(now, num);
worksjfid[i] = ID;
if ((worksjf[ID][1] * 60 + worksjf[ID][2]) >= (worksjf[lastID][6] * 60 + worksjf[lastID][7])) {
worksjf[ID][4] = worksjf[ID][1];
worksjf[ID][5] = worksjf[ID][2];
}
else
{
worksjf[ID][4] = worksjf[lastID][6];
worksjf[ID][5] = worksjf[lastID][7];
}
//完成时间
worksjf[ID][6] = worksjf[ID][4] + (worksjf[ID][5] + worksjf[ID][3]) / 60;
worksjf[ID][7] = (worksjf[ID][5] + worksjf[ID][3]) % 60;
now = worksjf[ID][6] * 60 + worksjf[ID][7];
//等待时间
worksjf[ID][8] = (worksjf[ID][4] * 60 + worksjf[ID][5]) - (worksjf[ID][1] * 60 + worksjf[ID][2]);
//周转时间
worksjf[ID][9] = (worksjf[ID][6] * 60 + worksjf[ID][7]) - (worksjf[ID][1] * 60 + worksjf[ID][2]);
//周转系数
worksjf[ID][10] = (worksjf[ID][9]) * 1.0 / (worksjf[ID][3]);
}
}
void printsjf(int num) {
float pjzz = 0;//平均周转时间
float dqpjzz = 0;//平均带权周转时间
printf("\n模拟进程SJF(最短作业优先)调度的输出结果:\n");
printf("作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间\n");
for (int k = 0; k < num; k++) {
int i = worksjfid[k];
printf("%d%12s %02d:%02d %d(分钟)\t ", worksjf[i][0],workname[i], worksjf[i][1], worksjf[i][2], worksjf[i][3]);
printf("%02d:%02d %02d:%02d\t %d(分钟)\t%d(分钟)\n", worksjf[i][4], worksjf[i][5], worksjf[i][6], worksjf[i][7], worksjf[i][8], worksjf[i][9]);
pjzz += worksjf[i][9];
dqpjzz += worksjf[i][10];
}
printf("平均周转时间为:%.2f", pjzz / num);
printf("\n平均带权周转时间为:%.2f\n\n", dqpjzz / num);
}
int findmh(int now, int num,int lastID) //寻找已经到达的最高响应比作业
{
int starttime = 0, waittime = 0;
float high = 0;
int ID = 6;
for (int i = 1; i < num; i++) {
if (workmh[i][11] == 0) {
if ((workmh[i][1] * 60 + workmh[i][2]) >= (workmh[lastID][6] * 60 + workmh[lastID][7])) {
starttime = workmh[i][1] * 60 + workmh[i][2];
}
else
{
starttime = workmh[lastID][6] * 60 + workmh[lastID][7];
}
waittime = starttime - (workmh[i][1] * 60 + workmh[i][2]);
if ((waittime + workmh[i][3]) / workmh[i][3] > high) {
high = (waittime + workmh[i][3]) / workmh[i][3];
ID = i;
}
}
}
if (ID == 6)return 6;
workmh[ID][11] = 1;
return ID;
}
void mostxy(int num) //最高响应比优先
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < 12; j++) {
workmh[i][j] = work[i][j];
}
}
int i = 0;
//开始时间
workmh[i][4] = workmh[i][1];
workmh[i][5] = workmh[i][2];
//完成时间
workmh[i][6] = workmh[i][4] + (workmh[i][5] + workmh[i][3]) / 60;
workmh[i][7] = (workmh[i][5] + workmh[i][3]) % 60;
//等待时间
workmh[i][8] = 0;
//周转时间
workmh[i][9] = (workmh[i][6] * 60 + workmh[i][7]) - (workmh[i][1] * 60 + workmh[i][2]);
//周转系数
workmh[i][10] = (workmh[i][9]) * 1.0 / (workmh[i][3]);
workmh[i][11] = 1;
workmhid[i] = workmh[i][0] - 1;
int ID = i;
int now = workmh[i][6] * 60 + workmh[i][7];
i++;
for (; i < num; i++) {
int lastID = ID;
ID = findmh(now, num,lastID);
workmhid[i] = ID;
if ((workmh[ID][1] * 60 + workmh[ID][2]) >= (workmh[lastID][6] * 60 + workmh[lastID][7])) {
workmh[ID][4] = workmh[ID][1];
workmh[ID][5] = workmh[ID][2];
}
else
{
workmh[ID][4] = workmh[lastID][6];
workmh[ID][5] = workmh[lastID][7];
}
//完成时间
workmh[ID][6] = workmh[ID][4] + (workmh[ID][5] + workmh[ID][3]) / 60;
workmh[ID][7] = (workmh[ID][5] + workmh[ID][3]) % 60;
now = workmh[ID][6] * 60 + workmh[ID][7];
//等待时间
workmh[ID][8] = (workmh[ID][4] * 60 + workmh[ID][5]) - (workmh[ID][1] * 60 + workmh[ID][2]);
//周转时间
workmh[ID][9] = (workmh[ID][6] * 60 + workmh[ID][7]) - (workmh[ID][1] * 60 + workmh[ID][2]);
//周转系数
workmh[ID][10] = (workmh[ID][9]) * 1.0 / (workmh[ID][3]);
}
}
void printmh(int num) {
float pjzz = 0;//平均周转时间
float dqpjzz = 0;//平均带权周转时间
printf("\n模拟进程最高响应比调度的输出结果:\n");
printf("作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间\n");
for (int k = 0; k < num; k++) {
int i = workmhid[k];
printf("%d%12s %02d:%02d %d(分钟)\t ", workmh[i][0], workname[i], workmh[i][1], workmh[i][2], workmh[i][3]);
printf("%02d:%02d %02d:%02d\t %d(分钟)\t%d(分钟)\n", workmh[i][4], workmh[i][5], workmh[i][6], workmh[i][7], workmh[i][8], workmh[i][9]);
pjzz += workmh[i][9];
dqpjzz += workmh[i][10];
}
printf("平均周转时间为:%.2f", pjzz / num);
printf("\n平均带权周转时间为:%.2f\n\n", dqpjzz / num);
}
int main()
{
int num=input();//作业个数
int choose;
while (1) {
printf("请选择遵循的优先级(1、先来先服务;2、最短作业优先;3、最高响应比优先;4、退出:");
scanf("%d", &choose);
switch (choose)
{
case 1:
fcfs(num);
printfcfs(num);
break;
case 2:
sjf(num);
printsjf(num);
break;
case 3:
mostxy(num);
printmh(num);
break;
case 4:
exit(0);
default:
break;
}
}
return 0;
}
所用文本文件(作业调度.txt)如下:
1 JA 02:40 20
2 JB 02:50 30
3 JC 02:55 10
4 JD 03:00 24
5 JE 03:05 6