OS Lab
OS Lab
Experiment 1:
Experiment 2:
Program Code:
#include <stdio.h>
int main() {
scanf("%d", &n);
printf("\n");
scanf("%d", &bt[i]);
at[i] = 0;
if (i == 0) {
st[i] = 0;
wt[i] = 0;
ft[i] = bt[i];
} else {
twt += wt[i];
ttat += tat[i];
printf("\n");
awt = twt / n;
atat = ttat / n;
printf("============================================================
=====================\n");
printf("P%d \t%d \t\t%d \t%d \t\t%d \t%d \t\t%d\n", i + 1, bt[i], at[i], st[i], wt[i], ft[i],
tat[i]);
printf("=============================================================
====================\n");
printf("\n");
return 0;
Input/Output:
==================================================================
P1 24 0 0 0 24 24
P2 3 0 24 24 27 27
P3 3 0 27 27 30 30
==================================================================
Experiment 3:
Program Code:
#include <stdio.h>
#include <limits.h>
struct Process
};
int main()
scanf("%d", &noOfProcess);
printf("\n");
processes[i].processId = i + 1;
processes[i].completed = 0;
scanf("%d", &processes[i].arrivalTime);
scanf("%d", &processes[i].burstTime);
printf("\n");
processes[noOfProcess].burstTime = INT_MAX;
smallest = noOfProcess;
int found = 0;
smallest = i;
found = 1;
if (found)
processes[smallest].startTime = time;
processes[smallest].turnAroundTime = processes[smallest].finishTime -
processes[smallest].arrivalTime;
processes[smallest].waitTime = processes[smallest].turnAroundTime -
processes[smallest].burstTime;
processes[smallest].completed = 1;
time += processes[smallest].burstTime;
totalWaitTime += processes[smallest].waitTime;
totalTurnAroundTime += processes[smallest].turnAroundTime;
completed++;
else
time++;
printf("\n");
return 0;
Input/Output:
P1 0 24 24 0 24
P2 3 7 37 27 34
P3 5 6 30 19 25
P4 10 10 47 27 37
Experiment 4:
Program Code:
#include <stdio.h>
#include <limits.h>
struct Process
};
int main()
scanf("%d", &noOfProcess);
printf("\n");
processes[i].processId = i + 1;
processes[i].completed = 0;
processes[i].startTime = -1;
scanf("%d", &processes[i].arrivalTime);
scanf("%d", &processes[i].burstTime);
processes[i].remainingTime = processes[i].burstTime;
printf("\n");
processes[noOfProcess].remainingTime = INT_MAX;
smallest = noOfProcess;
int found = 0;
smallest = i;
found = 1;
if (found)
if (processes[smallest].startTime == -1)
processes[smallest].startTime = time;
processes[smallest].remainingTime--;
if (processes[smallest].remainingTime == 0)
processes[smallest].finishTime = time + 1;
processes[smallest].turnAroundTime = processes[smallest].finishTime -
processes[smallest].arrivalTime;
processes[smallest].waitTime = processes[smallest].turnAroundTime -
processes[smallest].burstTime;
processes[smallest].completed = 1;
totalWaitTime += processes[smallest].waitTime;
totalTurnAroundTime += processes[smallest].turnAroundTime;
completed++;
printf("\n");
return 0;
Input/Output:
P1 0 24 47 23 47
P2 3 7 10 0 7
P3 5 6 16 5 11
P4 10 10 26 6 16
Experiment 5:
Program Code:
#include <stdio.h>
struct Process
};
int main()
scanf("%d", &noOfProcesses);
scanf("%d", &timeSlice);
scanf("%d", &contextSwitch);
printf("\n");
processes[i].processId = i + 1;
processes[i].completed = 0;
processes[i].startTime = -1;
processes[i].arrivalTime = 0;
scanf("%d", &processes[i].burstTime);
processes[i].remainingTime = processes[i].burstTime;
printf("\n");
if (processes[i].startTime == -1)
processes[i].startTime = time;
processes[i].remainingTime -= run;
time += run;
else if (processes[i].remainingTime == 0)
i = (i + 1) % noOfProcesses;
continue;
processes[i].finishTime = time;
processes[i].completed = 1;
totalWaitTime += processes[i].waitTime;
totalTurnAroundTime += processes[i].turnAroundTime;
completed++;
i = (i + 1) % noOfProcesses;
time += contextSwitch;
return 0;
Input/Output:
P1 10 24 14 24
P2 1 6 5 6
P3 2 9 7 9
P4 5 21 16 21
Experiment 6:
Program Code:
#include <stdio.h>
#include <conio.h>
int main() {
int k=0,a=0,b=0,instance[5],availability[5],allocated[10][5],need[10][5],MAX[10]
[5],process,P[10],no_of_resources, cnt=0,i, j;
scanf("%d", &no_of_resources);
for (i=0;i<no_of_resources;i++) {
availability[i]=0;
printf("%c = ",(i+97));
scanf("%d",&instance[i]);
scanf("%d", &process);
int op[process];
for (i=0;i<no_of_resources;i++)
printf(" %c",(i+97));
printf("\n");
P[i]=i;
printf("P[%d] ",P[i]);
for (j=0;j<no_of_resources;j++) {
scanf("%d",&allocated[i][j]);
availability[j]+=allocated[i][j];
for (i=0;i<no_of_resources;i++) {
printf(" %c",(i+97));
availability[i]=instance[i]-availability[i];
printf("\n");
printf("P[%d] ",i);
for (j=0;j<no_of_resources;j++)
scanf("%d", &MAX[i][j]);
printf("\n");
A: a=-1;
cnt=0;
b=P[i];
for (j=0;j<no_of_resources;j++) {
need[b][j] = MAX[b][j]-allocated[b][j];
if(need[b][j]<=availability[j])
cnt++;
if(cnt==no_of_resources) {
op[k++]=P[i];
for (j=0;j<no_of_resources;j++)
availability[j]+=allocated[b][j];
} else
P[++a]=P[i];
if(a!=-1) {
process=a+1;
goto A;
printf("<");
for (i=0;i<k;i++)
printf(">");
return 0;
Input/Output:
a = 10
b=5
c=7
abc
P[0] 0 1 0
P[1] 2 0 0
P[2] 3 0 2
P[3] 2 1 1
P[4] 0 0 2
abc
P[0] 7 5 3
P[1] 3 2 2
P[2] 9 0 2
P[3] 4 2 2
P[4] 5 3 3
Experiment 7:
Program Code:
#include <stdio.h>
#include <stdlib.h>
int totalMovement = 0;
currentPosition = requests[i];
int main()
int n, initial;
scanf("%d", &initial);
scanf("%d", &n);
scanf("%d", &requests[i]);
fcfs(requests, n, initial);
free(requests);
return 0;
Input/Output:
176
79
34
60
92
11
41
114
Experiment 8:
Implement SSTF Disk Scheduling Algorithm.
Program Code:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
if (!processed[i])
minSeekTime = seekTime;
minIndex = i;
return minIndex;
int totalMovement = 0;
int processed[n];
processed[i] = 0;
if (index != -1)
currentPosition = requests[index];
processed[index] = 1;
int main()
int n, initial;
scanf("%d", &initial);
scanf("%d", &n);
scanf("%d", &requests[i]);
sstf(requests, n, initial);
free(requests);
return 0;
Input/Output:
150
85
90
175
60
110
Experiment 9:
Implement SCAN Disk Scheduling Algorithm.
Program Code:
#include <stdio.h>
#include <stdlib.h>
void scan(int requests[], int n, int initial, int direction, int disk_size)
int totalMovement = 0;
int i;
requests[n] = initial;
n++;
int index = 0;
if (requests[i] == initial)
index = i;
break;
if (direction == 1)
currentPosition = requests[i];
if (currentPosition != disk_size - 1)
currentPosition = disk_size - 1;
currentPosition = requests[i];
else
currentPosition = requests[i];
if (currentPosition != 0)
printf("0 ");
totalMovement += abs(currentPosition);
currentPosition = 0;
currentPosition = requests[i];
int main()
scanf("%d", &initial);
scanf("%d", &n);
scanf("%d", &requests[i]);
scanf("%d", &disk_size);
scanf("%d", &direction);
free(requests);
return 0;
Input/Output:
40
10
90
180
150
120
Experiment 10:
Implement C-SCAN Disk Scheduling Algorithm.
Program Code:
#include <stdio.h>
#include <stdlib.h>
int totalMovement = 0;
int i;
requests[n] = initial;
n++;
int index = 0;
if (requests[i] == initial)
index = i;
break;
currentPosition = requests[i];
if (currentPosition != disk_size - 1)
currentPosition = disk_size - 1;
printf("0 ");
currentPosition = 0;
currentPosition = requests[i];
int main()
scanf("%d", &initial);
scanf("%d", &n);
scanf("%d", &requests[i]);
scanf("%d", &disk_size);
free(requests);
return 0;
Input/Output:
176
79
34
60
92
11
41
114
Experiment 10:
Program Code:
#include <stdio.h>
#include <stdlib.h>
int mutex = 1;
int full = 0;
void producer()
--mutex;
++full;
--empty;
x++;
++mutex;
void consumer()
--mutex;
--full;
++empty;
x--;
++mutex;
int main()
int n, i;
scanf("%d", &n);
switch (n) {
case 1:
if ((mutex == 1)
producer();
else {
printf("Buffer is full!\n");
break;
case 2:
if ((mutex == 1)
consumer();
else {
printf("Buffer is empty!\n");
break;
case 3:
exit(0);
break;
Input/Output:
Buffer is empty!
Buffer is empty!