OS Lab Manual: Objective
OS Lab Manual: Objective
K. Ravi Chythanya
OS Lab Manual
Objective:
This manual is used to provide an understanding of the design aspects of
operating system.
Intel based desktop PC with minimum of 1.66 MHZ or faster processor with at
least 64 MB RAM and 100 MB free disk space
Develope
d By:
K. Ravi
Chythanya,
Assistant
Professor,
Department of Computer Science
and Engineering, Sree Chaitanya
College of Engineering,
Karimnagar.
-1-
OS Lab Manual
K. Ravi Chythanya
Table of Contents
S. No
1)
2)
3)
4)
5)
6)
Programs Name
Simulate the following CPU Scheduling Algorithms
a) FCFS
b) SJF
c) Priority
d) Round Robin
Simulate MVT and MFT
Simulate Bankers algorithm for Deadlock Avoidance
Simulate Bankers Algorithm for deadlock Prevention
Simulate all Page Replacement Algorithms
a) FIFO
b) LRU
Simulate Paging Technique of Memory Management
-2-
Page No
4
6
8
10
12
16
19
22
24
27
OS Lab Manual
K. Ravi Chythanya
Operating System
-3-
OS Lab Manual
K. Ravi Chythanya
-4-
OS Lab Manual
K. Ravi Chythanya
for(i=0;i<n;i++)
{ printf("\n%s\t%6d\t\t%6d\t%6d\t%6d\t
%6d",pn[i],arr[i],bur[i],star[i],tat[i],finish[i]); totwt+=wt[i];
tottat+=tat[i];
}
printf("\nAverage Waiting time:%f",(float)totwt/n);
printf("\nAverage Turn Around Time:%f",(float)tottat/n);
getch();
}
OUTPUT:
Input:
Enter the number of processes: 3
Enter the Process Name, Arrival Time & Burst Time: 1 2 3
Enter the Process Name, Arrival Time & Burst Time: 2 5 6
Enter the Process Name, Arrival Time & Burst Time: 3 6 7
Output:
PName Arrtime Burtime Srart TAT Finish
1
2
3
2
3
5
2
5
6
5
6
4
3
6
7
6
7
10
Average Waiting Time: 3.333
Average Turn Around Time: 7.000
-5-
OS Lab Manual
K. Ravi Chythanya
b) SJF:
AIM: A program to simulate the SJF CPU scheduling algorithm
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
int et[20],at[10],n,i,j,temp,st[10],ft[10],wt[10],ta[10];
int totwt=0,totta=0;
float awt,ata;
char pn[10][10],t[10];
clrscr();
printf("Enter the number of process:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter process name, arrival time & execution time:");
flushall();
scanf("%s%d%d",pn[i],&at[i],&et[i]);
} for(i=0;i<n;i+
+)
for(j=0;j<n;j++)
{
if(et[i]<et[j])
{ temp=at[i];
at[i]=at[j];
at[j]=temp;
temp=et[i];
et[i]=et[j];
et[j]=temp;
strcpy(t,pn[i]);
strcpy(pn[i],pn[j]);
strcpy(pn[j],t);
}
}
for(i=0;i<n;i++)
{ if(i==0)
st[i]=at[i];
else
st[i]=ft[i-1];
-6-
OS Lab Manual
K. Ravi Chythanya
wt[i]=st[i]-at[i];
ft[i]=st[i]+et[i];
ta[i]=ft[i]-at[i];
totwt+=wt[i];
totta+=ta[i];
}
awt=(float)totwt/n;
ata=(float)totta/n;
printf("\nPname\tarrivaltime\texecutiontime\twaitingtime\ttatime");
for(i=0;i<n;i++) printf("\n%s\t%5d\t\t%5d\t\t%5d\t\t
%5d",pn[i],at[i],et[i],wt[i],ta[i]); printf("\nAverage waiting time is:
%f",awt);
printf("\nAverage turnaroundtime is:%f",ata);
getch();
}
OUTPUT:
Input:
Enter the number of processes: 3
Enter the Process Name, Arrival Time & Burst Time: 1 4 6
Enter the Process Name, Arrival Time & Burst Time: 2 5 15
Enter the Process Name, Arrival Time & Burst Time: 3 6 11
Output:
Pname arrivaltime executiontime waitingtime tatime
1
4
6
0
6
3
6
11
4
15
2
5
15
16
31
Average Waiting Time: 6.6667
Average Turn Around Time: 17.3333
-7-
OS Lab Manual
K. Ravi Chythanya
c) Priority:
AIM: A program to simulate the priority CPU scheduling algorithm
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
int et[20],at[10],n,i,j,temp,p[10],st[10],ft[10],wt[10],ta[10];
int totwt=0,totta=0;
float awt,ata;
char pn[10][10],t[10];
clrscr();
printf("Enter the number of process:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter process name,arrivaltime,execution time & priority:");
flushall();
scanf("%s%d%d%d",pn[i],&at[i],&et[i],&p[i]);
} for(i=0;i<n;i+
+)
for(j=0;j<n;j++)
{
if(p[i]<p[j])
{ temp=p[i];
p[i]=p[j];
p[j]=temp;
temp=at[i];
at[i]=at[j];
at[j]=temp;
temp=et[i];
et[i]=et[j];
et[j]=temp;
strcpy(t,pn[i]);
strcpy(pn[i],pn[j]);
strcpy(pn[j],t);
}
}
for(i=0;i<n;i++)
{
-8-
OS Lab Manual
K. Ravi Chythanya
if(i==0)
{ st[i]=at[i];
wt[i]=st[i]-at[i];
ft[i]=st[i]+et[i];
ta[i]=ft[i]-at[i];
}
else
{
st[i]=ft[i-1];
wt[i]=st[i]-at[i];
ft[i]=st[i]+et[i];
ta[i]=ft[i]-at[i];
}
totwt+=wt[i];
totta+=ta[i];
}
awt=(float)totwt/n;
ata=(float)totta/n;
printf("\nPname\tarrivaltime\texecutiontime\tpriority\twaitingtime\ttatime");
for(i=0;i<n;i++) printf("\n%s\t%5d\t\t%5d\t\t%5d\t\t%5d\t\t
%5d",pn[i],at[i],et[i],p[i],wt[i],ta[i]); printf("\nAverage waiting time is:
%f",awt);
printf("\nAverage turnaroundtime is:%f",ata);
getch();
}
OUTPUT:
Input:
Enter the number of processes: 3
Enter the Process Name, Arrival Time, execution time & priority: 1 2 3 1
Enter the Process Name, Arrival Time, execution time & priority: 2 4 5 2
Enter the Process Name, Arrival Time, execution time & priority: 3 5 6 3
Output:
Pname arrivaltime executiontime priority waitingtime
1
2
3
1
0
2
4
5
2
1
3
5
6
3
5
Average Waiting Time: 2.0000
Average Turn Around Time: 6.6667
-9-
tatime
3
6
11
OS Lab Manual
K. Ravi Chythanya
d) Round Robin:
AIM: A program to simulate the Round Robin CPU scheduling algorithm
PROGRAM:
#include<stdio.h>
#include<conio.h>
void main()
{
int et[30],ts,n,i,x=0,tot=0;
char pn[10][10];
clrscr();
printf("Enter the no of processes:");
scanf("%d",&n);
printf("Enter the time quantum:");
scanf("%d",&ts);
for(i=0;i<n;i++)
{
printf("enter process name & estimated time:");
scanf("%s %d",pn[i],&et[i]);
}
printf("The processes are:");
for(i=0;i<n;i++)
printf("process %d: %s\n",i+1,pn[i]);
for(i=0;i<n;i++)
tot=tot+et[i];
while(x!=tot)
{
for(i=0;i<n;i++)
{
if(et[i]>ts)
{
x=x+ts;
printf("\n %s -> %d",pn[i],ts);
et[i]=et[i]-ts;
}
else
if((et[i]<=ts)&&et[i]!=0)
{
x=x+et[i];
printf("\n %s -> %d",pn[i],et[i]);
et[i]=0;}
}
- 10 -
OS Lab Manual
K. Ravi Chythanya
}
printf("\n Total Estimated Time:%d",x);
getch();
}
OUTPUT:
Input:
Enter the no of processes: 2
Enter the time quantum: 3
Enter the process name & estimated time: p1 12
Enter the process name & estimated time: p2 15
Output:
p1 -> 3
p2 -> 3
p1 -> 3
p2 -> 3
p1 -> 3
p2 -> 3
p1 -> 3
p2 -> 3
p2 -> 3
Total Estimated Time: 27
- 11 -
OS Lab Manual
K. Ravi Chythanya
- 12 -
OS Lab Manual
K. Ravi Chythanya
OUTPUT:
Input:
Enter the memory capacity: 80
Enter no of processes: 2
Enter memory req for process1: 23
Output:
The memory allocated for process1 is: 80
Remaining memory is: 57
External fragmentation for this process is: 57
Enter memory req for process2: 52
The memory allocated for process2 is: 57
Remaining memory is: 5
External fragmentation for this process is: 5
- 13 -
OS Lab Manual
K. Ravi Chythanya
MFT:
AIM: A Program to simulate the MFT
PROGRAM:
#include<stdio.h>
#include<conio.h>
void main()
{
int m,p,s,p1;
int m1[4],i,f,f1=0,f2=0,fra1,fra2,s1;
clrscr();
printf("Enter the memory size:");
scanf("%d",&m);
printf("Enter the no of partitions:");
scanf("%d",&p);
s=m/p;
printf("Each partn size is:%d",s);
printf("\nEnter the no of processes:");
scanf("%d",&p1);
for(i=0;i<p1;i++)
{
printf("\nEnter the memory req for process%d:",i+1);
scanf("%d",&m1[i]);
if(m1[i]<=s)
{
printf("\nProcess is allocated in partition%d",i+1);
fra1=s-m1[i];
printf("\nInternal fragmentation for process is:%d",fra1);
f1=f1+fra1;
}
else
{
printf("\nProcess not allocated in partition%d",i+1);
s1=m1[i]-s;
fra2=s-s1;
f2=f2+fra2;
printf("\nExternal fragmentation for partition is:%d",fra2);
}
}
printf("\nProcess\tmemory\tallocatedmemory");
for(i=0;i<p1;i++) printf("\n%5d\t%5d\t
%5d",i+1,s,m1[i]); f=f1+f2;
printf("\nThe tot no of fragmentation is:%d",f);
getch();
}
- 14 -
OS Lab Manual
K. Ravi Chythanya
OUTPUT:
Input:
Enter the memory size: 80
Enter the no of partitions: 4
Each partition size: 20
Enter the number of processes: 2
Enter the memory req for process1: 18
Output:
Process1 is allocated in partn1
Internal fragmentation for process1 is: 2
Enter the memory req for process2: 22
Process2 is not allocated in partn2
External fragmentation for process2 is: 18
Process
1
2
memory
20
20
allocated
18
22
- 15 -
OS Lab Manual
K. Ravi Chythanya
- 16 -
OS Lab Manual
K. Ravi Chythanya
j=0;
for(i=1;i<=n;i++)
{ totalloc[k]=j+resalloc[i]
[k]; j=totalloc[k];
}
}
for(i=1;i<=n;i++)
{ if(block[i]==1||
run[i]==1) active[i]=1;
else
active[i]=0;
}
for(k=1;k<=r;k++)
{ resalloc[p][k]
+=newreq[k]; totalloc[k]
+=newreq[k];
}
for(k=1;k<=r;k++)
{
if(totext[k]-totalloc[k]<0)
{
u=1;break;
}
}
if(u==0)
{ for(k=1;k<=r;k++)
simalloc[k]=totalloc[k];
for(s=1;s<=n;s++)
for(i=1;i<=n;i++)
{
if(active[i]==1)
{ j=0;
for(k=1;k<=r;k++)
{
if((totext[k]-simalloc[k])<(max[i][k]-resalloc[i][k]))
{
j=1;break;
}
}
}
if(j==0)
{
- 17 -
OS Lab Manual
K. Ravi Chythanya
active[i]=0;
for(k=1;k<=r;k++)
simalloc[k]=resalloc[i][k];
}
} m=0;
for(k=1;k<=r;k++)
resreq[p][k]=newreq[k];
printf("Deadlock willn't occur");
}
else
{
for(k=1;k<=r;k++)
{ resalloc[p]
[k]=newreq[k];
totalloc[k]=newreq[k];
}
printf("Deadlock will occur");
}
getch();
}
OUTPUT:
Input:
Enter the no of resources: 4
Enter the no of resource classes: 3
Enter the total existed resources in each class: 3 2 2
Enter the allocated resources: 1 0 0 5 1 1 2 1 1 0 0 2
Enter the process making the new request: 2
Enter the requested resource: 1 1 2
Enter the processes which are n blocked or running:
Process 1: 1 2
Process 3: 1 0
Process 4: 1 0
Output:
Deadlock will occur
- 18 -
OS Lab Manual
K. Ravi Chythanya
- 19 -
OS Lab Manual
K. Ravi Chythanya
{
for(j=0;j<n;j++)
{
printf("\t%d",cl[i][j]);
}
printf("\n");
}
printf("\n Allocated matrix:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("\t%d",al[i][j]);
}
printf("\n");
}
printf("Available matrix:\n");
for(i=0;i<n;i++)
{
printf("%d\t",av[i]);
}
//for(k=0;k<m;k++)
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{ if(av[j]>=ne[i]
[j]) flag=1;
else
flag=0;
}
} if(flag==0)
printf("Unsafe State");
else
printf("Safe State");
getch();
}
- 20 -
OS Lab Manual
K. Ravi Chythanya
OUTPUT:
Input:
Enter the claim matrix:3 2 2 6 1 3 3 1 4 4 2 2
Enter allocated matrix:1 0 0 5 1 1 2 1 1 0 0 2
The need matrix:
2
2
2
1
0
2
1
0
3
4
2
0
Enter available matrix1 1 2
Output:
Claim matrix:
3
2
6
1
3
1
4
2
2
3
4
2
Allocated matrix:
1
0
0
5
1
1
2
1
1
0
0
2
Available matrix:
1
1
2
Safe State
- 21 -
OS Lab Manual
K. Ravi Chythanya
- 22 -
OS Lab Manual
K. Ravi Chythanya
{ if(b[i+1]==a[k
]) p=1;
}
}
printf("\nNo of faults:%d",m);
getch();
}
OUTPUT:
Input:
Enter the Number of Pages: 12
Enter 12 Page Numbers:
232152453252
Output:
2
3
2
1
5
2
4
5
3
2
5
2
2-> F
23-> F
23
231-> F
531-> F
521-> F
524-> F
524
324-> F
324
354-> F
352-> F
No of faults: 9
- 23 -
OS Lab Manual
K. Ravi Chythanya
b) LRU:
AIM: A program to simulate LRU Page Replacement Algorithm
PROGRAM:
#include<stdio.h>
#include<conio.h>
void main()
{
int g=0,a[5],b[20],p=0,q=0,m=0,h,k,i,q1=1,j,u,n;
char f='F';
clrscr();
printf("Enter the number of pages:");
scanf("%d",&n);
printf("Enter %d Page Numbers:",n);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=0;i<n;i++)
{if(p==0)
{ if(q>=3
) q=0;
a[q]=b[i];
q++;
if(q1<3)
{
q1=q;
//g=1;
}
} printf("\n%d",b[i]);
printf("\t");
for(h=0;h<q1;h++)
printf("%d",a[h]);
if((p==0)&&(q<=3))
{
printf("-->%c",f);
m++;
}
p=0;
g=0;
if(q1==3)
{
for(k=0;k<q1;k++)
{
if(b[i+1]==a[k])
- 24 -
OS Lab Manual
K. Ravi Chythanya
p=1;
}
for(j=0;j<q1;j++)
{ u=
0;
k=i;
while(k>=(i-1)&&(k>=0))
{ if(b[k]==a[j
]) u++;
k--;
}
if(u==0)
q=j;
}
}
else
{
for(k=0;k<q;k++)
{ if(b[i+1]==a[k
]) p=1;
}
}
}
printf("\nNo of faults:%d",m);
getch();
}
- 25 -
OS Lab Manual
K. Ravi Chythanya
OUTPUT:
Input:
Enter the Number of Pages: 12
Enter 12 Page Numbers:
232152453252
Output:
2
3
2
1
5
2
4
5
3
2
5
2
2-> F
23-> F
23
231-> F
251-> F
251
254-> F
254
354-> F
352-> F
352
352
No of faults: 7
- 26 -
OS Lab Manual
K. Ravi Chythanya
OUTPUT:
Input:
Enter how many pages: 5
Enter the page size: 4
Output:
Page1
Page2
Page3
Page4
Page5
Address: 1894
Address: 1902
Address: 1910
Address: 1918
Address: 1926
- 27 -