structJob_type { char num; // 作业号 int arrival_time; // 到达时间 int runtime; // 服务时间 } x, job[SIZE];
voidload() { int i; printf("\nEnter the Jobs' datas:\n"); for (i = 0; i < SIZE; i++) { scanf(" %c,%d,%d;", &job[i].num, &job[i].arrival_time, &job[i].runtime); } }
voidfcfs() { int i; int start_time[SIZE]; // 开始时间 int completion_time[SIZE]; // 完成时间 int turnaround_time[SIZE]; // 周转时间 int current_time = 0; // 当前时间
for (i = 0; i < SIZE; i++) { // 如果当前时间小于作业到达时间,则跳到作业到达时间 if (current_time < job[i].arrival_time) { current_time = job[i].arrival_time; }
voidsjf()//短作业调度函数 { int i; int start_time[SIZE]; // 开始时间 int completion_time[SIZE]; // 完成时间 int turnaround_time[SIZE]; // 周转时间 int visited[SIZE] = {0}; // 标记是否已调度 int current_time = 0; // 当前时间 int completed_jobs = 0; // 已完成的作业数量
while (completed_jobs < SIZE) { int shortest_index = -1; int shortest_runtime = 1e9; // 假设一个很大的值
// 找到服务时间最短且到达的作业 for (i = 0; i < SIZE; i++) { if (!visited[i] && job[i].arrival_time <= current_time && job[i].runtime < shortest_runtime) { shortest_runtime = job[i].runtime; shortest_index = i; } }
// 如果没有可调度的作业,跳到下一个作业的到达时间 if (shortest_index == -1) { for (i = 0; i < SIZE; i++) { if (!visited[i]) { current_time = job[i].arrival_time; break; } } continue; }