OS Lab File

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 29

Established under Haryana Private University Act, 2006 as amended by Act No.

8 of 2013)

DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING

LABORATORY RECORD

Programme : UG
Specialization : Data Science & Artificial Intelligence
Semester & Year : IV & II
Name of Student : Kumud hasija
Registration. No : 11022210056
Section :E
Course Code : 21CS2114
Course Title : Operating System
Name of Teachers : Mr. Sahil Sehrawat
BONAFIDE CERTIFICATE

Name : Kumud hasija

Reg. No : 11022210056

Subject Code : 21CS2114

Subject : Operating system

Course : B.Tech CSE (DS&AI)

Certified that this is the BonafIde record of practical done as a part of Semester
IV during the academic year 2023 - 2024.

Faculty Incharge Head of the Department


(Mr. Sahil Sherawat) (Dr. Puneet
Goswami)

Submitted for University Practical Examination held on:


/0/2024

Internal Examiner External


Examiner
LIST OF EXPERIMENTS

Exp No TITLE Page No

1 First Come First Serve Scheduling 1-3

2 Shortest Job First Scheduling 4-7

3 Priority Scheduling 8-11

4 Round Robin Scheduling 12-16

5 FIFO Page Replacement 17-21

6 Optimal Page Replacement 22-26

7 LRU Page Replacement 27-30

8 31-35

9 36-41

10 42-45

11 46-50

12 51-55
First Come First Serve scheduling

#include <stdio.h>

// Function to swap two integers

void swap(int *a, int *b) {

int temp = *a;

*a = *b;

*b = temp;

// Function to sort processes based on arrival time

void arrivalTime(int bt[], int at[], int p[], int num) {

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

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

if (at[j] > at[j + 1]) {

swap(&at[j], &at[j + 1]);

swap(&bt[j], &bt[j + 1]);

swap(&p[j], &p[j + 1]); }

// Function to calculate completion time

void findCompletionTime(int bt[], int ct[], int num) {

ct[0] = bt[0];

for (int i = 1; i < num; i++)

{ ct[i] = ct[i - 1] + bt[i];

}
// Function to calculate waiting time

float findWaitingTime(int wt[], int bt[], int num) {

wt[0] = 0;

float avgwt = 0;

for (int i = 1; i < num; i++) {

wt[i] = bt[i - 1] + wt[i - 1];

avgwt += wt[i]; }

return avgwt / num;

// Function to calculate turnaround time

float findTurnAroundTime(int tat[], int at[], int ct[], int num) {

float avgtat = 0;

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

tat[i] = ct[i] - at[i];

avgtat += tat[i]; }

return avgtat / num;

int main() {

int num;

printf("Enter number of processes: ");

scanf("%d", &num);

int p[num], bt[num], at[num], tat[num], ct[num], wt[num];

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

p[i] = i + 1;

printf("Enter arrival time for P%d: ", i + 1);

scanf("%d", &at[i]);

printf("Enter burst time for P%d: ", i + 1);

scanf("%d", &bt[i]);

printf("\n"); }
arrivalTime(bt, at, p, num);

findCompletionTime(bt, ct, num);

float avgwt = findWaitingTime(wt, bt, num);

float avgtat = findTurnAroundTime(tat, at, ct, num);

printf("Process ID\tArrival Time\tBurst Time\tCompletion Time\tWaiting Time\tTurnaround Time\


n");

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

printf("P%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p[i], at[i], bt[i], ct[i], wt[i], tat[i]);

printf("\nAverage waiting time: %f\n", avgwt);

printf("Average turnaround time: %f", avgtat);

return 0;

}
Output

Enter number of processes: 5

Enter arrival time for P1: 3

Enter burst time for P1: 4

Enter arrival time for P2: 5

Enter burst time for P2: 3

Enter arrival time for P3: 0

Enter burst time for P3: 3

Enter arrival time for P4: 5

Enter burst time for P4: 1

Enter arrival time for P5: 4

Enter burst time for P5: 3

Process ID Arrival Time Burst Time Completion Time Waiting Time Turnaround Time

P3 0 3 3 0 3

P1 3 4 7 3 4

P5 4 3 10 7 6

P2 5 3 13 10 8

P4 5 1 14 13 9

Average waiting time: 6.600000

Average turnaround time: 6.000000


Shortest Job First Scheduling

#include <stdio.h>

// Function to swap two integers

void swap(int *a, int *b) {

int temp = *a;

*a = *b;

*b = temp;

// Function to sort processes based on burst time (Shortest Job First)

void shortestJobFirst(int bt[], int at[], int p[], int num) {

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

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

if (bt[j] > bt[j + 1]) {

swap(&at[j], &at[j + 1]);

swap(&bt[j], &bt[j + 1]);

swap(&p[j], &p[j + 1]); }

// Function to calculate completion time

void findCompletionTime(int bt[], int ct[], int num) {

ct[0] = bt[0];

for (int i = 1; i < num; i++) {

ct[i] = ct[i - 1] + bt[i];

}
// Function to calculate waiting time

float findWaitingTime(int wt[], int bt[], int num) {

wt[0] = 0;

float avgwt = 0;

for (int i = 1; i < num; i++)

wt[i] = bt[i - 1] + wt[i - 1];

avgwt += wt[i];

return avgwt / num;

// Function to calculate turnaround time

float findTurnAroundTime(int tat[], int at[], int ct[], int num) {

float avgtat = 0;

for (int i = 0; i < num; i++)

tat[i] = ct[i] - at[i];

avgtat += tat[i];

return avgtat / num;

int main()

int num;

printf("Enter number of processes: ");

scanf("%d", &num);

int p[num], bt[num], at[num], tat[num], ct[num], wt[num];


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

p[i] = i + 1;

printf("Enter arrival time for P%d: ", i + 1);

scanf("%d", &at[i]);

printf("Enter burst time for P%d: ", i + 1);

scanf("%d", &bt[i]);

printf("\n");

shortestJobFirst(bt, at, p, num);

findCompletionTime(bt, ct, num);

float avgwt = findWaitingTime(wt, bt, num);

float avgtat = findTurnAroundTime(tat, at, ct, num);

printf("Process ID\tArrival Time\tBurst Time\tCompletion Time\tWaiting Time\tTurnaround Time\


n");

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

printf("P%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p[i], at[i], bt[i], ct[i], wt[i], tat[i]);

printf("\nAverage waiting time: %f\n", avgwt);

printf("Average turnaround time: %f", avgtat);

return 0;

}
Output

Enter number of processes: 3

Enter arrival time for P1: 0

Enter burst time for P1: 9

Enter arrival time for P2: 1

Enter burst time for P2: 4

Enter arrival time for P3: 2

Enter burst time for P3: 9

Process ID Arrival Time Burst Time Completion Time Waiting Time Turnaround Time

P2 1 4 4 0 3

P1 0 9 13 4 13

P3 2 9 22 13 20

Average waiting time: 5.666667

Average turnaround time: 12.000000


Priority Scheduling

#include <stdio.h>

// Function to swap two integers

void swap(int *a, int *b) {

int temp = *a;

*a = *b;

*b = temp;

// Function to sort processes based on priority in non-decreasing order

void priorityScheduling(int bt[], int at[], int p[], int priority[], int num) {

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

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

if (priority[j] > priority[j + 1]) {

swap(&at[j], &at[j + 1]);

swap(&bt[j], &bt[j + 1]);

swap(&p[j], &p[j + 1]);

swap(&priority[j], &priority[j + 1]); }

// Function to calculate completion time

void findCompletionTime(int bt[], int ct[], int num) {

ct[0] = bt[0];

for (int i = 1; i < num; i++) {

ct[i] = ct[i - 1] + bt[i]; }

}
// Function to calculate waiting time

float findWaitingTime(int wt[], int bt[], int num) {

wt[0] = 0;

float avgwt = 0;

for (int i = 1; i < num; i++)

wt[i] = bt[i - 1] + wt[i - 1];

avgwt += wt[i];

return avgwt / num;

// Function to calculate turnaround time

float findTurnAroundTime(int tat[], int at[], int ct[], int num) {

float avgtat = 0;

for (int i = 0; i < num; i++)

tat[i] = ct[i] - at[i];

avgtat += tat[i];

return avgtat / num;

int main() {

int num;

printf("Enter number of processes: ");

scanf("%d", &num);

int p[num], bt[num], at[num], tat[num], ct[num], wt[num], priority[num];


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

p[i] = i + 1;

printf("Enter arrival time for P%d: ", i + 1);

scanf("%d", &at[i]);

printf("Enter burst time for P%d: ", i + 1);

scanf("%d", &bt[i]);

printf("Enter priority for P%d: ", i + 1);

scanf("%d", &priority[i]);

printf("\n");

priorityScheduling(bt, at, p, priority, num);

findCompletionTime(bt, ct, num);

float avgwt = findWaitingTime(wt, bt, num);

float avgtat = findTurnAroundTime(tat, at, ct, num);

printf("Process ID\tArrival Time\tBurst Time\tPriority\tCompletion Time\tWaiting Time\


tTurnaround Time\n");

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

printf("P%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p[i], at[i], bt[i], priority[i], ct[i], wt[i],


tat[i]);

printf("\nAverage waiting time: %f\n", avgwt);

printf("Average turnaround time: %f", avgtat);

return 0;

}
Output
Enter number of processes: 5

Enter arrival time for P1: 0

Enter burst time for P1: 3

Enter priority for P1: 3

Enter arrival time for P2: 1

Enter burst time for P2: 6

Enter priority for P2: 4

Enter arrival time for P3: 3

Enter burst time for P3: 1

Enter priority for P3: 9

Enter arrival time for P4: 2

Enter burst time for P4: 2

Enter priority for P4: 7

Enter arrival time for P5: 4

Enter burst time for P5: 4

Enter priority for P5: 8

Process ID Arrival Time Burst Time Priority Completion Time Waiting Time Turnaround Time

P1 0 3 3 3 0 3

P2 1 6 4 9 3 8

P4 2 2 7 11 9 9

P5 4 4 8 15 11 11

P3 3 1 9 16 15 13

Average waiting time: 7.600000

Average turnaround time: 8.800000


Round Robin Scheduling

#include<stdio.h>

void main()

int i, NOP, sum=0,count=0, y, quant, wt=0, tat=0, at[10], bt[10], temp[10];

float avg_wt, avg_tat;

printf(" Enter total number of process : ");

scanf("%d", &NOP);

y = NOP;

for(i=0; i<NOP; i++)

printf(" Arrival time of P%d: \t",i+1);

scanf("%d", &at[i]);

printf(" \nBurst time of P%d: \t",i+1);

scanf("%d", &bt[i]);

temp[i] = bt[i];

printf("Enter the Time Quantum for the process: \t");

scanf("%d", &quant);

printf("\n Process No \t\t Burst Time \t\t TAT \t\t Waiting Time ");

for(sum=0, i = 0; y!=0; )

if(temp[i] <= quant && temp[i] > 0) // define the conditions

sum = sum + temp[i];

temp[i] = 0;

count=1;

else if(temp[i] > 0)


{

temp[i] = temp[i] - quant;

sum = sum + quant;

if(temp[i]==0 && count==1)

y--;

printf("\nP%d \t\t %d\t\t\t\t %d\t\t\t %d", i+1, bt[i], sum-at[i], sum-at[i]-bt[i]);

wt = wt+sum-at[i]-bt[i];

tat = tat+sum-at[i];

count =0;

if(i==NOP-1)

i=0;

else if(at[i+1]<=sum)

i++;

else

i=0;

avg_wt = wt * 1.0/NOP;

avg_tat = tat * 1.0/NOP;

printf("\n Average Turn Around Time: \t%f", avg_wt);

printf("\n Average Waiting Time: \t%f", avg_tat);

}
Output
Enter total number of process : 5

Arrival time of P1: 0

Burst time of P1: 5

Arrival time of P2: 1

Burst time of P2: 3

Arrival time of P3: 2

Burst time of P3: 1

Arrival time of P4: 3

Burst time of P4: 2

Arrival time of P5: 4

Burst time of P5: 3

Enter the Time Quantum for the process: 2

Process No Burst Time TurnAround Time Waiting Time

P3 1 3 2

P4 2 4 2

P2 3 11 8

P5 3 9 6

P1 5 14 9

Average Turn Around Time: 5.400000

Average Waiting Time: 8.200000


FIFO Page Replacement
#include <stdio.h>

#include <stdbool.h>

int main()

int buffer_size;

int pageQueue[20];

int numPages;

int pageFaults = 0;

int rear = -1;

int front = -1;

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

scanf("%d", &numPages);

printf("Enter buffer size :");

scanf("%d",&buffer_size);

int frame[buffer_size];

printf("Enter the page number:\n ");

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

scanf("%d", &pageQueue[i]);

}
for (int i = 0; i < buffer_size; i++) {

frame[i] = -1;

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

bool pageFault = true;

for (int j = 0; j < buffer_size; j++) {

if (frame[j] == pageQueue[i]) {

pageFault = false;

break;

if (pageFault) {

rear = (rear + 1) % buffer_size;

frame[rear] = pageQueue[i];

pageFaults++;

printf("\nTotal Page Faults: %d\n", pageFaults);

printf("\nTotal Page Hits: %d\n", numPages - pageFaults);

return 0;

}
Output
Enter the number of pages: 14

Enter buffer size :4

Enter the page number:

Total Page Faults: 7

Total Page Hits: 7


Optimal Page Replacement

#include <stdio.h>

#include <stdbool.h>

int findOpticalPage(int frame[], int pages[], int start, int numPages, int numFrames) {

int optIndex = -1;

int farthest = start;

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

int j;

for (j = start; j < numPages; j++) {

if (frame[i] == pages[j]) {

if (j > farthest) {

farthest = j;

optIndex = i;

break;

if (j == numPages) {

return i;

if (j == numPages) {

optIndex = i;

break;

return optIndex; }
int main() {

int numPages , buffer_size;

int pageFaults = 0;

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

scanf("%d", &numPages);

printf("Enter buffer size :");

scanf("%d",&buffer_size);

int frame[buffer_size];

int pages[numPages];

printf("Enter the page number : ");

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

scanf("%d", &pages[i]);

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

frame[i] = -1;

int nextIndex = 0;

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

bool pageFault = true;

for (int j = 0; j < buffer_size; j++) {

if (frame[j] == pages[i]) {

pageFault = false;

break;

}
}

if (pageFault) {

int replaceIndex = findOpticalPage(frame, pages, i + 1, numPages, buffer_size);

frame[replaceIndex] = pages[i];

pageFaults++;

printf("\nTotal Page Faults: %d\n", pageFaults);

printf("\nTotal Page Hits: %d\n", numPages - pageFaults);

return 0;

}
Output
Enter the number of pages: 14

Enter buffer size :4

Enter the page number :

Total Page Faults: 6

Total Page Hits: 8


LRU Page Replacement

#include <stdio.h>

#include <stdbool.h>

int findLRUPage(int frame[], int used[], int numFrames) {

int lruIndex = 0;

int minUsed = used[0];

for (int i = 1; i < numFrames; i++) {

if (used[i] < minUsed) {

minUsed = used[i];

lruIndex = i;

return lruIndex;

int main() {

int buffer_size, numPages, pageFaults = 0, currentTime = 0;

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

scanf("%d", &numPages);

printf("Enter buffer size: ");

scanf("%d", &buffer_size);

int frame[buffer_size];

int pages[numPages];

int used[numPages] ;

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

used[i]=0;

}
printf("Enter the page number: ");

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

scanf("%d", &pages[i]);

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

frame[i] = -1;

int nextIndex = 0;

int lruCount = 0;

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

bool pageFault = true;

for (int j = 0; j < buffer_size; j++) {

if (frame[j] == pages[i]) {

pageFault = false;

used[j] = currentTime++;

break;

if (pageFault) {

int lruIndex = findLRUPage(frame, used, buffer_size);

frame[lruIndex] = pages[i];

used[lruIndex] = currentTime++;

pageFaults++;

printf("\nTotal Page Faults: %d\n", pageFaults);

printf("\nTotal Page Hits: %d\n", numPages - pageFaults);

return 0;

}
Output
Enter the number of pages: 14

Enter buffer size :4

Enter the page number :

Total Page Faults: 6

Total Page Hits: 8

You might also like