Online C Compiler
Buka di kompiler

Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.

Penjadwalan Round Robin dalam C

Simulasikan giliran CPU dengan quantum waktu dan hitung waktu tunggu.

Buka di kompiler

Penjadwalan Round Robin dalam C
Simulasikan giliran CPU dengan quantum waktu dan hitung waktu tunggu.

Round Robin memberi setiap proses siap paling banyak satu quantum waktu. Proses yang belum selesai kembali ke belakang antrean dengan sisa waktu eksekusinya. Quantum harus positif agar simulasi maju.

Dalam setiap giliran, jalankan minimum antara quantum dan sisa durasi. Catat waktu selesai. Turnaround time adalah waktu selesai dikurangi kedatangan; waktu tunggu adalah turnaround dikurangi waktu CPU sesuai asumsi model.

Periksa apakah contoh mengasumsikan semua proses datang pada waktu nol. Jika waktu kedatangan berbeda, kelola antrean siap dan waktu menganggur. Model pembelajaran mungkin tidak memasukkan biaya pergantian konteks yang sebenarnya.

Kode C

#include <stdio.h>
#include <stdbool.h>

struct Process {
    int id;
    int burst_time;
    int remaining_time;
    int waiting_time;
    int turnaround_time;
};

void calculate_round_robin(struct Process p[], int n, int quantum) {
    int current_time = 0;
    bool done;

    for (int i = 0; i < n; i++) {
        p[i].remaining_time = p[i].burst_time;
    }

    do {
        done = true;
        for (int i = 0; i < n; i++) {
            if (p[i].remaining_time > 0) {
                done = false;

                if (p[i].remaining_time > quantum) {
                    current_time += quantum;
                    p[i].remaining_time -= quantum;
                } else {
                    current_time += p[i].remaining_time;
                    p[i].waiting_time = current_time - p[i].burst_time;
                    p[i].remaining_time = 0;
                }
            }
        }
    } while (!done);

    for (int i = 0; i < n; i++) {
        p[i].turnaround_time = p[i].burst_time + p[i].waiting_time;
    }
}

int main(void) {
    struct Process proc[] = {
        {1, 10, 0, 0, 0},
        {2, 5,  0, 0, 0},
        {3, 8,  0, 0, 0}
    };
    int n = sizeof(proc) / sizeof(proc[0]);
    int time_quantum = 2;

    calculate_round_robin(proc, n, time_quantum);

    printf("PID\tBurst\tWaiting\tTurnaround\n");
    float total_wt = 0, total_tat = 0;
    for (int i = 0; i < n; i++) {
        total_wt += proc[i].waiting_time;
        total_tat += proc[i].turnaround_time;
        printf("P%d\t%d\t%d\t%d\n", proc[i].id, proc[i].burst_time, proc[i].waiting_time, proc[i].turnaround_time);
    }

    printf("\nAverage Waiting Time = %.2f\n", total_wt / n);
    printf("Average Turnaround Time = %.2f\n", total_tat / n);
    return 0;
}
Buka di kompiler

Keluaran yang diharapkan

PID	Burst	Waiting	Turnaround
P1	10	13	23
P2	5	10	15
P3	8	13	21

Average Waiting Time = 12.00
Average Turnaround Time = 19.67

Pertanyaan umum

Mengapa kode dan keluarannya tetap dalam bahasa Inggris?

Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.