Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C สำหรับ FCFS Scheduling (First Come First Served)

กำหนด 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