#include <stdio.h> #include <stdlib.h>

#define MAX_PROCESS 10

typedef struct { int pid; // 进程ID int arrivalTime; // 到达时间 int burstTime; // 作业长度 int remainingTime; // 剩余计算时间 int ioTime; // I/O时间 int waitingTime; // 等待时间 int turnaroundTime; // 周转时间 int completionTime; // 完成时间 int status; // 进程状态:0-就绪,1-执行,2-阻塞 } Process;

void calculateWaitingTime(Process *processes, int n) { int currentTime = 0; int completed = 0;

// 循环直到所有进程完成
while (completed < n) {
    int shortestJob = -1;
    int shortestBurstTime = INT_MAX;

    // 找到最短作业的进程
    for (int i = 0; i < n; i++) {
        if (processes[i].arrivalTime <= currentTime && processes[i].status == 0) {
            if (processes[i].burstTime < shortestBurstTime) {
                shortestBurstTime = processes[i].burstTime;
                shortestJob = i;
            }
        }
    }

    if (shortestJob == -1) {
        currentTime++; // 如果没有可执行的进程,则时间+1
        continue;
    }

    Process *process = &processes[shortestJob];
    process->status = 1; // 设置进程状态为执行
    process->waitingTime = currentTime - process->arrivalTime;
    process->completionTime = currentTime + process->burstTime;

    // 更新当前时间和进程状态
    currentTime += process->burstTime;
    process->status = 2; // 设置进程状态为阻塞

    completed++;
}

}

void calculateTurnaroundTime(Process *processes, int n) { for (int i = 0; i < n; i++) { processes[i].turnaroundTime = processes[i].completionTime - processes[i].arrivalTime; } }

void displayProcesses(Process *processes, int n) { printf("进程ID 到达时间 作业长度 等待时间 周转时间\n"); for (int i = 0; i < n; i++) { printf("%d %d %d %d %d\n", processes[i].pid, processes[i].arrivalTime, processes[i].burstTime, processes[i].waitingTime, processes[i].turnaroundTime); } }

int main() { int n; Process processes[MAX_PROCESS];

printf("请输入进程数:");
scanf("%d", &n);

printf("请输入进程信息:\n");
for (int i = 0; i < n; i++) {
    printf("进程ID:");
    scanf("%d", &processes[i].pid);
    printf("到达时间:");
    scanf("%d", &processes[i].arrivalTime);
    printf("作业长度:");
    scanf("%d", &processes[i].burstTime);
    printf("I/O时间:");
    scanf("%d", &processes[i].ioTime);
    processes[i].remainingTime = processes[i].burstTime;
    processes[i].status = 0;
}

calculateWaitingTime(processes, n);
calculateTurnaroundTime(processes, n);
displayProcesses(processes, n);

return 0;

}


原文地址: https://www.cveoy.top/t/topic/pqjo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录