OS-Lab-Manual 2019-20
OS-Lab-Manual 2019-20
LAB MANUAL
OPERATING SYSTEM LAB
Session 2019-20
1
JECRC UNIVERSITY
JAIPUR
Lab Objectives/Aims
Upon successful completion of this lab the student will be able to:
CO1 H M M M M H H M
CO2 H M M M M H H M
CO3 H M M M M H H M
CO4 H M M M M H H M
2
JECRC UNIVERSITY
JAIPUR
List of Experiments
3
JECRC UNIVERSITY
JAIPUR
Aim: Write a C program to implement the various process scheduling mechanisms such as FCFS
scheduling:
Step 3: For each process in the ready Q, assign the process id and accept the CPU burst time
Step 4: Set the waiting of the first process as ‘0’ and its burst time as its turnaround time
(a) Waiting time for process(n)= waiting time of process (n-1) + Burst time of process(n-1)
(b) Turn around time for Process(n)= waiting time of Process(n)+ Burst time for process(n)
Step 6: Calculate
/* PROGRAM */
#include<stdio.h>
void main()
int i,n,sum,wt,tat,twt,ttat;
int t[10];
float awt,atat;
4
printf("Enter number of processors:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("\n %d",&t[i]);
sum=0;
twt=0;
ttat=t[0];
for(i=1;i<n;i++)
sum+=t[i-1];
wt=sum;
tat=sum+t[i];
twt=twt+wt;
ttat=ttat+tat;
printf("\n\n");
awt=(float)twt/n;
atat=(float)ttat/n;
5
printf("\n Average Turnaround Time %4.2f",atat);
getch();
OUTPUT:
1 0 2
2 2 7
3 7 11
6
JECRC UNIVERSITY
JAIPUR
Aim: Write a C program to implement the various process scheduling mechanisms such as SJF
Scheduling.
Step 3: For each process in the ready Q, assign the process id and accept the CPU burst time
Step 4: Start the Ready Q according the shortest Burst time by sorting according to lowest to highest burst
time.
Step 5: Set the waiting time of the first process as ‘0’ and its turnaround time as its burst time.
(c) Waiting time for process(n)= waiting time of process (n-1) + Burst time of process(n-1)
(d) Turn around time for Process(n)= waiting time of Process(n)+ Burst time for process(n)
Step 6: Calculate
/* PROGRAM */
#include<stdio.h>
void main()
int i,j,k,n,sum,wt[10],tt[10],twt,ttat;
int t[10],p[10];
7
float awt,atat;
clrscr();
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("\n %d",&t[i]);
for(i=0;i<n;i++)
p[i]=i;
for(i=0;i<n;i++)
for(k=i+1;k<n;k++)
if(t[i]>t[k])
int temp;
temp=t[i];
t[i]=t[k];
t[k]=temp;
temp=p[i];
p[i]=p[k];
p[k]=temp;
} }
8
printf("\n PROCESS ID \t BURST TIME \t WAITING TIME \t TURNAROUND TIME \n\n");
wt[0]=0;
for(i=0;i<n;i++)
sum=0;
for(k=0;k<i;k++)
wt[i]=sum+t[k];
sum=wt[i];
} }
for(i=0;i<n;i++)
tt[i]=t[i]+wt[i];
for(i=0;i<n;i++)
twt=0;
ttat=t[0];
for(i=1;i<n;i++)
twt=twt+wt[i];
ttat=ttat+tt[i];
awt=(float)twt/n;
9
atat=(float)ttat/n;
getch();
}}
OUTPUT:
1 3 0 3
0 4 3 7
2 5 7 12
10
JECRC UNIVERSITY
JAIPUR
Aim: Write a C program to implement the various process scheduling mechanisms such as Round Robin
Scheduling.
Step 2: Accept the number of processes in the ready Queue and time quantum (or) time slice
Step 3: For each process in the ready Q, assign the process id and accept the CPU burst time
Step 4: Calculate the no. of time slices for each process where
Step 5: If the burst time is less than the time slice then the no. of time slices =1.
(a) Waiting time for process(n) = waiting time of process(n-1)+ burst time of process(n-1 ) + the
time difference in getting the CPU from process(n-1)
(b) Turn around time for process(n) = waiting time of process(n) + burst time of process(n)+ the
time difference in getting CPU from process(n).
Step 7: Calculate
/* PROGRAM */
#include<stdio.h>
#include<conio.h>
11
void main()
int ts,pid[10],need[10],wt[10],tat[10],i,j,n,n1;
int bt[10],flag[10],ttat=0,twt=0;
float awt,atat;
clrscr();
scanf("%d",&n);
n1=n;
scanf("%d",&ts);
for(i=1;i<=n;i++)
scanf("%d",&pid[i]);
scanf("%d",&bt[i]);
need[i]=bt[i];
for(i=1;i<=n;i++)
flag[i]=1;
wt[i]=0;
while(n!=0)
12
{
for(i=1;i<=n;i++)
if(need[i]>=ts)
for(j=1;j<=n;j++)
if((i!=j)&&(flag[i]==1)&&(need[j]!=0))
wt[j]+=ts;
need[i]-=ts;
if(need[i]==0)
flag[i]=0;
n--;
} }
else
for(j=1;j<=n;j++)
if((i!=j)&&(flag[i]==1)&&(need[j]!=0))
wt[j]+=need[i];
need[i]=0;
n--;
flag[i]=0;
13
}}}
for(i=1;i<=n1;i++)
tat[i]=wt[i]+bt[i];
twt=twt+wt[i];
ttat=ttat+tat[i];
awt=(float)twt/n1;
atat=(float)ttat/n1;
for(i=1;i<=n1;i++)
printf("\n %5d \t %5d \t\t %5d \t\t %5d \t\t %5d \n", i,pid[i],bt[i],wt[i],tat[i]);
getch();
OUTPUT:
14
Enter the Burst Time for the process 10
1 5 10 15 25
2 6 15 25 40
3 7 20 25 45
4 8 25 20 45
15
JECRC UNIVERSITY
JAIPUR
Aim: Write a C program to implement the various process scheduling mechanisms such as Priority
Scheduling.
Step 3: For each process in the ready Q, assign the process id and accept the CPU burst time
Step 5: Set the waiting of the first process as ‘0’ and its burst time as its turnaround time
(e) Waiting time for process(n)= waiting time of process (n-1) + Burst time of process(n-1)
(f) Turn around time for Process(n)= waiting time of Process(n)+ Burst time for process(n)
Step 7: Calculate
/* PROGRAM */
#include <stdio.h>
#include <conio.h>
void main()
int i,j,n,tat[10],wt[10],bt[10],pid[10],pr[10],t,twt=0,ttat=0;
16
float awt,atat;
clrscr();
printf("\n-----------PRIORITY SCHEDULING--------------\n");
scanf("%d", &n);
for (i=0;i<n;i++)
pid[i] = i;
scanf("%d",&bt[i]);
scanf ("%d",&pr[i]);
// Sorting start
for (i=0;i<n;i++)
for(j=i+1;j<n;j++)
t = pr[i];
pr[i] = pr[j];
pr[j] = t;
t = bt[i];
bt[i] = bt[j];
bt[j] = t;
t = pid[i];
17
pid[i] = pid[j];
pid[j] = t;
} }
// Sorting finished
tat[0] = bt[0];
wt[0] = 0;
for (i=1;i<n;i++)
printf("\n---------------------------------------------------------------\n");
printf("\n--------------------------------------------------------------\n");
for(i=0;i<n;i++)
printf("\n%d\t\t%d\t%d\t\t%d\t\t%d",pid[i],pr[i],bt[i],wt[i],tat[i]);
for(i=0;i<n;i++)
ttat = ttat+tat[i];
awt = (float)twt / n;
atat = (float)ttat / n;
18
getch();
OUTPUT:
-----------PRIORITY SCHEDULING--------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
2 1 4 0 4
1 2 6 4 10
0 3 2 10 12
3 7 5 12 17
19
JECRC UNIVERSITY
JAIPUR
AIM: To implement deadlock avoidance & Prevention by using Banker’s Algorithm Deadlock
avoidance & Dead Lock Prevention
/* BANKER’S ALGORITHM */
When a new process enters a system, it must declare the maximum number of instances of each resource
type it needed. This number may exceed the total number of resources in the system. When the user request
a set of resources, the system must determine whether the allocation of each resources will leave the
system in safe state. If it will the resources are allocation; otherwise the process must wait until some other
process release the resources.
Data structures
• n-Number of process, m-number of resource types.
• Available: Available[j]=k, k – instance of resource type Rj is available.
• Max: If max[i, j]=k, Pi may request at most k instances resource Rj.
• Allocation: If Allocation [i, j]=k, Pi allocated to k instances of resource Rj
• Need: If Need[I, j]=k, Pi may need k more instances of resource type Rj, Need[I, j]=Max[I, j]-
Allocation[I, j];
Safety Algorithm
1. Work and Finish be the vector of length m and n respectively, Work=Available and Finish[i]
=False.
2. Find an i such that both
• Finish[i] =False
• Need<=Work
If no such I exists go to step 4.
Let Request i be request vector for the process Pi, If request i=[j]=k, then process Pi wants k instances of
resource type Rj.
20
Allocation I =Allocation+Request I;
If the resulting resource allocation state is safe, the transaction is completed and process Pi is allocated its
resources. However if the state is unsafe, the Pi must wait for Request i and the old resource-allocation
state is restored.
ALGORITHM:
#include<stdio.h>
#include<conio.h>
struct da
int max[10],a1[10],need[10],before[10],after[10];
}p[10];
int main()
int i,j,k,l,r,n,tot[10],av[10],cn=0,cz=0,temp=0,c=0;
scanf("%d",&n);
scanf("%d",&r);
for(i=0;i<n;i++)
21
{
printf("PROCESS %d \n",i+1);
for(j=0;j<r;j++)
scanf("%d",&p[i].max[j]);
for(j=0;j<r;j++)
scanf("%d",&p[i].a1[j]);
p[i].need[j]=p[i].max[j]-p[i].a1[j];
}}
for(i=0;i<r;i++)
scanf("%d",&tot[i]);
for(i=0;i<r;i++)
for(j=0;j<n;j++)
temp=temp+p[j].a1[i];
av[i]=tot[i]-temp;
temp=0;
22
for(i=0;i<n;i++)
for(j=0;j<r;j++)
printf("%d",p[i].max[j]);
printf("\t");
for(j=0;j<r;j++)
printf("%d",p[i].a1[j]);
printf("\t");
for(j=0;j<r;j++)
printf("%d",p[i].need[j]);
printf("\t");
for(j=0;j<r;j++)
if(i==0)
printf("%d",tot[j]);
printf(" ");
for(j=0;j<r;j++)
if(i==0)
printf("%d",av[j]);
}}
for(l=0;l<n;l++)
23
for(i=0;i<n;i++)
for(j=0;j<r;j++)
if(p[i].need[j] >av[j])
cn++;
if(p[i].max[j]==0)
cz++;
for(j=0;j<r;j++)
p[i].before[j]=av[j]-p[i].need[j];
p[i].after[j]=p[i].before[j]+p[i].max[j];
av[j]=p[i].after[j];
p[i].max[j]=0;
printf("\n P %d \t",i+1);
for(j=0;j<r;j++)
printf("%d",p[i].before[j]);
printf("\t");
for(j=0;j<r;j++)
printf("%d",p[i].after[j]);
cn=0;
cz=0;
24
c++;
break;
else
cn=0;cz=0;
}}}
if(c==n)
else
getch();
OUTPUT:
//TEST CASE 1:
PROCESS 1
PROCESS 2
25
MAXIMUM VALUE FOR RESOURCE 2:1
PROCESS 3
PROCESS 4
26
P4 422 002 420
P2 010 623
P1 401 723
P3 620 934
P4 514 936
//TEST CASE:2
PROCESS 1
PROCESS 2
PROCESS 3
27
MAXIMUM VALUE FOR RESOURCE 2:1
PROCESS 4
DEADLOCK OCCURED
JECRC UNIVERSITY
JAIPUR
28
Exp No: 6 Date: _ _/_ _/
Step 2: When the page is required replace the page at the head of the queue
Step 3: Now the new page is inserted at the tail of the queue
/* PROGRAM */
#include<stdio.h>
#include<conio.h>
int i,j,nof,nor,flag=0,ref[50],frm[50],pf=0,victim=-1;
void main()
clrscr();
scanf("%d",&nof);
scanf("%d",&nor);
for(i=0;i<nor;i++)
scanf("%d",&ref[i]);
for(i=0;i<nor;i++)
printf("%4d",ref[i]);
for(i=1;i<=nof;i++)
29
frm[i]=-1;
printf("\n");
for(i=0;i<nor;i++)
flag=0;
for(j=0;j<nof;j++)
if(frm[j]==ref[i])
flag=1;
break;
}}
if(flag==0)
pf++;
victim++;
victim=victim%nof;
frm[victim]=ref[i];
for(j=0;j<nof;j++)
printf("%4d",frm[j]);
}}
getch(); }
OUTPUT:
30
Enter no.of frames....4
564123
...................................... 5 6 4 1 2 3
Reference np5-> 5 -1 -1 -1
Reference np6-> 5 6 -1 -1
Reference np4-> 5 6 4 -1
Reference np1-> 5 6 4 1
Reference np2-> 2 6 4 1
Reference np3-> 2 3 4 1
31
JECRC UNIVERSITY
JAIPUR
Here we select the page that has not been used for the longest period of time.
Step 2: When the page is required replace the page at the head of the queue
Step 3: Now the new page is inserted at the tail of the queue
Step 5: When the page fault occurs replace page present at the bottom of the stack
/* PROGRAM */
#include<stdio.h>
#include<conio.h>
int i,j,nof,nor,flag=0,ref[50],frm[50],pf=0,victim=-1;
int recent[10],lrucal[50],count=0;
int lruvictim();
void main()
clrscr();
scanf("%d",&nof);
32
printf(" Enter no.of reference string..");
scanf("%d",&nor);
for(i=0;i<nor;i++)
scanf("%d",&ref[i]);
printf("\n………………………………..");
for(i=0;i<nor;i++)
printf("%4d",ref[i]);
for(i=1;i<=nof;i++)
frm[i]=-1;
lrucal[i]=0;
for(i=0;i<10;i++)
recent[i]=0;
printf("\n");
for(i=0;i<nor;i++)
flag=0;
for(j=0;j<nof;j++)
if(frm[j]==ref[i])
33
flag=1;
break;
} }
if(flag==0)
count++;
if(count<=nof)
victim++;
else
victim=lruvictim();
pf++;
frm[victim]=ref[i];
for(j=0;j<nof;j++)
printf("%4d",frm[j]);
recent[ref[i]]=i;
getch(); }
int lruvictim()
int i,j,temp1,temp2;
for(i=0;i<nof;i++)
temp1=frm[i];
lrucal[i]=recent[temp1]; }
34
temp2=lrucal[0];
for(j=1;j<nof;j++)
if(temp2>lrucal[j])
temp2=lrucal[j];
for(i=0;i<nof;i++)
if(ref[temp2]==frm[i])
return i;
return 0; }
OUTPUT:
654231
…………………. 6 5 4 2 3 1
Reference NO 6-> 6 -1 -1
Reference NO 5-> 6 5 -1
Reference NO 4-> 6 5 4
Reference NO 2-> 2 5 4
Reference NO 3-> 2 3 4
Reference NO 1-> 2 3 1
35
JECRC UNIVERSITY
JAIPUR
AIM: To implement page replacement algorithms Optimal (The page which is not used for longest
time)
Here we select the page that will not be used for the longest period of time.
Step 2: When the page fault occurs replace page that will not be used for the longest period of time
/* PROGRAM */
#include<stdio.h>
#include<conio.h>
int i,j,nof,nor,flag=0,ref[50],frm[50],pf=0,victim=-1;
int recent[10],optcal[50],count=0;
int optvictim();
void main()
clrscr();
printf("\n.................................");
scanf("%d",&nof);
scanf("%d",&nor);
for(i=0;i<nor;i++)
36
scanf("%d",&ref[i]);
clrscr();
printf("\n................................");
printf("\n....................\n");
for(i=0;i<nor;i++)
printf("%4d",ref[i]);
for(i=0;i<nof;i++)
{ frm[i]=-1;
optcal[i]=0; }
for(i=0;i<10;i++)
recent[i]=0;
printf("\n");
for(i=0;i<nor;i++)
flag=0;
printf("\n\tref no %d ->\t",ref[i]);
for(j=0;j<nof;j++)
if(frm[j]==ref[i])
{ flag=1;
break;
} }
if(flag==0)
37
count++;
if(count<=nof)
victim++;
else
victim=optvictim(i);
pf++;
frm[victim]=ref[i];
for(j=0;j<nof;j++)
printf("%4d",frm[j]);
} }
getch(); }
int i,j,temp,notfound;
for(i=0;i<nof;i++)
notfound=1;
for(j=index;j<nor;j++)
if(frm[i]==ref[j])
notfound=0;
optcal[i]=j;
break;
if(notfound==1)
38
return i;
temp=optcal[0];
for(i=1;i<nof;i++)
if(temp<optcal[i])
temp=optcal[i];
for(i=0;i<nof;i++)
if(frm[temp]==frm[i])
return i;
return 0; }
OUTPUT:
654231
…………………. 6 5 4 2 3 1
Reference NO 6-> 6 -1 -1
Reference NO 5-> 6 5 -1
Reference NO 4-> 6 5 4
Reference NO 2-> 2 5 4
Reference NO 3-> 2 3 4
Reference NO 1-> 2 3 1
39
JECRC UNIVERSITY
JAIPUR
/* PROGRAM */
#include <stdio.h>
#include <conio.h>
struct pstruct
int fno;
int pbit;
}ptable[10];
int pmsize,lmsize,psize,frame,page,ftable[20],frameno;
void info()
40
scanf("%d",&pmsize);
scanf("%d",&lmsize);
scanf("%d",&psize);
void assign()
int i;
for (i=0;i<page;i++)
ptable[i].fno = -1;
ptable[i].pbit= -1;
for(i=0; i<frame;i++)
ftable[i] = 32555;
for (i=0;i<page;i++)
scanf("%d",&frameno);
ftable[frameno] = i;
if(ptable[i].pbit == -1)
41
{
ptable[i].fno = frameno;
ptable[i].pbit = 1;
} }
getch();
// clrscr();
printf("\n\nPAGE TABLE\n\n");
for (i=0;i<page;i++)
printf("%d\t\t%d\t\t%d\n",i,ptable[i].fno,ptable[i].pbit);
printf("\n\n\n\tFRAME TABLE\n\n");
printf("FrameAddress PageNo\n\n");
for(i=0;i<frame;i++)
printf("%d\t\t%d\n",i,ftable[i]);
void cphyaddr()
int laddr,paddr,disp,phyaddr,baddr;
getch();
// clrscr();
scanf("%d",&baddr);
scanf("%d",&laddr);
42
paddr = laddr / psize;
if(ptable[paddr].pbit == 1 )
void main()
clrscr();
info();
assign();
cphyaddr();
getch();
OUTPUT:
43
PAGE TABLE
0 5 1
1 6 1
2 7 1
3 2 1
FRAME TABLE
0 32555
1 32555
2 3
3 32555
4 32555
5 0
6 1
7 2
44
JECRC UNIVERSITY
JAIPUR
Step 3: get the base address and length for each segment.
Step 5: check whether the segment number is within the limit, if not display the error message.
Step 6: Check whether the byte reference is within the limit, if not display the error message.
/* PROGRAM */
#include <stdio.h>
#include <conio.h>
#include <math.h>
int sost;
void gstinfo();
void ptladdr();
struct segtab
int sno;
int baddr;
int limit;
45
int val[10];
}st[10];
void gstinfo()
int i,j;
scanf("%d",&sost);
for(i=1;i<=sost;i++)
st[i].sno = i;
scanf("%d",&st[i].baddr);
scanf("%d",&st[i].limit);
for(j=0;j<st[i].limit;j++)
scanf("%d",&st[i].val[j]);
void ptladdr()
int i,swd,d=0,n,s,disp,paddr;
clrscr();
46
printf("\n\n\t\t\t SEGMENT TABLE \n\n");
for(i=1;i<=sost;i++)
printf("\t\t%d \t\t%d\t\t%d\n\n",st[i].sno,st[i].baddr,st[i].limit);
scanf("%d",&swd);
n=swd;
while (n != 0)
n=n/10;
d++;
s = swd/pow(10,d-1);
disp = swd%(int)pow(10,d-1);
if(s<=sost)
else
47
else
void main()
char ch;
clrscr();
gstinfo();
do
ptladdr();
flushall();
scanf("%c",&ch);
getch();
OUTPUT:
48
Enter the 8 address Value: 15
SEGMENT TABLE
1 4 5
2 5 4
3 3 4
Do U want to Continue(Y/N)
SEGMENT TABLE
49
SEG.NO BASE ADDRESS LIMIT
1 4 5
2 5 4
3 3 4
Do U want to Continue(Y/N)
50
LAB VIVA Questions
51
29. What is semaphore?
30. What is a binary Semaphore?
31. What is Belady's Anomaly?
32. What is starvation in Operating System?
33. What is aging in Operating System?
34. What are overlays?
35. What is Virtual Memory?
36. What is Thrashing?
37. What is time- sharing system?
38. What is SMP?
39. What is asymmetric clustering?
40. What is RR scheduling algorithm?
41. What factors determine whether a detection-algorithm must be utilized in a deadlock avoidance
system?
42. What is Direct Access Method?
43. What is root partition?
44. What are the primary functions of VFS?
45. What is the purpose of an I/O status information?
46. What is multitasking?
47. Explain pros and cons of a command line interface?
48. What is caching?
49. What is an Assembler?
50. What is GUI?
51. What is preemptive multitasking?
52. What is plumbing/piping?
53. What is NOS?
54. What is the Translation Lookaside Buffer (TLB)?
55. What is cycle stealing?
56. What is meant by arm-stickiness?
57. What is page cannibalizing?
58. What are the four layers that Windows NT have in order to achieve independence?
59. Explain Booting the system and Bootstrap program in operating system.
52
60. What is a command interpreter?
61. What is a daemon?
62. What do you mean by a zombie process?
63. What do you know about a Pipe? When is it used?
64. Explain PCB.
65. What is context switching ?
66. What is EIDE?
67. Explain the execution cycle for a von Neumann architecture.
68. What is DLM?
69. What is RAID and what are its different levels?
70. Explain the different sections of a process.
71. What is IPC?
72. What do you know about mutex?
73. What is the reader-writer lock?
74. What is compaction?
53