#include<stdio.h>
struct
{
int at,bt,st,et,tat,wt,pname;
}fcfs[20],temp;
void main()
{
int i,n,elt=0;
float avgtat=0,avgwt=0;
printf("Enter the no.of processes: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter the processname: ");
scanf("%d",fcfs[i].pname);
printf("Enter the arrival time: ");
scanf("%d",fcfs[i].at);
printf("Enter the burst time: ");
scanf("%d",fcfs[i].bt);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(fcfs[i].at>fcfs[j].at)
{
temp=fcfs[i];
fcfs[i]=fcfs[j];
fcfs[j]=temp;
}
}
}
fcfs[0].st=fcfs[0].at;
fcfs[0].et=fcfs[0].st+fcfs[0].bt;
fcfs[0].wt=0;
fcfs[0].tat=fcfs[0].et-fcfs[0].at;
elt=fcfs[0].et;
for(i=0;i<n;i++)
{
if(fcfs[i].at<elt)
{
fcfs[i].st=elt;
}
else
{
fcfs[i].st=fcfs[i].at;
fcfs[i].et=fcfs[i].st+fcfs[i].bt;
fcfs[i].wt=fcfs[i].st-fcfs[i].at;
fcfs[i].tat=fcfs[i].et-fcfs[i].at;
elt=fcfs[i].et;
}
}
for(i=0;i<n;i++)
{
avgtat=avtat+fcfs[i].tat;
avgwt=avwt+fcfs[i].wt;
}
printf("\nPName:\tAT:\tBT:\tST:\tCT:\tTAT:\tWT:\n");
for(i=0;i<n;i++)
{
printf("\n%d\t%d\t%d\t%d\t%d\t%d\t%d\n",fcfs[i].pname,fcfs[i].at,fcfs[i].bt,fcfs[i].st,fcfs[i].et,fcfs[i].tat,fcfs[i].wt);
}
printf("Avg tat: %d",avgtat);
printf("Avg wt: %d",avgwt);
}
//SJF
#include <stdio.h>
#include <stdlib.h>
struct process
{
int Pid;
int AT,BT,ST,ET,WT,TAT;
int complete;
}sjf[20],temp1,temp2;
void main()
{
int n,i,j,elt=0;
float avgtat=0,avgwt=0,tavgtat=0,tavgwt=0;
printf("Enter the no.of processes: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter the Pid: ");
scanf("%d",&sjf[i].Pid);
printf("Enter the Arrival time: ");
scanf("%d",&sjf[i].AT);
printf("Enter the Burst time: ");
scanf("%d",&sjf[i].BT);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;i<n;i++)
{
if(sjf[i].AT>sjf[j].AT)
{
temp1=sjf[i];
sjf[i]=sjf[j];
sjf[j]=temp1;
}
}
}
for(i=0;i<n;i++)
{
sjf[i].complete=0;
}
sjf[0].ST=sjf[0].AT;
sjf[0].ET=sjf[0].ST+sjf[0].BT;
sjf[0].WT=0;
sjf[0].TAT=sjf[i].ET-sjf[0].AT;
elt=sjf[0].ET;
for(i=1;i<n;i++)
{
for(j=i+1;i<n;i++)
{
if(sjf[i].BT>sjf[j].BT)
{
temp2=sjf[i];
sjf[i]=sjf[j];
sjf[j]=temp2;
}
}
}
for(i=1;i<n;i++)
{
if(sjf[i].AT<=elt)
{
sjf[i].ST=elt;
sjf[i].ET=sjf[i].ST+sjf[i].BT;
sjf[i].WT=sjf[i].ST-sjf[i].AT;
sjf[i].TAT=sjf[i].ET-sjf[i].AT;
sjf[i].complete=1;
elt=sjf[i].ET;
}
else
{
sjf[i].ST=sjf[i].AT;
sjf[i].ET=sjf[i].ST+sjf[i].BT;
sjf[i].WT=sjf[i].ST-sjf[i].AT;
sjf[i].TAT=sjf[i].ET-sjf[i].AT;
sjf[i].complete=1;
elt=sjf[i].ET;
}
}
for(i=0;i<n;i++)
{
avgwt=avgwt+sjf[i].WT;
avgtat=avgtat+sjf[i].TAT;
}
tavgtat=avgtat/n;
tavgwt=avgwt/n;
printf("\nPid:\tAT:\tBT:\tST:\tCT:\tWT\tTAT\n");
for(i=0;i<n;i++)
{
printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",sjf[i].Pid,sjf[i].AT,sjf[i].BT,sjf[i].ST,sjf[i].ET,sjf[i].WT,sjf[i].TAT);
}
printf("Average WT: %f\n",tavgwt);
printf("Average TAT: %f",tavgtat);
}
//Prio
#include<stdio.h>
struct process
{
int Pid;
int AT,BT,ST,ET,WT,TAT;
int prio;
int complete;
}psc[20],temp1,temp2;
void main()
{
int i,j,n,elt=0;
float avgwt,avgtat,tavgwt=0,tavgtat=0;
printf("Enter the no.of processes: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Enter the process name: ");
scanf("%d",&psc[i].Pid);
printf("Enter the Arrival time: ");
scanf("%d",&psc[i].AT);
printf("Enter the Burst time: ");
scanf("%d",&psc[i].BT);
printf("Enter the Priority: ");
scanf("%d",&psc[i].prio);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(psc[i].AT>psc[j].AT)
{
temp1=psc[i];
psc[i]=psc[j];
psc[j]=temp1;
}
}
}
for(i=0;i<n;i++)
{
psc[i].complete=0;
}
psc[0].ST=psc[0].AT;
psc[0].ET=psc[0].ST+psc[0].BT;
psc[0].WT=0;
psc[0].TAT=psc[0].ET-psc[0].AT;
elt=psc[0].ET;
for(i=1;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(psc[i].prio>psc[j].prio)
{
temp2=psc[i];
psc[i]=psc[j];
psc[j]=temp2;
}
}
}
for(i=1;i<n;i++)
{
if(psc[i].AT<=elt)
{
psc[i].ST=elt;
psc[i].ET=psc[i].ST+psc[i].BT;
psc[i].WT=psc[i].ST-psc[i].AT;
psc[i].TAT=psc[i].ET-psc[i].AT;
psc[i].complete=1;
elt=psc[i].ET;
}
else
{
psc[i].ST=psc[i].AT;
psc[i].ET=psc[i].ST+psc[i].BT;
psc[i].WT=psc[i].ST-psc[i].AT;
psc[i].TAT=psc[i].ET-psc[i].AT;
psc[i].complete=1;
elt=psc[i].ET;
}
}
for(i=0;i<n;i++)
{
avgwt=avgwt+psc[i].WT;
avgtat=avgtat+psc[i].TAT;
}
tavgwt=avgwt/n;
tavgtat=avgtat/n;
printf("\nPid:\tPrio\tAT:\tBT:\tST:\tCT:\tWT:\tTAT:\n");
for(i=0;i<n;i++)
{
printf("%d\t%d\t%d\t%d\t%d\t%d\t%d%d\n",psc[i].Pid,psc[i].prio,psc[i].AT,psc[i].BT,psc[i].ST,psc[i].ET,psc[i].WT,psc[i].TAT);
}
printf("Average WT: %f\n",tavgwt);
printf("Average TAT: %f",tavgtat);
}
//RR
#include<stdio.h>
struct process
{
int Pid;
int AT,BT,ST,ET,WT,TAT;
}p[20],temp,r[20];
void main()
{
int i,j,n,burst[20],QT,elt=0;
float avgwt=0,avgtat=0;
printf("Enter the no.of processes: ");
scanf("%d",&n);
printf("Enter the time quantum: ");
scanf("%d",&QT);
for(i=0;i<n;i++)
{
printf("Enter the Pid: ");
scanf("%d",&p[i].Pid);
printf("Enter the Arrival time: ");
scanf("%d",&p[i].AT);
printf("Enter the Burst time: ");
scanf("%d",&p[i].BT);
}
for(i=0;i<n;i++)
{
r[i].BT=p[i].BT;
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
p[0].ST=p[0].AT;
for(i=0;i<n;i++)
{
if(p[i].BT>QT)
{
p[i+1].ST=p[i].ST+QT;
}
else
{
p[i+1].ST=p[i].ST+p[i].BT;
}
}
elt=p[0].ST;
for(i=0;i<n;i++)
{
burst[i]=p[i].BT;
}
for(i=0;i<n;i++)
{
if(p[i].BT==0)
{
continue;
}
if(p[i].BT>=QT)
{
p[i].BT=p[i].BT-QT;
elt=elt+QT;
p[i].ET=elt;
continue;
}
else if(p[i].BT>=0&&p[i].BT<QT)
{
elt=elt+p[i].BT;
p[i].BT=0;
p[i].ET=elt;
}
}
for(i=0;i<n;i++)
{
p[i].TAT=p[i].ET-p[i].AT;
p[i].WT=p[i].TAT-burst[i];
avgtat=avgtat+p[i].TAT;
avgwt=avgwt+p[i].WT;
}
avgtat=avgtat/n;
avgwt=avgwt/n;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(p[j].Pid>p[j+1].Pid)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
printf("\nPid:\tAT:\tBT:\tST:\tCT:\tWT:\tTAT:\n");
for(i=0;i<n;i++)
{
printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p[i].Pid,p[i].AT,p[i].BT,p[i].ST,p[i].ET,p[i].WT,p[i].TAT);
}
printf("Average WT= %f",avgwt);
printf("Average TAT= %f",avgtat);
}
//Pipe
#include<stdio.h>
#include<unistd.h>
#include<string.h>
void main()
{
int id,fd1[2],fd2[2],c,cnt;
char s[100],d[100];
pipe(fd1);
pipe(fd2);
id=fork();
if(id==0)
{
printf("\nWithin child\n");
close(fd1[0]);
close(fd2[1]);
printf("\nString: ");
gets(s);
write(fd1[1],s,100);
sleep(2);
read(fd2[0],&cnt,sizeof(int));
printf("\nWithin child\n");
printf("Length= %d",cnt);
}
else
{
printf("\nWithin parent\n");
close(fd1[1]);
close(fd2[0]);
read(fd1[0],d,100);
printf("Message is %s",d);
c=strlen(d);
write(fd2[1],&c,sizeof(int));
wait(id);
}
}
//MsgSender
#include<stdio.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
struct st
{
long mtype;
char text[25];
}new,rvd;
void main()
{
int id,ida;
new.mtype=1;
printf("Enter the msg: ");
gets(new.text);
id=msgget(1230, IPC CREAT | 0666);
int length=strlen(new.text)+1;
msgsnd(id,&new,length,0);
printf("Msg %s sent",new.text);
sleep(20);
ida=msgget(1240, IPC CREAT | 0666);
msgrcv(ida,&rvd,sizeof(rvd),1,0);
printf("Msg %s recieved",rvd.text);
if(strcmp(new.text,rvd.text)==0)
printf("Palindrome");
else
printf("Not palindrome");
}
//MsgRcvr
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
struct st
{
long mtype;
char text[20];
}new1,new2;
void main()
{
int id;
id=msgget(1230,IPC CREAT | 0666);
msgrcv(id,&new1,sizeof(new1)-sizeof(long),1,0);
printf("Msg recieved %s",new1.text);
int i;
new2.mtype=1;
id=msgget(1240,IPC CREAT | 0666);
int len=strlen(new1.text);
int k=0;
for(i=len-1;i>=0;i--,k++)
new2.text[k]=new2.text[i];
new2.text[k]='\0';
int length=strlen(new2.text)+1;
msgsnd(id,&new2,length,0);
printf("Msg %s sent",new2.text);
}
//ShmSndr
#include<stdio.h>
#include<sys/shm.h>
#include<sys/ipc.h>
#include<sys/types.h>
void main()
{
int id,ida,idb;
char *d,*c,*con;
id=shmget(4890,5,IPC CREAT | 0600);
ida=shmget(4880,5,IPC CREAT | 0600);
c=shmat(id,NULL,0);
printf("Enter the 1st string: ");
scanf("%s",&c);
print("Msg a sent!");
shmdt(c);
d=shmat(id,NULL,0);
printf("Enter the 2nd string: ");
scanf("%s",&d);
printf("Msg b sent!!");
shmdt(d);
sleep(20);
idb=shmget(4860,5,IPC CREAT | 0600);
con=shmat(idb,NULL,0);
printf("The concatenated string is: %s",con);
}
//ShmRcvr
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<string.h>
void main()
{
int ida,idb,id;
char *d,*c,*con,cont[50],*te;
id=shmget(4890,5,IPC CREAT | 0600);
c=shmat(id,NULL,0);
printf("1st msg recieved %s",c);
shmctl(id,IPC RMID,NULL);
ida=shmget(4880,5,IPC CREAT | 0600);
d=shmat(ida,NULL,0);
printf("2nd msg recieved %s",d);
shmctl(ida,IPC RMID,NULL);
int i,count=0;
idb=shmget(4860,5,IPC CREAT | 0600);
con=shmat(idb,NULL,0);
while(*c)
{
con[count++]=*c++;
}
while(*d)
{
con[count++]=*d++;
}
con[count]='\0';
printf("Concatenated string sent");
}
//Mutex
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
struct
{
pthread_mutex_t m1;
int data;
}s;
struct
{
pthread_mutex_t m2;
pthread_cond_t c;
int f;
}r;
void *consumer(void *arg);
void *producer(void *arg);
int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,producer,NULL);
pthread_create(&t2,NULL,consumer,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
printf("\n");
}
void *producer(void *arg)
{
int i;
for(i=1;i<=10;i++)
{
pthread_mutex_lock(&r.m2);
if(r.f==1)
{
pthread_cond_wait(&r.c,&r.m2);
}
pthread_mutex_unlock(&r.m2);
pthread_mutex_lock(&s.m1);
s.data=i;
printf("\nProduced item is %d",i);
pthread_mutex_unlock(&s.m1);
pthread_mutex_lock(&r.m2);
r.f=1;
pthread_cond_signal(&r.c);
pthread_mutex_unlock(&r.m2);
sleep(1);
}
}
void *consumer(void *arg)
{
int i;
for(i=1;i<=10;i++)
{
pthread_mutex_lock(&r.m2);
if(r.f==1)
{
pthread_cond_wait(&r.c,&r.m2);
}
pthread_mutex_unlock(&r.m2);
pthread_mutex_lock(&s.m1);
s.data=i;
printf("\nConsumed item is %d",s.data);
pthread_mutex_unlock(&s.m1);
pthread_mutex_lock(&r.m2);
r.f=0;
pthread_cond_signal(&r.c);
pthread_mutex_unlock(&r.m2);
sleep(1);
}
}
//Semaphore
#include<stdio.h>
#include<unistd.h>
#include<semaphore.h>
#include<stdlib.h>
#include<pthread.h>
int buf[5],f,r;
sem_t mutex,full,empty;
void *produce(void *arg)
{
int i;
for(i=1;i<=10;i++)
{
sem_wait(&empty);
sem_wait(&mutex);
printf("\nProduced item: %d",i);
buf[(++r)%5]=i;
//sleep(1);
sem_post(&mutex);
sem_post(&full);
}
}
void *consume(void *arg)
{
int item,i;
for(i=1;i<=10;i++)
{
sem_wait(&full);
sem_wait(&mutex);
item=buf[(++r)%5];
printf("\nConsumed item: %d",item);
//sleep(1);
sem_post(&mutex);
sem_post(&empty);
}
}
main()
{
pthread_t tid1,tid2;
sem_init(&mutex,0,1);
sem_init(&full,0,0);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
}
//FIFO
#include<stdio.h>
void main() //pnr fp ffff fp af iai fjcf ppp
{
int count=0,page[20],frame[20],n,f,i,j,k,avail;
printf("Enter the no.of pages: ");
scanf("%d",&n);
printf("Enter the reference strings: ");
for(i=0;i<n;i++)
{
scanf("%d",&page[i]);
}
printf("Enter the no.of frames: ");
scanf("%d",&f);
for(i=0;i<f;i++)
{
frame[i]=-1;
}
printf("\nReference string:\t\tPage frame:\n");
printf("\n \t\t \n"); //pnr fp ffff fp af iai fjcf ppp
for(i=0;i<n;i++)
{
printf("%d",page[i]);
avail=0;
for(k=0;k<f;k++)
{
if(frame[k]==page[i])
avail=1;
if(avail==0)
{
frame[j]=page[i];
j=(j++)%f;
count++;
for(k=0;k<f;k++)
printf("%d",frame[k]);
}
}
printf("\n");
}
printf("\nPage fault: %d",count);
}
//LRU
#include<stdio.h>
void main()
{
int p[20],page[50],count=0,c1,d,f,i,j,k=0,n,r,t,b[20],c2[20];
printf("Enter no of pages:");
scanf("%d",&n);
printf("Enter the reference string:");
for(i=0;i<n;i++)
scanf("%d",&page[i]);
printf("Enter no of frames:");
scanf("%d",&f);
p[k]=page[k];
printf("\n\t%d\n",p[k]);
count++;
k++;
for(i=1;i<n;i++)
{
c1=0;
for(j=0;j<f;j++)
{
if(page[i]!=p[j])
c1++;
}
if(c1==f)
{
count++;
if(k<f)
{
p[k]=page[i];
k++;
for(j=0;j<k;j++)
printf("\t%d",p[j]);
printf("\n");
}
else
{
for(r=0;r<f;r++)
{
c2[r]=0;
for(j=i-1;j<n;j--)
{
if(p[r]!=page[j])
c2[r]++;
else
break;
}
}
for(r=0;r<f;r++)
b[r]=c2[r];
for(r=0;r<f;r++)
{
for(j=r;j<f;j++)
{
if(b[r]<b[j])
{
t=b[r];
b[r]=b[j];
b[j]=t;
}
}
}
for(r=0;r<f;r++)
{
if(c2[r]==b[0])
p[r]=page[i];
printf("\t%d",p[r]);
}
printf("\n");
}
}
}
printf("\nThe no of page faults is %d",count);
}
//Banker
#include<stdio.h>
void main()
{
int n,m,i,j,t=0,q=0;
int total[20],max[20][20],alloc[20][20],avail[20],need[20][20],work[20],finish[20],req[20],safe[20],flag;
printf("Enter the no.of processes: ");
scanf("%d",&n);
printf("Enter the no.of resources: ");
scanf("%d",&m);
printf("Enter the total resource values: ");
for(i=0;i<m;i++)
{
printf("\n\tResource %d: ",i+1);
scanf("%d",&total[i]);
}
printf("\nEnter the maximum resource required: ");
for(i=0;i<n;i++)
{
printf("\nEnter the value for process %d: ",i);
for(j=0;j<m;j++)
{
printf("\n\tResource %d: ",j+1);
scanf("%d",&max[i][j]);
}
}
printf("\nEnter the allocated resource required: ");
for(i=0;i<n;i++)
{
printf("\nEnter the value for process %d: ",i);
for(j=0;j<m;j++)
{
printf("\n\tResource %d: ",j+1);
scanf("%d",&alloc[i][j]);
}
}
printf("\nMaximum\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
{
printf("\t%d",max[i][j]);
}
}
printf("\nAllocation\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
{
printf("\t%d",alloc[i][j]);
}
}
int sum;
for(j=0;j<m;j++)
{
sum=0;
for(i=0;i<n;i++)
{
sum=sum+alloc[i][j];
}
avail[j]=total[j]-sum;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
need[i][j]=max[i][j]-alloc[i][j];
}
}
printf("\n");
printf("\nAvailable\n");
for(i=0;i<m;i++)
{
printf("\t%d",avail[i]);
}
printf("\n");
printf("\nNeed\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("\t%d",need[i][j]);
}
}
void impwork()
{
int c=0;
for(i=0;i<n;i++)
work[i]=avail[i];
for(i=0;i<n;i++)
finish[i]=0;
for(q=0;q<n;q++)
{
t=0;
for(i=0;i<n;i++)
{
if(finish[i]==0)
{
t=1;
for(j=0;j<m;j++)
{
if(need[i][j]>work[j])
t=0;
}
if(t==1)
{
for(j=0;j<m;j++)
work[j]=work[j]+alloc[i][j];
finish[i]=1;
safe[c++]=i;
}
}
}
}
flag=0;
for(i=0;i<n;i++)
{
if(finish[i]==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("\nSafe sequence: ");
for(i=0;i<c;i++)
printf("P%d\t",safe[i]);
}
else
{
printf("\nNo safe sequence obtained");
}
}
impwork();
printf("\nEnter request for process?? Press 1 to continue: ");
scanf("%d",&t);
while(t==1)
{
printf("\nEnter the process no for request: ");
scanf("%d",&q);
printf("\nEnter the request resources: ");
j=0;
for(i=0;i<m;i++)
{
printf("\n\tResource %d: ",i+1);
scanf("%d",&req[i]);
if(req[i]>avail[i])
{
j=1;
}
}
if(j==1)
{
printf("\nRequest cannot be completed, resources are not available");
}
else
{
for(i=0;i<m;i++)
{
avail[i]=avail[i]-req[i];
alloc[q][i]=alloc[q][i]+req[i];
need[q][i]=need[q][i]-req[i];
}
printf("\nRequest is accepted");
impwork();
if(flag==0)
{
printf("\nRequest granted");
}
else
{
printf("\nRequest cannot be granted");
avail[i]=avail[i]+req[i];
alloc[q][i]=alloc[q][i]-req[i];
need[q][i]=need[q][i]+req[i];
}
}
printf("\nContinue receiving requests, press 1 to continue: ");\
scanf("%d",&t);
}
}