#include stdioh#include stdlibh#define MAX_PROCESS 10typedef struct int pid; 进程ID int arrivalTime; 到达时间 int burstTime; 作业长度 int remainingTime; 剩余计算时间 int ioTime; IO时间 int waiti
#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\t到达时间\t作业长度\t等待时间\t周转时间\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\t\t%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/hJkL 著作权归作者所有。请勿转载和采集!