Skip to content

Commit 5a451dd

Browse files
RES.c
1 parent 8d47fcf commit 5a451dd

File tree

1 file changed

+89
-0
lines changed
  • Preemptive Scheduling Algorithm

1 file changed

+89
-0
lines changed

Preemptive Scheduling Algorithm/RES.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
#define MAX_PROCESSES 10
5+
6+
// Define a structure for processes
7+
typedef struct {
8+
int id;
9+
int priority; // Lower number means higher priority
10+
int burstTime;
11+
int waitingTime;
12+
int turnaroundTime;
13+
} Process;
14+
15+
// Function to perform Ripple Effect Scheduling (RES)
16+
void rippleEffectScheduling(Process processes[], int n) {
17+
// Sort processes by priority (ascending order for higher priority first)
18+
for (int i = 0; i < n - 1; i++) {
19+
for (int j = i + 1; j < n; j++) {
20+
if (processes[i].priority > processes[j].priority) {
21+
Process temp = processes[i];
22+
processes[i] = processes[j];
23+
processes[j] = temp;
24+
}
25+
}
26+
}
27+
28+
// Initialize waiting time for the first process
29+
processes[0].waitingTime = 0;
30+
31+
// Calculate waiting time for each process
32+
for (int i = 1; i < n; i++) {
33+
processes[i].waitingTime = processes[i - 1].waitingTime + processes[i - 1].burstTime;
34+
35+
// Ripple effect: give small wait reduction to next lower-priority process
36+
if (i < n - 1 && processes[i].priority < processes[i + 1].priority) {
37+
processes[i + 1].waitingTime -= processes[i + 1].priority - processes[i].priority;
38+
if (processes[i + 1].waitingTime < 0) {
39+
processes[i + 1].waitingTime = 0; // Avoid negative waiting time
40+
}
41+
}
42+
}
43+
44+
// Calculate turnaround time for each process
45+
for (int i = 0; i < n; i++) {
46+
processes[i].turnaroundTime = processes[i].waitingTime + processes[i].burstTime;
47+
}
48+
}
49+
50+
// Function to print process details
51+
void printProcesses(Process processes[], int n) {
52+
float totalWaitingTime = 0, totalTurnaroundTime = 0;
53+
54+
printf("ID\tPriority\tBurst Time\tWaiting Time\tTurnaround Time\n");
55+
for (int i = 0; i < n; i++) {
56+
totalWaitingTime += processes[i].waitingTime;
57+
totalTurnaroundTime += processes[i].turnaroundTime;
58+
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n",
59+
processes[i].id, processes[i].priority,
60+
processes[i].burstTime, processes[i].waitingTime,
61+
processes[i].turnaroundTime);
62+
}
63+
64+
printf("\nAverage Waiting Time: %.2f\n", totalWaitingTime / n);
65+
printf("Average Turnaround Time: %.2f\n", totalTurnaroundTime / n);
66+
}
67+
68+
int main() {
69+
Process processes[MAX_PROCESSES];
70+
int n;
71+
72+
printf("Enter number of processes: ");
73+
scanf("%d", &n);
74+
75+
// Input details for each process
76+
for (int i = 0; i < n; i++) {
77+
processes[i].id = i + 1;
78+
printf("Enter priority and burst time for process %d: ", i + 1);
79+
scanf("%d %d", &processes[i].priority, &processes[i].burstTime);
80+
}
81+
82+
// Perform Ripple Effect Scheduling
83+
rippleEffectScheduling(processes, n);
84+
85+
// Print process details and average times
86+
printProcesses(processes, n);
87+
88+
return 0;
89+
}

0 commit comments

Comments
 (0)