OS Lab Programs
OS Lab Programs
#include<stdio.h>
#include<sys/types.h>
#include<sys/sem.h>
#include<stdlib.h>
#include<sys/shm.h>
#include<errno.h>
#include<sys/ipc.h>
void sem_acq(int);
void sem_rel(int);
int main()
{ int mutex,empty,full,shmid, n;
pid_t ret;
int in=-1,out=-1;
char *buffer;
char c[2];
scanf(“%d―, &n);
if((mutex=semget(IPC_PRIVATE,1,0666|IPC_CREAT))==-1) {
exit(0);
if((semctl(mutex,0,SETVAL,1))==-1) {
if((empty=semget(IPC_PRIVATE,1,0666|IPC_CREAT))==-1) {
exit(0);
if((semctl(empty,0,SETVAL,n))==-1) {
exit(0);
if((full=semget(IPC_PRIVATE,1,0666|IPC_CREAT))==-1) {
exit(0);
if((semctl(full,0,SETVAL,0))==-1) {
exit(0);
if((shmid=shmget(IPC_PRIVATE,n*sizeof(char),0666|IPC_CREAT))==-1) {
exit(0);
ret=fork();
while(1) {
if(ret==0) //Producer
sem_acq(empty);
scanf(“%s―,c);
sem_acq(mutex);
in = (in+1)%n;
buffer[in]=c[0];
sem_rel(mutex);
sem_rel(full);
sleep(5);
sem_acq(full);
sem_acq(mutex);
out = (out+1)%n;
c[0]=buffer[out];
sem_rel(mutex);
sem_rel(empty);
sb.sem_num=0;
sb.sem_op=1;
sb.sem_flg=0;
if((semop(semid,&sb,1))==-1) {
exit(0);
sb.sem_num=0;
sb.sem_op=1;
sb.sem_flg=0;
if((semop(semid,&sb,1))==-1) {
exit(0);
// Banker’s algorithm
#include<iostream.h>
#include<conio.h>
#define MAX 20
class bankers
private:
int al[MAX][MAX],m[MAX][MAX],n[MAX][MAX],avail[MAX];
int nop,nor,k,result[MAX],pnum,work[MAX],finish[MAX];
public:
bankers();
void input();
void method();
int search(int);
void display();
};
bankers::bankers()
k=0;
for(int i=0;i<MAX;i++)
for(int j=0;j<MAX;j++)
al[i][j]=0;
m[i][j]=0;
n[i][j]=0;
}
avail[i]=0;
result[i]=0;
finish[i]=0;
void bankers::input()
int i,j;
cin>>nop;
cin>>nor;
for(i=0;i<nop;i++)
cout<<“\nProcess “<<i;
for(j=0;j<nor;j++)
cout<<“\nResource “<<j<<“:―;
cin>>al[i][j];
cout<<“Enter the maximum resources that are needed for each process: “<<endl;
for(i=0;i<nop;i++)
{
cout<<“\nProcess “<<i;
for(j=0;j<nor;j++)
cout<<“\nResouce “<<j<<“:―;
cin>>m[i][j];
n[i][j]=m[i][j]-al[i][j];
for(j=0;j<nor;j++)
cout<<“Resource “<<j<<“:―;
cin>>avail[j];
work[j]=-1;
for(i=0;i<nop;i++)
finish[i]=0;
void bankers::method()
int i=0,j,flag;
while(1)
if(finish[i]==0)
{
pnum =search(i);
if(pnum!=-1)
result[k++]=i;
finish[i]=1;
for(j=0;j<nor;j++)
avail[j]=avail[j]+al[i][j];
i++;
if(i==nop)
flag=0;
for(j=0;j<nor;j++)
if(avail[j]!=work[j])
flag=1;
for(j=0;j<nor;j++)
work[j]=avail[j];
if(flag==0)
break;
else
i=0;
}
int bankers::search(int i)
int j;
for(j=0;j<nor;j++)
if(n[i][j]>avail[j])
return -1;
return 0;
void bankers::display()
int i,j;
cout<<endl<<“OUTPUT:―;
cout<<endl<<“========―;
for(i=0;i<nop;i++)
cout<<“\nP―<<i+1<<“\t “;
for(j=0;j<nor;j++)
cout<<al[i][j]<<― “;
cout<<“\t “;
for (j=0;j<nor;j++)
cout<<m[i][j]<<― “;
cout<<“\t “;
for(j=0;j<nor;j++ )
cout<<n[i][j]<<― “;
for(i=0;i<k;i++)
cout<<“P―<<temp<<― “;
int flg=0;
for (i=0;i<nop;i++)
if(finish[i]==0)
flg=1;
cout<<“P―<<i<<― “;
}
cout<<endl<<“RESULT:―;
cout<<endl<<“=======―;
if(flg==1)
else
int main()
clrscr();
bankers B;
B.input ( );
B.method ( );
B.display ( );
getch ( );
/* File Locking */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
int fd;
fl.l_pid = getpid();
if (argc > 1)
fl.l_type = F_RDLCK;
perror(“open―);
exit(1);
getchar();
perror(“fcntl―);
exit(1);
printf(“got lock\n―);
perror(“fcntl―);
exit(1);
printf(“Unlocked.\n―);
close(fd);
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
class lrupage
private:
int tot,nof,fault;
public:
lrupage(){fault=0;}
void getdata();
void push();
void dis();
};
void lrupage::getdata()
int pno,i=0;
cin>>nof;
do
cin>>pno;
cstr[i++]=pno;
}while(pno!=-1);
tot=i-1;
void lrupage::push()
int x,i,flag=0,nc=0,maximum,maxpos=-1,mark=0;
for(i=0;i<nof;i++)
frame[i]=-1;
count[i]=mark–;
for(i=0;i<tot;i++)
flag=0;
x=cstr[i];
nc++;
count[k]++;
if(frame[j]==x)
flag=1;
count[j]=1;
break;
if(flag==0)
maximum = 0;
for(int k=0;k<nof;k++)
{
maximum=count[k];
maxpos = k;
if(nc>nof)
frame[maxpos]=x;
count[maxpos]=1;
else
frame[nc-1]=x;
fault++;
dis();
getch();
void lrupage::dis()
int i=0;
cout<<“\n—–\n―;
while(i<nof)
{
cout<<“| “<<frame[i]<<― “;
i++;
cout<<“|―;
void main()
lrupage lru;
clrscr();
lru.getdata();
lru.push();
getch();
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
class fifo
private:
int frame[10], mrstr[max];
int f,r,tot,nof,fault;
public:
fifo()
f=r=-1;
fault=0;
void getdata();
void push();
void pop();
void dis();
};
void fifo::getdata()
int pno,i=0;
cin>>nof;
do
cin>>pno;
mrstr[i++]=pno;
}while(pno!=-1);
tot=i-1;
void fifo::push()
int x,i,flag=0;//,fault=0;
for(i=0;i<nof;i++)
frame[i]=-1;
for(i=0;i<tot;i++)
x=mrstr[i];
if(frame[j]==x)
flag=1;
break;
else
flag=0;
if(flag==0)
if(r==nof-1)
{
++f;
r=++r%nof;
frame[r]=x;
else
frame[++r]=x;
fault++;
dis();
getch();
void fifo::dis()
int i=0;
cout<<”\n----------------------------------------\n”;
while(i<nof)
cout<<”| “<<frame[i]<<” “;
i++;
cout<<”| “<<fault;
void main()
{
fifo fp;
clrscr();
fp.getdata();
fp.push();
getch();
#include<iostream.h>
#include<conio.h>
void main()
int npage,pgsz,nframe,phmsz,lgmsz,i,j,k;
int frmpos[10],ptable[10];
char lgmdata[20],phmdata[20];
clrscr();
cin>>phmsz;
cin>>npage;
lgmsz=npage*pgsz;
for(i=0;i<phmsz;i++)
cin>>lgmdata[i];
for(i=0;i<lgmsz;lgmdata[i++]);
nframe=phmsz/pgsz;
for(i=0;i<npage;++i)
cin>>ptable[i];
for(i=0;i<npage;++i)
frmpos[i]=ptable[i]*pgsz;
for(i=0;i<phmsz;phmdata[i++]=’ ‘);
for(k=i=0;i<npage;++i)
for(j=frmpos[i];j<frmpos[i]+pgsz;++j,++k)
phmdata[j]=lgmdata[k];
for(i=0;i<phmsz;++i)
cout<<― “<<i<<“-“<<phmdata[i]<<endl;
getch();
}
Implementation of Best Fit & First Fit Memory Management Algorithms
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
int cho=1,ch;
clrscr();
cin>>n;
for(i=1;i<=n;i++)
cin>>size[i];
while(cho==1)
cin>>m;
cout<<“\nMenu―;
cin>>ch;
x=0;
switch(ch)
case 1:
for(i=1;i<=n;i++)
if(size[i]>=m)
size[i]-=m;
x=i;
break;
break;
case 2:
if(m<=size[1])
temp=size[1]-m;
pos=1;
}
else
temp=size[1];
for(i=2;i<=n;i++)
if(m<=size[i])
t1=size[i]-m;
if(temp>=t1)
temp=t1;
pos=i;
else temp=size[i];
if(pos==0)
else
size[pos]=size[pos]-m;
break;
case 4:
return;
}
for(i=1;i<=n;i++)
cout<<“\nHole “<<i<<“\t\t―<<size[i];
cout<<“\n\nPress 1 to continue:―;
cin>>cho;
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#define max 5
class que
int v[max],c[max];
int f,r,g,cc,pc,n;
public:
que()
f=r=-1;
n=0;
g=0;
pc=0;
cc=0;
void push()
int x,ch2;
while(1)
cin>>x;
if(f==-1)
f=0;
cc++;
v[++r]=x;
n++;
else if((f==0)&&(r==max-1)||f-r==1)
else if((r==max-1)&&(f!=0))
r=-1;v[++r]=x;
n++;
cc++;
}
else
cc++;
v[++r]=x;
n++;
cin>>ch2;
if(ch2==2)
break;
void pop()
int i=0;
int ch1=1;
while(1)
if(n==0)
break;
if((f==max)&&(r!=max-1))
f=-1;
else
pc++;
c[g++]=v[f++];
n–;
cin>>ch1;
if(ch1==2)
break;
void dis()
int i=0;
if(n==0)
else
if(f<=r)
for(i=f;i<=r;i++)
cout<<v[i]<<“\t―;
}
else
for(i=0;i<=r;i++)
cout<<v[i]<<“\t―;
for(i=f;i<max;i++)
cout<<v[i]<<“\t―;
};
void main()
que d;
int ch1;
char o,ch;
clrscr();
do
cin>>ch1;
switch(ch1)
{
case 1:
d.push();
break;
case 2:
d.pop();
break;
case 3:
d.dis();
break;
default:
cout<<“Exit.―;
exit(0);
}while(ch1!=4);
getch();
//Dekker’s Algorithm
# include <stdio.h>
# include<pthread.h>
# include<cursors.h>
void longdelay()
{
long int t1,t2;
for(t1=0;t1<64000;t1++);
for(t2=0;t2<64000;t2++);
void shortdelay()
int t3,t4;
for(t3=0;t3<32000;t3++)
for(t4=0;t4<32000;t4++)
void test(int i)
int j,k,m,p,q,r,c;
j=1-i;
for(k=0;k<3;k++)
flag[i]=1;
while(flag[j])
if (turn==j)
flag[i]=0;
printf(“Iam waiting:%d―,i);
while(turn==j);
flag[i]=1;
}
longdelay();
c=bal;
/*critical section*/
printf(“flag[%d]=%d, flag[%d]=%d―,i,flag[i],j,flag[j]);
printf(“turn=%d\n―,turn);
bal=c+1000;
turn=j;
flag[i]=0;
shortdelay();
int main()
pthread_t t1,t2;
pthread_creat(&t,NULL,(void*)&test,(void*)0);
pthread_creat(&t2,NULL,(void*)&test,(void*)1);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
sleep(s);
printf(“Parent terminated:%d―,bal);
return(0);
#include<stdio.h>
#include<conio.h>
struct process
int all[6],max[6],need[6],finished,request[6];
}p[10];
int avail[6],sseq[10],ss=0,check1=0,check2=0,n,pid,work[6];
int nor,nori;
void main()
int safeseq(void);
int ch,i=0,j=0,k,pid,ch1;
int violationcheck=0,waitcheck=0;
do
clrscr();
printf(“\n\n\t 1. Input―);
printf(“\n\n\t 2. New Request―);
printf(“\n\n\t 4. print―);
printf(“\n\n\t 5. Exit―);
scanf(“%d―,&ch);
switch(ch)
case 1:
scanf(“%d―,&n);
scanf(“%d―,&nor);
for(j=0;j<n;j++)
for(k=0;k<nor;k++)
if(j==0)
scanf(“%d―,&avail[k]);
p[j].max[k]=0;
p[j].all[k]=0;
p[j].need[k]=0;
p[j].finished=0;
p[j].request[k]=0;
for(i=0;i<n;i++)
printf(“\n\n\t Enter Max and Allocated resources for P%d : “,i); for(j=0;j<nor;j++)
scanf(“%d―,&p[i].max[j]);
scanf(“%d―,&p[i].all[j]);
if(p[i].all[j]>p[i].max[j])
j–;
else
p[i].need[j]=p[i].max[j]-p[i].all[j];
avail[j]=avail[j]-p[i].all[j];
break;
case 2:
violationcheck=0;
waitcheck=0;
scanf(“%d―,&pid);
for(j=0;j<nor;j++)
if(p[pid].request[j]>p[pid].need[j])
violationcheck=1;
if(p[pid].request[j]>avail[j])
waitcheck=1;
if (violationcheck==1)
else if(waitcheck==1)
else
for(j=0;j<nor;j++)
avail[j]=avail[j]-p[pid].request[j];
p[pid].all[j]=p[pid].all[j]+p[pid].request[j];
p[pid].need[j]=p[pid].need[j]-p[pid].request[j];
ch1=safeseq();
if(ch1==0)
for(j=0;j<nor;j++)
avail[j]=avail[j]+p[pid].request[j];
p[pid].all[j]=p[pid].all[j]-p[pid].request[j];
p[pid].need[j]=p[pid].need[j]+p[pid].request[j];
else if(ch1==1)
break;
case 3:
if(safeseq()==1)
else
break;
case 4:
for(i=0;i<n;i++)
{
for(j=0;j<nor;j++)
printf(― %d “,p[i].max[j]);
printf(“\t―);
for(j=0;j<nor;j++)
printf(― %d “,p[i].all[j]);
printf(“\t―);
for(j=0;j<nor;j++)
printf(― %d “,p[i].need[j]);
for(i=0;i<nor;i++)
printf(― %d “,avail[i]);
break;
case 5:
break;
getch();
}while(ch!=5);
int safeseq()
int i,j,k;
ss=0;
for(j=0;j<nor;j++)
work[j]=avail[j];
for(j=0;j<n;j++)
p[j].finished=0;
for(int tk=0;tk<nor;tk++)
for(j=0;j<n;j++)
if(p[j].finished==0)
check1=0;
for(k=0;k<nor;k++)
if(p[j].need[k]<=work[k])
check1++;
if(check1==nor)
for(k=0;k<nor;k++)
work[k]=work[k]+p[j].all[k];
p[j].finished=1;
sseq[ss]=j;
ss++;
}
}
check2=0;
for(i=0;i<n;i++)
if(p[i].finished==1)
check2++;
printf(“\n\n\t―);
if(check2>=n)
for(int tj=0;tj<n;tj++)
printf(“P%d, “,sseq[tj]);
return 1;
else
return 0;
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
class cpuschedule
int n,bu[20];
float twt,awt,wt[20],tat[20];
public:
void Getdata();
void fcfs();
void sjf();
void roundrobin();
};
void cpuschedule::Getdata()
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>bu[i];
void cpuschedule::fcfs()
{
int i,b[10];
float sum=0.0;
twt=0.0;
for(i=1;i<=n;i++)
b[i]=bu[i];
cout<<b[i];
wt[1]=0;
for(i=2;i<=n;i++)
wt[i]=b[i-1]+wt[i-1];
for(i=1;i<=n;i++)
twt=twt+wt[i];
tat[i]=b[i]+wt[i];
sum+=tat[i];
awt=twt/n;
sum=sum/n;
void cpuschedule::sjf()
int i,j,temp,b[10];
float sum=0.0;
twt=0.0;
for(i=1;i<=n;i++)
b[i]=bu[i];
cout<<b[i];
for(i=n;i>=1;i–)
for(j=2;j<=n;j++)
if(b[j-1]>b[j])
temp=b[j-1];
b[j-1]=b[j];
b[j]=temp;
}
wt[1]=0;
for(i=2;i<=n;i++)
wt[i]=b[i-1]+wt[i-1];
for(i=1;i<=n;i++)
twt=twt+wt[i];
tat[i]=b[i]+wt[i];
sum+=tat[i];
awt=twt/n;
sum=sum/n;
void cpuschedule::roundrobin()
int i,j,tq,k,b[10],Rrobin[10][10],count[10];
int max=0;
int m;
float sum=0.0;
twt=0.0;
for(i=1;i<=n;i++)
b[i]=bu[i];
cout<<b[i];
if(max<b[i])
max=b[i];
wt[i]=0;
cin>>tq;
m=max/tq+1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
Rrobin[i][j]=0;
i=1;
while(i<=n)
{
j=1;
while(b[i]>0)
if(b[i]>=tq)
b[i]=b[i]-tq;
Rrobin[i][j]=tq;
j++;
else
Rrobin[i][j]=b[i];
b[i]=0;
j++;
count[i]=j-1;
i++;
cout<<“Display―;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cout<<“\nRr[“<<i<<“,―<<j<<“]=―<<Rrobin[i][j];
cout<<― “;
cout<<“\ncount=―<<count[i];
for(j=1;j<=n;j++)
for(i=1;i<=count[j];i++)
if(i==count[j])
for(k=1;k<j;k++)
if(k!=j)
wt[j]+=Rrobin[k][i];
else
for(k=1;k<=n;k++)
if(k!=j)
wt[j]+=Rrobin[k][i];
for(i=1;i<=n;i++)
cout<<“\nWaiting Time for process P―<<i<<“=―<<wt[i];
for(i=1;i<=n;i++)
twt=twt+wt[i];
tat[i]=b[i]+wt[i];
sum+=tat[i];
awt=twt/n;
sum=sum/n;
void main()
int ch=0,cho;
cpuschedule c;
clrscr();
do
switch(ch)
case 0:
cout<<“\n0.MENU―;
cout<<“\n1.Getting BurstTime―;
cout<<“\n2.FirstComeFirstServed―;
cout<<“\n3.ShortestJobFirst―;
cout<<“\n4.RoundRobin―;
cout<<“\n5.EXIT―;
break;
case 1:
c.Getdata();
break;
case 2:
c.fcfs();
break;
case 3:
c.sjf();
break;
case 4:
c.roundrobin();
break;
case 5:
break;
getch();
}while(ch<5);
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
class cpuschedule
int n,Bu[20];
float Twt,Awt,Wt[20],Tat[20];
public:
void Getdata();
void Fcfs();
void Sjf();
void RoundRobin();
};
void cpuschedule::Getdata()
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>Bu[i];
void cpuschedule::Fcfs()
int i,B[10];
float sum=0.0;
Twt=0.0;
for(i=1;i<=n;i++)
B[i]=Bu[i];
cout<<B[i];
Wt[1]=0;
for(i=2;i<=n;i++)
Wt[i]=B[i-1]+Wt[i-1];
for(i=1;i<=n;i++)
{
Twt=Twt+Wt[i];
Tat[i]=B[i]+Wt[i];
sum+=Tat[i];
Awt=Twt/n;
sum=sum/n;
void cpuschedule::Sjf()
int i,j,temp,B[10];
float sum=0.0;
Twt=0.0;
for(i=1;i<=n;i++)
B[i]=Bu[i];
cout<<B[i];
for(i=n;i>=1;i–)
for(j=2;j<=n;j++)
{
if(B[j-1]>B[j])
temp=B[j-1];
B[j-1]=B[j];
B[j]=temp;
Wt[1]=0;
for(i=2;i<=n;i++)
Wt[i]=B[i-1]+Wt[i-1];
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Tat[i]=B[i]+Wt[i];
sum+=Tat[i];
Awt=Twt/n;
sum=sum/n;
void cpuschedule::RoundRobin()
int i,j,tq,k,B[10],Rrobin[10][10],count[10];
int max=0;
int m;
float sum=0.0;
Twt=0.0;
for(i=1;i<=n;i++)
B[i]=Bu[i];
cout<<B[i];
if(max<B[i])
max=B[i];
Wt[i]=0;
cin>>tq;
m=max/tq+1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
Rrobin[i][j]=0;
i=1;
while(i<=n)
j=1;
while(B[i]>0)
if(B[i]>=tq)
B[i]=B[i]-tq;
Rrobin[i][j]=tq;
j++;
else
Rrobin[i][j]=B[i];
B[i]=0;
j++;
}
count[i]=j-1;
i++;
cout<<“Display―;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cout<<“\nRr[“<<i<<“,―<<j<<“]=―<<Rrobin[i][j];
cout<<― “;
cout<<“\ncount=―<<count[i];
for(j=1;j<=n;j++)
for(i=1;i<=count[j];i++)
if(i==count[j])
for(k=1;k<j;k++)
if(k!=j)
Wt[j]+=Rrobin[k][i];
}
else
for(k=1;k<=n;k++)
if(k!=j)
Wt[j]+=Rrobin[k][i];
for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
Twt=Twt+Wt[i];
Tat[i]=B[i]+Wt[i];
sum+=Tat[i];
Awt=Twt/n;
sum=sum/n;
void main()
{
int ch=0,cho;
cpuschedule c;
clrscr();
do
switch(ch)
case 0:
cout<<“\n0.MENU―;
cout<<“\n1.Getting BurstTime―;
cout<<“\n2.FirstComeFirstServed―;
cout<<“\n3.ShortestJobFirst―;
cout<<“\n4.RoundRobin―;
cout<<“\n5.EXIT―;
break;
case 1:
c.Getdata();
break;
case 2:
c.Fcfs();
break;
case 3:
c.Sjf();
break;
case 4:
c.RoundRobin();
break;
case 5:
break;
cin>>ch;
getch();
}while(ch<5);
0.MENU
1.Getting BurstTime
2.FirstComeFirstServed
3.ShortestJobFirst
4.RoundRobin
5.EXIT