0% found this document useful (0 votes)
6 views

Practical-8

Program

Uploaded by

Muskan Jangra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

Practical-8

Program

Uploaded by

Muskan Jangra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

8. Profile and analyze the performance of different scheduling algorithms (e.g.

, FCFS,
SJF, Round Robin) using simulations.
#include <stdio.h>

#include <stdlib.h>

#define MAX_PROCESSES 10

#define TIME_QUANTUM 4

typedef struct {

int id; // Process ID

int arrivalTime; // Arrival time

int burstTime; // Burst time (execution time)

int remainingTime; // Remaining burst time (used for RR)

int completionTime; // Completion time

int waitingTime; // Waiting time

int turnaroundTime; // Turnaround time

} Process;

void calculateTimes(Process processes[], int n) {

int totalTurnaroundTime = 0;

int totalWaitingTime = 0;

for (int i = 0; i < n; i++) {

processes[i].turnaroundTime = processes[i].completionTime - processes[i].arrivalTime;

processes[i].waitingTime = processes[i].turnaroundTime - processes[i].burstTime;

totalTurnaroundTime += processes[i].turnaroundTime;

totalWaitingTime += processes[i].waitingTime;}

printf("Average Turnaround Time: %.2f\n", (float)totalTurnaroundTime / n);

printf("Average Waiting Time: %.2f\n", (float)totalWaitingTime / n); }

void FCFS(Process processes[], int n) {

int currentTime = 0;

printf("\nFCFS Scheduling\n");

for (int i = 0; i < n; i++) {

if (currentTime < processes[i].arrivalTime)


currentTime = processes[i].arrivalTime;

currentTime += processes[i].burstTime;

processes[i].completionTime = currentTime;

printf("Process %d: Arrival = %d, Burst = %d, Completion = %d, Waiting = %d, Turnaround = %d\n",

processes[i].id, processes[i].arrivalTime, processes[i].burstTime,

processes[i].completionTime, processes[i].waitingTime, processes[i].turnaroundTime);

calculateTimes(processes, n); }

void SJF(Process processes[], int n) {

int currentTime = 0;

for (int i = 0; i < n - 1; i++) {

for (int j = i + 1; j < n; j++) {

if (processes[i].burstTime > processes[j].burstTime) {

Process temp = processes[i];

processes[i] = processes[j];

processes[j] = temp; } } }

printf("\nSJF Scheduling\n");

for (int i = 0; i < n; i++) {

if (currentTime < processes[i].arrivalTime)

currentTime = processes[i].arrivalTime;

currentTime += processes[i].burstTime;

processes[i].completionTime = currentTime;

printf("Process %d: Arrival = %d, Burst = %d, Completion = %d, Waiting = %d, Turnaround = %d\n",

processes[i].id, processes[i].arrivalTime, processes[i].burstTime,

processes[i].completionTime, processes[i].waitingTime, processes[i].turnaroundTime);

calculateTimes(processes, n); }

void RoundRobin(Process processes[], int n) {

int currentTime = 0;

int completed = 0;
int i = 0;

printf("\nRound Robin Scheduling\n");

while (completed < n) {

if (processes[i].remainingTime > 0) {

if (currentTime < processes[i].arrivalTime)

currentTime = processes[i].arrivalTime;

int timeSlice = (processes[i].remainingTime > TIME_QUANTUM) ? TIME_QUANTUM :


processes[i].remainingTime;

processes[i].remainingTime -= timeSlice;

currentTime += timeSlice;

if (processes[i].remainingTime == 0) {

processes[i].completionTime = currentTime;

completed++;

processes[i].turnaroundTime = processes[i].completionTime - processes[i].arrivalTime;

processes[i].waitingTime = processes[i].turnaroundTime - processes[i].burstTime;

printf("Process %d: Remaining = %d, Completion = %d, Waiting = %d, Turnaround = %d\n",

processes[i].id, processes[i].remainingTime,

processes[i].completionTime, processes[i].waitingTime, processes[i].turnaroundTime);

i = (i + 1) % n; }

calculateTimes(processes, n); }

int main() {

Process processes[MAX_PROCESSES];

int n;

printf("Enter the number of processes: ");

scanf("%d", &n);

for (int i = 0; i < n; i++) {

processes[i].id = i + 1;

printf("Enter Arrival Time and Burst Time for Process %d: ", i + 1);
scanf("%d %d", &processes[i].arrivalTime, &processes[i].burstTime);

processes[i].remainingTime = processes[i].burstTime; // Set the remaining time for Round Robin

FCFS(processes, n);

for (int i = 0; i < n; i++) {

processes[i].remainingTime = processes[i].burstTime;

processes[i].completionTime = 0;

processes[i].waitingTime = 0;

processes[i].turnaroundTime = 0; }

SJF(processes, n);

for (int i = 0; i < n; i++) {

processes[i].remainingTime = processes[i].burstTime;

processes[i].completionTime = 0;

processes[i].waitingTime = 0;

processes[i].turnaroundTime = 0; }

RoundRobin(processes, n);

return 0;

Output:-

Enter the number of processes: 3

Enter Arrival Time and Burst Time for Process 1: 0 5

Enter Arrival Time and Burst Time for Process 2: 1 4

Enter Arrival Time and Burst Time for Process 3: 2 8

FCFS Scheduling Average Time: 3.67

SJF Scheduling Average Time: 4.33

Round Robin Scheduling: 5.67

You might also like