OS Lab File Experiment1-5
OS Lab File Experiment1-5
LAB MANUAL
OPERATING SYSTEM LAB
Lab Objectives/Aims
Upon successful completion of this lab the student will be able to:
fragmentation
JECRC UNIVERSITY
JAIPUR
List of Experiments
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;
clrscr();
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;
getch();
OUTPUT:
1 0 2
2 2 7
3 7 11
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
tohighest burst time.
Step 5: Set the waiting time of the first process as ‘0’ and its turnaround time as its burst time.
/* PROGRAM */
#include<stdio.h>
void main()
int i,j,k,n,sum,wt[10],tt[10],twt,ttat;
int t[10],p[10];
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;
} }
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;
atat=(float)ttat/n;
getch();
}}
OUTPUT:
1 3 0 3
0 4 3 7
2 5 7 12
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>
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)
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;
} }}
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:
1 5 10 15 25
2 6 15 25 40
3 7 20 25 45
4 8 25 20 45
JECRC UNIVERSITY
JAIPUR
Aim: Write a C program to implement the various process scheduling mechanisms suchas
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;
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];
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;
getch();
OUTPUT:
-----------PRIORITY SCHEDULING--------------
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
2 1 4 0 4
1 2 6 4 10
0 3 2 10 12
3 7 5 12 17
JECRC UNIVERSITY
JAIPUR
Exp No: 5 Date: _ _/_ _/
/* 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.
Allocation I =Allocation+Request I;
Need i=Need i-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];
void main()
int i,j,k,l,r,n,tot[10],av[10],cn=0,cz=0,temp=0,c=0;
clrscr();
scanf("%d",&n);
scanf("%d",&r);
for(i=0;i<n;i++)
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;
}
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]);
}}
printf("\n\n\t AVAIL BEFORE\T AVAIL AFTER ");
for(l=0;l<n;l++)
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;
c++;
break;
else
cn=0;cz=0;
}}}
if(c==n)
else
getch();
OUTPUT:
//TEST CASE 1:
PROCESS 1
PROCESS 2
PROCESS 3
PROCESS 4
P2 010 623
P1 401 723
P3 620 934
P4 514 936
//TEST CASE:2
PROCESS 1
PROCESS 2
PROCESS 3
PROCESS 4
DEADLOCK OCCURED