กำหนด n กระบวนการ P1, P2, P3... พร้อม burst time หา average waiting time และ average turnaround time ด้วย FCFS CPU Scheduling
Waiting Time และ Turnaround Time:
- Turnaround Time = Completion - Submission
- Waiting Time = Turnaround Time - Burst Time
FCFS Scheduling: First Come First Served (FCFS) หรือ First In First Out (FIFO) CPU จัดสรรให้กระบวนการตามลำดับใน ready queue แบบ non-preemptive (ไม่สลับกระบวนการจนกว่าจะจบหรือ I/O interrupt)
ตัวอย่าง
4 กระบวนการมาในลำดับ P2, P3, P1 execution time: P1=15, P2=3, P3=3 arrival time = 0
Gantt chart: P2(0-3) P3(3-6) P1(6-21)
Waiting time: P2=0, P3=3, P1=6 Average = 3 msec
อัลกอริทึม
waitingtime(proc, n, bt, wt):
wt[0] = 0
for i = 1 to n-1: wt[i] = bt[i-1] + wt[i-1]
turnaroundtime(proc, n, bt, wt, tat):
for i = 0 to n-1: tat[i] = bt[i] + wt[i]
avgtime(proc, n, bt):
เรียก waitingtime, turnaroundtime
คำนวณ total_wt, total_tat
แสดงตารางและค่าเฉลี่ย
ตัวอย่างโค้ด
#include <stdio.h>
int waitingtime(int proc[], int n, int burst_time[], int wait_time[]) {
wait_time[0] = 0;
for (int i = 1; i < n; i++)
wait_time[i] = burst_time[i-1] + wait_time[i-1];
return 0;
}
int turnaroundtime(int proc[], int n, int burst_time[], int wait_time[], int tat[]) {
for (int i = 0; i < n; i++)
tat[i] = burst_time[i] + wait_time[i];
return 0;
}
int avgtime(int proc[], int n, int burst_time[]) {
int wait_time[n], tat[n], total_wt = 0, total_tat = 0;
waitingtime(proc, n, burst_time, wait_time);
turnaroundtime(proc, n, burst_time, wait_time, tat);
printf("Processes Burst Waiting Turnaround\n");
for (int i = 0; i < n; i++) {
total_wt += wait_time[i];
total_tat += tat[i];
printf("%d\t%d\t%d\t%d\n", i+1, burst_time[i], wait_time[i], tat[i]);
}
printf("Average waiting time = %f\n", (float)total_wt / n);
printf("Average turnaround time = %f\n", (float)total_tat / n);
return 0;
}
int main() {
int proc[] = {1, 2, 3};
int n = sizeof(proc) / sizeof(proc[0]);
int burst_time[] = {5, 8, 12};
avgtime(proc, n, burst_time);
return 0;
}
เอาต์พุต
Processes Burst Waiting Turnaround 1 5 0 5 2 8 5 13 3 12 13 25 Average waiting time = 6.000000 Average turnaround time = 14.333333