Operating Systems CSE2005: Input Code
Operating Systems CSE2005: Input Code
CSE2005
Name-Anjali Sachdeva
Reg No-16BEC0014
// Semaphore ids
int chopsticks; // ID for array of IPC semaphores
int not_at_table; // Start dinner when semaphore reaches 0
int main(){
int i, status;
pid_t phil[N_PHILOSOPHERS];
printf("The Dining-Philosophers Problem\n");
Input Code:
#include<stdio.h>
#include<stdlib.h>
int mutex=1,full=0,empty=3,x=0;
int main()
int n;
void producer();
void consumer();
int wait(int);
int signal(int);
printf("\n1.Producer\n2.Consumer\n3.Exit");
while(1)
scanf("%d",&n);
switch(n)
case 1: if((mutex==1)&&(empty!=0))
producer();
else
printf("Buffer is full!!");
break;
case 2: if((mutex==1)&&(full!=0))
consumer();
else
printf("Buffer is empty!!");
break;
case 3:
exit(0);
break;
return 0;
int wait(int s)
return (--s);
int signal(int s)
return(++s);
}
void producer()
mutex=wait(mutex);
full=signal(full);
empty=wait(empty);
x++;
mutex=signal(mutex);
void consumer()
mutex=wait(mutex);
full=wait(full);
empty=signal(empty);
x--;
mutex=signal(mutex);
}
Output:
3. READER WRITER PROBLEM
Input Code:
#include<stdio.h>
#include<stdlib.h>
int rw_mutex=1,mutex=1,x=0;
int main()
int n;
void writer();
void reader();
int wait(int);
int signal(int);
printf("\n1.Writer\n2.Reader\n3.Exit");
while(1)
scanf("%d",&n);
switch(n)
case 1: if((mutex==1)&&(rw_mutex==1))
writer();
else
printf("Can't write");
break;
case 2: if((mutex==1)&&(rw_mutex==0))
reader();
else
printf("Can't read");
break;
case 3:
exit(0);
break;
return 0;
int wait(int s)
return (--s);
int signal(int s)
return(++s);
}
void writer()
mutex=wait(rw_mutex);
x++;
if(x==1)
rw_mutex=wait(rw_mutex);
mutex=signal(mutex);
void reader()
mutex=wait(mutex);
x--;
if(x==0)
rw_mutex=signal(rw_mutex);
mutex=signal(mutex);
}
Output:
4. PRODUCER CONSUMER PROBLEM
Input Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
# define NUM_LOOPS 20
int sem_set_id;
nt child_pid;
int i;
int rc;
int val;
if (sem_set_id == -1) {
perror("main: semget");
exit(1);
switch (child_pid) {
case -1:
perror("fork");
exit(1);
case 0:
sem_op.sem_num = 0;
sem_op.sem_op = -1;
sem_op.sem_flg = 0;
semop(sem_set_id, &sem_op,1);
printf("consumer: '%d\n",i);
val=semctl(sem_set_id,0,GETVAL,0);
fflush(stdout);
sleep(3);
break;
default:
fflush(stdout);
sem_op.sem_num = 0;
sem_op.sem_op = 1;
sem_op.sem_flg = 0;
val=semctl(sem_set_id,0,GETVAL,0);
sleep(2);
break;
return 0;
}
Output:
5. Banker’s Algorithm
Input Code:
#include<stdio.h>
#define true 1
#define false 0
int m,n,i,j,count=0,process;
int max[10][10],alloc[10][10],need[10][10],c[10],avail[10],finish[10];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&t[i][j]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf("\t%d",t[i][j]);
printf("\n");
for(j=0;j<n;j++)
scanf("%d",&v[j]);
for(j=0;j<n;j++)
printf("\t%d",v[j]);
void init()
scanf("%d",&m);
scanf("%d",&n);
readtable(max);
readtable(alloc);
readvector(c);
for(i=0;i<n;i++)
finish[i]=false;
void findavail()
{
int sum;
for(j=0;j<n;j++)
sum=0;
for(i=0;i<m;i++)
sum=sum+alloc[i][j];
avail[j]=c[j]-sum;
void findneed()
for(i=0;i<m;i++)
for(j=0;j<n;j++)
need[i][j]=max[i][j]-alloc[i][j];
void selectprocess()
int flag;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(need[i][j]<=avail[j])
flag=1;
else
flag=0;
break;
if((flag==1)&&(finish[i]==false))
process=i;
count++;
break;
printtable(alloc);
if(flag==0)
exit(1);
}
void executeprocess(int p)
printtable(alloc);
void releaseresource()
for(j=0;j<n;j++)
avail[j]=avail[j]+alloc[process][j];
for(j=0;j<n;j++)
alloc[process][j]=0;
need[process][j]=0;
main()
init();
findavail();
findneed();
do
{
selectprocess();
finish[process]=true;
executeprocess(process);
releaseresource();
}while(count<m);
}
Output:
6. Pipes(altered code done in class)
Input Code:
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
main()
int pfd1[2],pfd2[2],p,x1,x2;
char msg3[100];
int x3;
char buf[20];
char msg1[100];
scanf("%s",msg1);
char msg2[100];
int i;
scanf("%s",msg2);
x1=strlen(msg1);
x2=strlen(msg2);
for(i=0;i<x1+x2;i++){
if(i<x1)
msg3[i]=msg1[i];
else
msg3[i]=msg2[i-x1];
pipe(pfd1);
p=fork();
close(pfd1[1]);
read(pfd1[0],buf,x3);
else //parent
close(pfd1[0]);
write(pfd1[1],msg3,x3);
printf("%s",buf);