Guru Gobind Singh Indraprastha
University
Practical File
Operating System
Lab
Code - “PC - 257”
Submitted by- Submitted to-
Garv Chawla Dr Arshi Hussain
01616451924
[Link]
CSE - DS
3rd Semester
1. Simulate the following scheduling
algorithms
a) RR(Round-Robin)
import [Link].*;
class Process {
int pid, arrivalTime, burstTime, remainingTime, completionTime,
turnaroundTime, waitingTime;
public Process(int pid, int arrivalTime, int burstTime) {
[Link] = pid;
[Link] = arrivalTime;
[Link] = burstTime;
[Link] = burstTime;
}
}
public class RoundRobin {
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
[Link]("Enter number of processes: ");
int n = [Link]();
List<Process> processes = new ArrayList<>();
for (int i = 0; i < n; i++) {
[Link]("Enter details for process " + (i + 1) + ":");
[Link]("Arrival Time: ");
int at = [Link]();
[Link]("Burst Time: ");
int bt = [Link]();
[Link](new Process(i + 1, at, bt));
}
[Link]("Enter time quantum: ");
int quantum = [Link]();
Queue<Process> queue = new LinkedList<>();
int currentTime = 0;
int idx = 0;
[Link]([Link](p -> [Link]));
while (![Link]() || idx < n) {
while (idx < n && [Link](idx).arrivalTime <= currentTime) {
[Link]([Link](idx));
idx++;
}
if (![Link]()) {
Process p = [Link]();
int execTime = [Link](quantum, [Link]);
[Link] -= execTime;
currentTime += execTime;
while (idx < n && [Link](idx).arrivalTime <= currentTime) {
[Link]([Link](idx));
idx++;
}
if ([Link] > 0) {
[Link](p);
} else {
[Link] = currentTime;
[Link] = [Link] - [Link];
[Link] = [Link] - [Link];
}
} else {
currentTime++;
}
}
[Link]("\nRound Robin Scheduling Results:");
double totalTurnaround = 0, totalWaiting = 0;
for (Process p : processes) {
totalTurnaround += [Link];
totalWaiting += [Link];
}
[Link]("Average Turnaround Time: %.2f\n", totalTurnaround / n);
[Link]("Average Waiting Time: %.2f\n", totalWaiting / n);
[Link]();
}
}
b) Priority Scheduling (Non-Preemptive)
import [Link].*;
class Process {
int pid, arrivalTime, burstTime, priority, completionTime, turnaroundTime,
waitingTime;
public Process(int pid, int arrivalTime, int burstTime, int priority) {
[Link] = pid;
[Link] = arrivalTime;
[Link] = burstTime;
[Link] = priority;
}
}
public class PriorityNonPreemptive {
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
[Link]("Enter number of processes: ");
int n = [Link]();
List<Process> processes = new ArrayList<>();
for (int i = 0; i < n; i++) {
[Link]("Enter details for process " + (i + 1) + ":");
[Link]("Arrival Time: ");
int at = [Link]();
[Link]("Burst Time: ");
int bt = [Link]();
[Link]("Priority (lower = higher priority): ");
int pri = [Link]();
[Link](new Process(i + 1, at, bt, pri));
}
int currentTime = 0, completed = 0;
boolean[] isCompleted = new boolean[n];
while (completed != n) {
int idx = -1;
int minPriority = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
if ([Link](i).arrivalTime <= currentTime && !isCompleted[i]) {
if ([Link](i).priority < minPriority) {
minPriority = [Link](i).priority;
idx = i;
}
if ([Link](i).priority == minPriority && idx != -1) {
if ([Link](i).arrivalTime < [Link](idx).arrivalTime) {
idx = i;
}
}
}
}
if (idx != -1) {
[Link](idx).completionTime = currentTime +
[Link](idx).burstTime;
[Link](idx).turnaroundTime = [Link](idx).completionTime -
[Link](idx).arrivalTime;
[Link](idx).waitingTime = [Link](idx).turnaroundTime -
[Link](idx).burstTime;
isCompleted[idx] = true;
completed++;
currentTime = [Link](idx).completionTime;
} else {
currentTime++;
}
}
[Link]("\nPriority (Non-Preemptive) Scheduling Results:");
double totalTurnaround = 0, totalWaiting = 0;
for (Process p : processes) {
totalTurnaround += [Link];
totalWaiting += [Link];
}
[Link]("Average Turnaround Time: %.2f\n", totalTurnaround / n);
[Link]("Average Waiting Time: %.2f\n", totalWaiting / n);
[Link]();
}
}
c) Priority Scheduling (Preemptive)
import [Link].*;
class Process {
int pid, arrivalTime, burstTime, priority, remainingTime, completionTime,
turnaroundTime, waitingTime;
public Process(int pid, int arrivalTime, int burstTime, int priority) {
[Link] = pid;
[Link] = arrivalTime;
[Link] = burstTime;
[Link] = priority;
[Link] = burstTime;
}
}
public class PriorityPreemptive {
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
[Link]("Enter number of processes: ");
int n = [Link]();
List<Process> processes = new ArrayList<>();
for (int i = 0; i < n; i++) {
[Link]("Enter details for process " + (i + 1) + ":");
[Link]("Arrival Time: ");
int at = [Link]();
[Link]("Burst Time: ");
int bt = [Link]();
[Link]("Priority (lower = higher priority): ");
int pri = [Link]();
[Link](new Process(i + 1, at, bt, pri));
}
int currentTime = 0, completed = 0;
while (completed != n) {
int idx = -1;
int minPriority = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
if ([Link](i).arrivalTime <= currentTime &&
[Link](i).remainingTime > 0) {
if ([Link](i).priority < minPriority) {
minPriority = [Link](i).priority;
idx = i;
}
if ([Link](i).priority == minPriority && idx != -1) {
if ([Link](i).arrivalTime < [Link](idx).arrivalTime) {
idx = i;
}
}
}
}
if (idx != -1) {
[Link](idx).remainingTime--;
if ([Link](idx).remainingTime == 0) {
completed++;
[Link](idx).completionTime = currentTime + 1;
[Link](idx).turnaroundTime =
[Link](idx).completionTime - [Link](idx).arrivalTime;
[Link](idx).waitingTime = [Link](idx).turnaroundTime -
[Link](idx).burstTime;
}
}
currentTime++;
}
[Link]("\nPriority (Preemptive) Scheduling Results:");
double totalTurnaround = 0, totalWaiting = 0;
for (Process p : processes) {
totalTurnaround += [Link];
totalWaiting += [Link];
}
[Link]("Average Turnaround Time: %.2f\n", totalTurnaround / n);
[Link]("Average Waiting Time: %.2f\n", totalWaiting / n);
[Link]();
}
}