Untitled

 avatar
unknown
plain_text
a year ago
3.1 kB
4
Indexable
//Ali Haytham Abdoush 20100255

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int process_id;
    int arrival_time;
    int service_time;
} Process;

void roundRobin(Process processes[], int n);
void shortestProcessNext(Process processes[], int n);

int main() {
    int n = 0;

    Process processes[50];
    while (1) {
        printf("Input P (%d) (arrival time, service time): ", n);
        scanf("%d", &processes[n].arrival_time);

        if (processes[n].arrival_time == -1) {
            break;
        }

        scanf("%d", &processes[n].service_time);
        processes[n].process_id = n;

        n++;
    }

    roundRobin(processes, n);

    shortestProcessNext(processes, n);

    return 0;
}

void roundRobin(Process processes[], int n) {
    int wait_time = 0;
    int turnaround_time = 0;
    int remaining_time[n];

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

    int time = 0;
    int completed = 0;
    while (completed < n) {
        for (int i = 0; i < n; i++) {
            if (remaining_time[i] > 0) {
                if (remaining_time[i] > 1) {
                    time += 1;
                    remaining_time[i] -= 1;
                } else {
                    time += remaining_time[i];
                    wait_time += time - processes[i].arrival_time - processes[i].service_time;
                    turnaround_time += time - processes[i].arrival_time;

                    remaining_time[i] = 0;
                    completed++;
                }
            }
        }
    }

    double avg_wait_time = (double)wait_time / n;
    printf("CPU Scheduling using (RR) – Average waiting time: %.2f\n", avg_wait_time);
}

void shortestProcessNext(Process processes[], int n) {
    int wait_time = 0;
    int turnaround_time = 0;
    int remaining_time[n];

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

    int time = 0;
    int completed = 0;
    while (completed < n) {
        int shortest_index = -1;
        int shortest_time = INT_MAX;

        for (int i = 0; i < n; i++) {
            if (remaining_time[i] > 0 && processes[i].arrival_time <= time) {
                if (remaining_time[i] < shortest_time) {
                    shortest_time = remaining_time[i];
                    shortest_index = i;
                }
            }
        }

        if (shortest_index == -1) {
            time++;
        } else {
            time += remaining_time[shortest_index];
            wait_time += time - processes[shortest_index].arrival_time - processes[shortest_index].service_time;
            turnaround_time += time - processes[shortest_index].arrival_time;

            remaining_time[shortest_index] = 0;
            completed++;
        }
    }

    double avg_wait_time = (double)wait_time / n;
    printf("CPU Scheduling using (SPN) – Average waiting time: %.2f\n", avg_wait_time);
}
Editor is loading...
Leave a Comment