Skip to content

Commit 05b8e50

Browse files
authored
UPLOADED BANKERS AND BINARY SEMAPHORES
1 parent cac9e91 commit 05b8e50

File tree

3 files changed

+463
-0
lines changed

3 files changed

+463
-0
lines changed

10_Binary_Semaphore.cxx

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include<iostream>
2+
#include<queue>
3+
using namespace std;
4+
5+
int ct=0;
6+
struct process
7+
{
8+
int id;
9+
int bt;
10+
}p1,p2,p3;
11+
12+
struct semaphore
13+
{
14+
int value;
15+
queue <process>q1;
16+
} s1;
17+
18+
void signal();
19+
void critical_section(process a);
20+
21+
void wait(process a[],int n)
22+
{
23+
for(int i=1;i<n;i++)
24+
(s1.q1).push(a[i]);
25+
26+
if(s1.value==1)
27+
{
28+
s1.value=0;
29+
critical_section(a[0]);
30+
31+
}
32+
33+
}
34+
35+
void showqueue(queue<process>q)
36+
{
37+
process p;
38+
while(!q.empty())
39+
{
40+
p=q.front();
41+
q.pop();
42+
cout<<" "<<p.id<<" ";
43+
}
44+
cout<<"\t"<<s1.value;
45+
}
46+
47+
void critical_section(process a)
48+
{
49+
cout<<"\n "<<a.id<<"\t"<<a.bt<<"\t";
50+
showqueue(s1.q1);
51+
ct=ct+a.bt;
52+
signal();
53+
}
54+
55+
void signal()
56+
{
57+
process p;
58+
if(!s1.q1.empty())
59+
{
60+
p=s1.q1.front();
61+
s1.q1.pop();
62+
critical_section(p);
63+
}
64+
else
65+
s1.value=1;
66+
}
67+
68+
int main()
69+
{
70+
int bt[20];int n;
71+
72+
73+
process a[3];
74+
75+
s1.value=1;
76+
77+
p1.id=1;
78+
p1.bt=2;
79+
80+
81+
p2.id=2;
82+
p2.bt=3;
83+
84+
85+
p3.id=3;
86+
p3.bt=4;
87+
88+
89+
a[0]=p1;
90+
a[1]=p2;
91+
a[2]=p3;
92+
93+
cout<<"\n INITIALLY SEMPAHORE VALUE IS "<<s1.value;
94+
95+
cout<<"\nPRO ID\tBUR TI\tWAIT\tSEMAPHORE\n";
96+
wait(a,3);
97+
98+
cout<<"\nFINALLY SEMAPHORE VALUE "<<s1.value;
99+
cout<<"\nCURRENT TIME NOW BECOMES "<<ct;
100+
101+
102+
}

9BANKERS_ALGORITHM.cxx

+153
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
#include<iostream>
2+
#include<queue>
3+
using namespace std;
4+
5+
6+
int main()
7+
{
8+
int p,r,i,j;
9+
int allocated[20][20];
10+
int max[20][20];
11+
int needed[20][20];
12+
int available[20];
13+
int total_allocated[20];
14+
int total_available[20];
15+
int flag[20];
16+
17+
cout<<"\nEnter number of process and number of resources ";
18+
cin>>p;
19+
cin>>r;
20+
21+
//TELLING COMPILER THAT THIS PROCESS IS NOT EXECUTED YET
22+
for(i=0;i<p;i++)
23+
flag[i]=0;
24+
25+
cout<<"\nEnter total available resources of each type ";
26+
for(i=0;i<r;i++)
27+
cin>>total_available[i];
28+
29+
cout<<"\nEnter data of resources each process allocated with ";
30+
for(i=0;i<p;i++)
31+
{
32+
for(j=0;j<r;j++)
33+
{
34+
cin>>allocated[i][j];
35+
}
36+
}
37+
38+
cout<<"\nEnter data of resources each process needs maximum ";
39+
for(i=0;i<p;i++)
40+
{
41+
for(j=0;j<r;j++)
42+
{
43+
cin>>max[i][j];
44+
}
45+
}
46+
47+
//CALCULATING NEED MATRIX
48+
for(i=0;i<p;i++)
49+
{
50+
for(j=0;j<r;j++)
51+
{
52+
needed[i][j]=max[i][j]-allocated[i][j];
53+
}
54+
}
55+
56+
cout<<"\n THE NEED MATRIX IS\n";
57+
for(i=0;i<p;i++)
58+
{
59+
for(j=0;j<r;j++)
60+
{
61+
cout<<needed[i][j]<<"\t";
62+
}
63+
cout<<"\n";
64+
}
65+
66+
int sum;
67+
int k=0;
68+
while(k<r)
69+
{
70+
sum=0;
71+
for(i=0;i<p;i++)
72+
{
73+
sum=sum+allocated[i][k];
74+
}
75+
total_allocated[k]=sum;
76+
k++;
77+
}
78+
79+
cout<<"\nTotal number of resources allocated is ";
80+
for(i=0;i<r;i++)
81+
cout<<total_allocated[i]<<'\t';
82+
83+
cout<<"\nTotal resources available is ";
84+
for(i=0;i<r;i++)
85+
{
86+
available[i]=total_available[i]-total_allocated[i];
87+
cout<<available[i]<<"\t";
88+
}
89+
90+
queue<int>sequence;
91+
92+
int count =0;
93+
while(count!=p)
94+
{
95+
for(i=0;i<p;i++)
96+
{
97+
98+
int k=0;
99+
if(flag[i]==0)
100+
{
101+
int nota=1;
102+
while(k<r)
103+
{
104+
if(needed[i][k]>available[k])
105+
{
106+
nota=0;
107+
break;
108+
}
109+
k++;
110+
}
111+
if(nota==1)
112+
{
113+
k=0;
114+
while(k<r)
115+
{
116+
available[k]=available[k]+allocated[i][k];
117+
k++;
118+
}
119+
flag[i]=1;
120+
sequence.push(i);
121+
break; //NOT REQUIRED JUST WRITTEN FOR START EXECUTION FROM UPWARDS ALWAYS
122+
}
123+
124+
}
125+
}
126+
count++;
127+
}
128+
129+
int safe=1;
130+
for(i=0;i<p;i++)
131+
{
132+
if(flag[i]==0)
133+
safe=0;
134+
135+
}
136+
if(safe==1)
137+
{
138+
cout<<"\nONE OF THE SAFE SEQUENCE IS ";
139+
while(!sequence.empty())
140+
{
141+
cout<<sequence.front()<<" ";
142+
sequence.pop();
143+
}
144+
145+
cout<<"\nAT LAST AVAILABLE MATRIX IS ";
146+
for(i=0;i<r;i++)
147+
cout<<available[i]<<"\t";
148+
}
149+
else
150+
{
151+
cout<<"\nSAFE SEQUENCE COULD NOT BE FOUND";
152+
}
153+
}

0 commit comments

Comments
 (0)