Operating Systems — Some Important Lab Programs [Part 2]

Praseeda Saripalle
3 min readDec 14, 2022
  1. Round Robin Problem
#include<stdio.h>
#include<conio.h>
int main()
{
int p[30],p1[30],g[30],t,bt[30],wt[30],ta[30],sum=0,i,j,n,sw=0,sb=0,k=0;
float temp=0,max=0;
g[0]=0;
printf("enter the number of processes=");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nenter the burst time of process p%d=",i+1);
scanf("%d",&bt[i]);
p[i]=bt[i];
}
printf("Enter the size of time slice--");
scanf("%d",&t);
max=bt[0];
for(i=1;i<n;i++)
{
if(max<bt[i])
{
max=bt[i];
}
}
for(j=0;j<(max/t);j++)
{
for(i=0;i<n;i++)
{
if(bt[i]!=0)
{
if(bt[i]<=t)
{
ta[i]=temp+bt[i];
temp=temp+bt[i];
g[k+1]=g[k]+bt[i];

bt[i]=0;
}
else
{
bt[i]=bt[i]-t;
temp=temp+t;
g[k+1]=g[k]+t;
}
p1[k]=i+1;
k++;
}
}
}
for(i=0;i<n;i++)
{
wt[i]=ta[i]-p[i];
sum+=ta[i];
sw+=wt[i];
sb+=p[i];
}
printf("\nROUND ROBIN SCHEDULING ALGORITHM\n");
printf("--------------------------------");
printf("\n Process\tBurst time(ms)\t\t Waiting Time(ms)\t
TurnAround Time(ms)\n\n");
for(i=0;i<n;i++)
{
printf(" P%d\t\t\t%d\t\t\t%d\t\t\t%d\n",i+1,p[i],wt[i],ta[i]);
}
printf("\n\nGantt Chart:\n\n");
for(i=0;i<k;i++)
{
printf(" P%d",p1[i]);
}
printf("\n 0");
for(i=1;i<=k;i++)
{
printf(" %d",g[i]);
}
printf("\n\nAverage Waiting Time=%fms",(float)sw/n);
printf("\nAaverage TurnAround Time=%fms",(float)sum/n);
printf("\nThroughtput=%f\n\n",(float)n/sb);
getch();
}

2. SJF

#include<stdio.h>
#include<conio.h>
int main()
{
int p[30],bt[30],temp,max,wt[30],ta[30],sum=0,i,j,n,sw=0;
wt[0]=0;
printf("enter the number of processes=");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p[i]=i+1;
printf("\nenter the burst time of process p%d=",i+1);
scanf("%d",&bt[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(bt[i]>bt[j])
{
temp=bt[i];
bt[i]=bt[j];
bt[j]=temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
for(i=0;i<n;i++)
{
wt[i+1]=bt[i]+wt[i];
ta[i]=bt[i]+wt[i];
sw+=wt[i];
sum+=ta[i];
}
printf("\nSHORTEST JOB FIRST ALGORITHM\n");
printf("----------------------------");

printf("\n Process\tBurst time(ms)\t\t Waiting Time(ms)\t
TurnAround Time(ms)\n\n");
for(i=0;i<n;i++)
{
printf(" P%d\t\t\t%d\t\t\t%d\t\t\t%d\n",p[i],bt[i],wt[i],ta[i]);
}
printf("\n\nGantt Chart:\n\n");
for(i=0;i<n;i++)
{
printf(" P%d",p[i]);
}
printf("\n 0");
for(i=0;i<n;i++)
{
printf(" %d",ta[i]);
}
printf("\n\n Average Waiting Time=%fms",(float)sw/n);
printf("\n Average TurnAround Time=%fms",(float)sum/n);
printf("\n Throughtput=%f\n\n",(float)n/ta[n-1]);
getch();
}

3. FCFS

#include<stdio.h>
#include<conio.h>
int main()
{
int i,n,sum,wt,twt,ttat;
int t[10],tat[10];
char pn[10][10];
float awt,atat;
printf("Enter number of processes:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nEnter the process name:");
scanf("%s",&pn[i]);
printf("Enter the burst time of process-%s:",pn[i]);
scanf("%d",&t[i]);
}
tat[0]=t[0];
printf("\nFIRST COME FIRST SERVE SCHEDULING
ALGORITHM\n");
printf("----------------------");
printf("\nProcess\tBurstTime(ms)\tWaitingTime(ms)\tTurnAroundTime(
ms)\n\n");
printf("%s\t\t%d\t\t0\t\t\t%d\n",pn[0],t[0],tat[0]);
sum=0;
twt=0;
ttat=t[0];
for(i=1;i<n;i++)
{
sum+=t[i-1];
wt=sum;
tat[i]=sum+t[i];
twt=twt+wt;
ttat=ttat+tat[i];
printf("\n%s\t\t%d\t\t%d\t\t\t%d",pn[i],t[i],wt,tat[i]);
printf("\n");
}
printf("\n\nGantt Chart:\n\n");

for(i=0;i<n;i++)
{
printf(" %s",pn[i]);
}
printf("\n 0");
for(i=0;i<n;i++)
{
printf(" %d",tat[i]);
}
awt=(float)twt/n;
atat=(float)ttat/n;
printf("\n\nAverage Waiting Time:%4.2f ms",awt);
printf("\nAverage Turnaround Time:%4.2f ms",atat);
printf("\nThroughput=%f\n\n",(float)n/tat[n-1]);
getch();
}

4. Priority

#include<stdio.h>
#include<conio.h>
int main()
{
int p[30],pr[30],bt[30],temp,max,wt[30],ta[30],sum=0,i,j,n,sw=0;
wt[0]=0;
printf("enter the number of processes=");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p[i]=i+1;
printf("\nenter the burst time of process p%d=",i+1);
scanf("%d",&bt[i]);
printf(" priority of p%d=",i+1);
scanf("%d",&pr[i]);
}
for(i=0;i<n;i++)
{
max=i;
for(j=i+1;j<n;j++)
{
if(pr[j]<pr[max])
max=j;
}
temp=pr[max];
pr[max]=pr[i];
pr[i]=temp;
temp=bt[max];
bt[max]=bt[i];
bt[i]=temp;
temp=p[max];
p[max]=p[i];
p[i]=temp;
}
for(i=0;i<n;i++)
{
wt[i+1]=bt[i]+wt[i];
ta[i]=bt[i]+wt[i];
sw+=wt[i];
sum+=ta[i];
}
printf("\nPRIORITY SCHEDULING ALGORITHM\n");
printf("--------------------------");
printf("\n Process\tBurst time(ms)\t\tPriority\tWaiting
Time(ms)\tTurnAround Time(ms)\n\n");
for(i=0;i<n;i++)
{
printf(" P%d\t\t
%d\t\t\t%d\t\t\t%d\t\t\t%d\n",p[i],bt[i],pr[i],wt[i],ta[i]);
}
printf("\n\nGantt Chart:\n\n");
for(i=0;i<n;i++)
{
printf(" P%d",p[i]);
}
printf("\n 0");
for(i=0;i<n;i++)
{
printf(" %d",ta[i]);
}
printf("\n\n\n Average Waiting Time=%fms",(float)sw/n);
printf("\n Average TurnAround Time=%fms",(float)sum/n);
printf("\n Throughput=%f\n\n",(float)n/ta[n-1]);
getch();
}

5. MFT

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 10
main()
{
int
ma,bs,ps,tmp,sbn[MAX]={0},ebn[MAX]={0},count=0,i=0,k,ifrag[MAX]={0};
char ch;
printf("\nEnter total memory available (in MB)");
scanf("%d",&ma);
printf("\nEnter size of each block(in MB)");
scanf("%d",&bs);
while(ma)
{
printf("\nDo u have a program(y/n)");
fflush(stdin);
scanf("%c",&ch);
if((ch!='y') && (ch!='Y'))
{
printf("\nMemory available %d MB",ma);
break;
}
printf("\nEnter the size of program(inMB)");
scanf("%d",&ps);
if(ps>ma)
{
printf("\nMemory required:%d\nBUT\nMemory available:%d",ps,ma);
break;
}
count++;
if(!i)
{
sbn[i]=0;
ebn[i]=(ceil((float)ps/bs))-1;
}
else
{
sbn[i]=ebn[i-1]+1;

ebn[i]=sbn[i]+(ceil((float)ps/bs))-1;
}
tmp=((ceil((float)ps/bs)*bs));
ifrag[i]=tmp-ps;
i++;
ma-=tmp;
printf("\nMemory allocated %dMB\nMemory available
%dMB",tmp,ma);
printf("\nBlocks\tnum_of_blocks\tInternal_fragmentation(inMB)");
for(k=0;k<count;k++)
printf("\n\n%d-%d\t\t%d\t\t%d",sbn[k],ebn[k],ebn[k]-
sbn[k]+1,ifrag[k]);
}
getch();
}

6. MVT

#include<stdio.h>
#include<conio.h>
main()
{
static int jobs[20][2],flag[10];
int ch;
static int i,k,nj,nb,tms;
printf("Enter Total Memory Size<in MB>::");
scanf("%d",&tms);
printf("Enter no. of jobs::");
scanf("%d",&nj);
for(i=0;i<nj;i++)
{
printf("\nEnter job%d jobid::",i+1);
scanf("%d",&jobs[i][0]);
printf("Enter job%d jobsize<in MB>::",i+1);
scanf("%d",&jobs[i][1]);
}
for(i=0;i<nj;i++)
{
if(tms>=jobs[i][1])
{
tms=tms-jobs[i][1];
nb=nb+1;
flag[i]=1;
}
}
printf("\nJobs which are allocated:\n");
for(i=0;i<nj;i++)
if(flag[i] == 1)
printf("%d\t%d\n",jobs[i][0],jobs[i][1]);
printf("\nTotal memory space available which is not allocated
is:%dMB\n",tms);
printf("\nJobs which are not allocated:\n");
for(i=0;i<nj;i++)
if(flag[i] == 0)

printf("%d\t%d\n",jobs[i][0],jobs[i][1]);
if(nb!=nj)
{
while(1)
{
printf("\nEnter jobid to deallocate:");
scanf("%d",&k);
for(i=0;i<nj;i++)
{
if(jobs[i][0]==k)
{
if(flag[i]==1)
{
tms=tms+jobs[i][1];
printf("\nDeallocated job %d\t%d\n", jobs[i][0],jobs[i][1]);
printf("\nExternal fragmentation is:%dMB",tms);
flag[i]=2;
}
}
}
printf("\nAfter compaction,Available Memory is::%dMB",tms);
for(i=0;i<nj;i++)
{
if(tms>=jobs[i][1])
{
if(flag[i] == 0)
{
tms=tms-jobs[i][1];
flag[i]=1;
}
}
}
printf("\nJobs which are allocated:\n");
for(i=0;i<nj;i++)
if(flag[i] == 1)
printf("%d\t%d\n",jobs[i][0],jobs[i][1]);
printf("\nRemaining memory is: %dMB",tms);
printf("\nJobs which are not allocated are:\n");
for( i=0;i<nj;i++) /* dellocating mamory*/
if(flag[i] ==0)
printf("%d\t%d\n", jobs[i][0],jobs[i][1]);
III B.TECH-I SEM R16 Operating Systems and Linux Programming Lab AY:2020-21
K ROHINI, CSE Dept., GVPCEW Page 14
printf("\nDo you want to deallocate 1.Yes 2.No");
scanf("%d",&ch);
if(ch ==2)
break;
}
}
printf("\nAllocated jobs are:\n");
for(i=0;i<nj;i++)
if(flag[i]==1)
printf("%d\t%d\n",jobs[i][0],jobs[i][1]);
getch();
}

--

--