LCS2022007 Aviral Katiyar Assignment3
LCS2022007 Aviral Katiyar Assignment3
Assignment - 3
Roll No : LCS2022007
Name : Aviral Katiyar
Q1.) Implementation of CPU Scheduling in C: (i) FCFS, (ii) SJF, (iii)
Shortest Remaining Time First and (iv) Priority based.
#include<stdio.h>
#include<stdlib.h>
struct Process {
int id;
int bt;
int priority; // for Priority Scheduling
};
wt[0] = 0;
printf("FCFS Scheduling:\n");
printf("Processes Burst time Waiting time Turnaround time\n");
wt[0] = 0;
printf("SJF Scheduling:\n");
printf("Processes Burst time Waiting time Turnaround time\n");
while (complete != n) {
for (int j = 0; j < n; j++) {
if ((rt[j] > 0) && (rt[j] < minm) && (t >= processes[j])) {
minm = rt[j];
shortest = j;
}
}
rt[shortest]--;
if (rt[shortest] == 0) {
complete++;
finish_time = t + 1;
wt[shortest] = finish_time - bt[shortest] -
processes[shortest];
if (wt[shortest] < 0)
wt[shortest] = 0;
}
t++;
minm = 9999;
}
}
printf("SRTF Scheduling:\n");
printf("Processes Burst time Waiting time Turnaround time\n");
wt[0] = 0;
printf("Priority Scheduling:\n");
printf("Processes Burst time Waiting time Turnaround time
Priority\n");
int main() {
// FCFS
int fcfs_processes[] = { 1, 2, 3};
int fcfs_n = sizeof fcfs_processes / sizeof fcfs_processes[0];
int fcfs_burst_time[] = {6, 8, 7};
// SJF
struct Process sjf_processes[] = {{1, 6, 2}, {2, 8, 1}, {3, 7, 3}, {4,
3, 2}};
int sjf_n = sizeof sjf_processes / sizeof sjf_processes[0];
sjf(sjf_processes, sjf_n);
// SRTF
int srtf_processes[] = { 1, 2, 3};
int srtf_n = sizeof srtf_processes / sizeof srtf_processes[0];
int srtf_burst_time[] = {6, 8, 7};
// Priority Scheduling
struct Process priority_processes[] = {{1, 6, 2}, {2, 8, 1}, {3, 7,
3}};
int priority_n = sizeof priority_processes / sizeof
priority_processes[0];
priorityScheduling(priority_processes, priority_n);
return 0;
}
OUTPUT:
Q2.) Implementation of CPU Scheduling in C: (i) Round Robin
(ii)Longest JobFirst (iii) Longest Remaining Time First (LRTF)
#include <stdio.h>
#include <stdlib.h>
int remaining_time[n];
for (int i = 0; i < n; i++) {
remaining_time[i] = bt[i];
wt[i] = 0;
}
int t = 0;
int flag;
while (1) {
flag = 0;
for (int i = 0; i < n; i++) {
if (remaining_time[i] > 0) {
flag = 1;
wt[0] = 0;
int remaining_time[n];
for (int i = 0; i < n; i++) {
remaining_time[i] = bt[i];
wt[i] = 0;
}
int t = 0, longest_index;
while (1) {
int longest_bt = 0;
longest_index = -1;
if (longest_index == -1)
break;
t++;
remaining_time[longest_index]--;
}
int main() {
int processes[] = {0, 1, 2};
int n = sizeof processes / sizeof processes[0];
int burst_time[] = {6, 8, 7};
int quantum = 2;
return 0;
}
OUTPUT:
#include <stdio.h>
#include <stdlib.h>
struct Process {
int id;
int arrival_time;
int burst_time;
int priority; // For Multilevel Queue
int queue; // To represent the queue level (e.g., 0 for high
priority, 1 for medium priority, 2 for low priority)
int waiting_time;
int turnaround_time;
float response_ratio; // For HRRN
};
int total_waiting_time = 0;
int total_turnaround_time = 0;
processes[i].response_ratio = (float)processes[i].turnaround_time
/ processes[i].burst_time;
total_waiting_time += processes[i].waiting_time;
total_turnaround_time += processes[i].turnaround_time;
}
int total_waiting_time = 0;
int total_turnaround_time = 0;
int time = 0;
if (processes[i].burst_time > 0) {
processes[i].queue++;
} else {
processes[i].turnaround_time = time;
}
}
total_waiting_time += processes[i].waiting_time;
total_turnaround_time += processes[i].turnaround_time;
} else {
time = processes[i].arrival_time;
i--;
}
}
int main() {
struct Process processes[] = {{1, 0, 6, 0, 0}, {2, 2, 8, 1, 0}, {3, 4,
7, 2, 0}, {4, 6, 3, 1, 0}};
int n = sizeof processes / sizeof processes[0];
int quantum1 = 2;
int quantum2 = 4;
hrrn(processes, n);
multilevelQueue(processes, n, quantum1, quantum2);
return 0;
}
OUTPUT: