0% found this document useful (0 votes)
30 views9 pages

Operating System Lab Scheduling Algorithms

Operating System content

Uploaded by

garv67740
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)
30 views9 pages

Operating System Lab Scheduling Algorithms

Operating System content

Uploaded by

garv67740
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

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]();
}
}

You might also like