int n, bt[20], wt[20], tat[20], rt[20], t, q, i, flag, done = 0; float wtAvg = 0, tatAvg = 0; printf("Enter the number of processes: "); scanf("%d", &n); printf("Enter the burst time for each process: "); for(i = 0; i < n; i++) { scanf("%d", &bt[i]); rt[i] = bt[i]; } printf("Enter the time quantum: "); scanf("%d", &q); // Run the processes until all are done for(t = 0; done != n; t++) { flag = 0; for(i = 0; i < n; i++) { if(rt[i] > 0) { flag = 1; if(rt[i] > q) { t += q; rt[i] -= q; } else { t += rt[i]; wt[i] = t - bt[i]; rt[i] = 0; done++; } } } if(flag == 0) { break; } } // Calculate turnaround time for each process for(i = 0; i < n; i++) { tat[i] = bt[i] + wt[i]; } // Calculate average waiting time and turnaround time for(i = 0; i < n; i++) { wtAvg += wt[i]; tatAvg += tat[i]; } wtAvg /= n; tatAvg /= n; // Print the results printf("Process\tBurst Time\tWaiting Time\tTurnaround Time\n"); for(i = 0; i < n; i++) { printf("%d\t\t%d\t\t%d\t\t%d\n", i+1, bt[i], wt[i], tat[i]); } printf("Average waiting time: %.2f\n", wtAvg); printf("Average turnaround time: %.2f\n", tatAvg); }
时间: 2024-02-14 09:35:47 浏览: 101
(STM32)DS18B20程序
这是一个基于时间片轮转的进程调度算法的C语言实现。其中,n表示进程的数量,bt表示每个进程的CPU执行时间,wt表示每个进程的等待时间,tat表示每个进程的周转时间,rt表示每个进程剩余的CPU执行时间,t表示当前时刻,q表示时间片大小,flag表示是否有进程在等待CPU执行,done表示已经完成的进程数量,wtAvg表示平均等待时间,tatAvg表示平均周转时间。
该代码首先读取进程数量n、每个进程的CPU执行时间bt以及时间片大小q,并初始化每个进程的剩余CPU执行时间rt。然后,进入时间片轮转循环,直到所有进程都完成为止。在每个时间片内,遍历所有进程,如果进程的剩余CPU执行时间大于0,则说明该进程正在等待CPU执行,将flag标记为1。如果该进程的剩余CPU执行时间大于时间片大小q,则执行一次时间片,并将进程的剩余CPU执行时间减去q;否则,执行该进程的剩余CPU执行时间,并计算该进程的等待时间wt、周转时间tat,同时将该进程标记为已完成。如果在遍历完所有进程后,flag仍然为0,则说明没有进程在等待CPU执行,跳出时间片轮转循环。最后,计算每个进程的等待时间wt和周转时间tat的平均值wtAvg和tatAvg,并打印出每个进程的CPU执行时间、等待时间和周转时间,以及平均等待时间和周转时间。
阅读全文