0% found this document useful (0 votes)
11 views24 pages

C Programs for Process Scheduling and Page Replacement

The document contains multiple C programs addressing various problems related to process scheduling, page replacement algorithms, and disk scheduling. Each program includes input prompts, processing logic, and output statements to demonstrate functionality, such as calculating waiting times, turnaround times, and page faults. The programs cover FIFO, LRU, and other scheduling techniques, providing a comprehensive overview of these concepts.

Uploaded by

Nirav
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views24 pages

C Programs for Process Scheduling and Page Replacement

The document contains multiple C programs addressing various problems related to process scheduling, page replacement algorithms, and disk scheduling. Each program includes input prompts, processing logic, and output statements to demonstrate functionality, such as calculating waiting times, turnaround times, and page faults. The programs cover FIFO, LRU, and other scheduling techniques, providing a comprehensive overview of these concepts.

Uploaded by

Nirav
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

PROBLEM NUMBER : 7

PROGRAM:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

#include <sys/wait.h>

int main() OUTPUT:


{
pid_t pid;
char arr[100],str[100];
int fd[2],nbr,nbw;
pipe(fd);
pid=fork();
if(pid==0)
{
printf("\nEnter a string: ");
fgets(str , 100 , stdin);
nbw=write(fd[1],str,strlen(str));
printf("Child wrote %d bytes\n",nbw);
exit(0);
} else
{
nbr=read(fd[0],arr,sizeof(arr));
arr[nbr]='\0';
printf("Parent read %d bytes : %s\n",nbr,arr);
}
return 0;
}
PROBLEM NUMBER : 8
PROGRAM:
#include <stdio.h>
void sort(int a[][2],int n)
{
for(int i=0;i<n;i++)
{ for(int j=i+1;j<n;j++)
{ if(a[i][0]>a[j][0])
{
int t=a[i][0];
int k=a[i][1];
a[i][0]=a[j][0];
a[i][1]=a[j][1];
a[j][0]=t;
a[j][1]=k;
}
}
}
}
int main(){
int n;
printf("Enter the no. of process :");
scanf("%d",&n);
int arr[n][2];
for(int i=0;i<n;i++)
{
printf("\n enter the arrival and burst time for the %dth process\t",i+1);
scanf("%d%d",&arr[i][0],&arr[i][1]);
}
sort(arr,n);
int wait[n],tat[n],averageWait=0,averageTAT=0;
wait[0]=0;
for(int i=1;i<n;i++)
{
wait[i]=wait[i-1]+arr[i-1][1];
averageWait+=wait[i];
}
for(int i=0;i<n;i++)
{
tat[i]=wait[i]+arr[i][1];
averageTAT+=tat[i];
}
double a=averageTAT/(1.0*n), b=averageWait/(1.0*n);
printf("Process no.\t Arrival time \t Burst Time\t Waiting Time \t Turn around
Time\n");
for(int i=0;i<n;i++)
{
printf("%d\t\t %d\t\t %d \t\t %d \t\t%d\n",i+1,arr[i][0],arr[i][1],wait[i],tat[i]);
}
printf("The average wait time is: %lf and the average turn around time is: %lf",b,a);
return 0;
} OUTPUT:
PROBLEM NUMBER : 9
PROGRAM:
#include <stdio.h>
int main()
{
int n;
printf("Enter the no. of process:");
scanf("%d",&n);
int arr[n][2],burst[n];
for(int i=0;i<n;i++)
{
printf("\n enter the arrival and burst time for the %dth process\t",i+1);
scanf("%d%d",&arr[i][0],&arr[i][1]);
burst[i]=arr[i][1];
}
int wait[n],tat[n],prev[n];
int t=0,averageTAT=0,averageWait=0;
for(int i=0;i<n;i++){
wait[i]=0;
prev[i]=0;
}
while(1)
{
int ind=0,mini=100000;
for(int i=0;i<n;i++){
if(t>=arr[i][0]&&mini>arr[i][1]&&arr[i][1]>0)
{
mini=arr[i][1];
ind=i;
}
}
if(mini==100000)
break;
arr[ind][1]-=1;
wait[ind]+=t-prev[ind];
t++;
prev[ind]=t;
} for(int i=0;i<n;i++) {
tat[i]=wait[i]+burst[i];
averageTAT+=tat[i];
averageWait+=wait[i];
}
double a=averageTAT/(1.0*n), b=averageWait/(1.0*n);
printf("Process no.\t Arrival time \t Burst Time\t Waiting Time \t Turn around Time\n");
for(int i=0;i<n;i++){
printf("%d\t\t %d\t\t %d \t\t %d \t\t%d\n",i+1,arr[i][0],arr[i][1],wait[i],tat[i]);
}
printf("The average wait time is: %lf \naverage turn around time is: %lf",b,a);

return 0; OUTPUT:
}
PROBLEM NUMBER : 10
(PREEMPTIVE)

PROGRAM:
#include <stdio.h>
int main()
{
int n;
printf("Enter the no. of process :");
scanf("%d",&n);
int arr[n][3],burst[n];
for(int i=0;i<n;i++)
{
printf("\n enter the arrival,burst time and priority number for the %dth
process\t",i+1);
scanf("%d%d%d",&arr[i][0],&arr[i][1],&arr[i][2]);
burst[i]=arr[i][1];
}
int wait[n],tat[n],prev[n];
int t=0,averageTAT=0,averageWait=0;
for(int i=0;i<n;i++)
{
wait[i]=0;
prev[i]=arr[i][0];
}
while(1)
{
int ind=0,mini=100000;
for(int i=0;i<n;i++)
{
if(t>=arr[i][0]&&mini>arr[i][2]&&arr[i][1]>0)
{
mini=arr[i][2];
ind=i;
}
}
if(mini==100000)
break;
arr[ind][1]-=1;
wait[ind]+=t-prev[ind];
t++;
prev[ind]=t;
}
for(int i=0;i<n;i++) {
tat[i]=wait[i]+burst[i];
averageTAT+=tat[i];
averageWait+=wait[i];
}
double a=averageTAT/(1.0*n), b=averageWait/(1.0*n);
printf("Process no.\t Arrival time \t Burst Time\t Priority_no \t Waiting Time \t Turnaround
Time\n");
for(int i=0;i<n;i++)
{
printf("%d\t\t %d\t\t %d \t\t %d
\t\t%d\t\t%d\n",i+1,arr[i][0],burst[i],arr[i][2],wait[i],tat[i]);
}
printf("The average wait time is: %lf \nthe average turn around time is: %lf",b,a);
return 0;
}
OUTPUT:

(NON-PREEMPTIVE)

PROGRAM:
#include <stdio.h>
void sort(int a[][3],int n)
{
for(int i=0;i<n;i++)
{ for(int j=i+1;j<n;j++)
{ if(a[i][2]<a[j][2])
{ int t=a[i][0];
int k=a[i][1];
int l=a[i][2];
a[i][0]=a[j][0];
a[i][1]=a[j][1];
a[i][2]=a[j][2];
a[j][0]=t;
a[j][1]=k;
a[j][2]=l;
}
}
} }
int main(){
int n;
printf("Enter the no. of process :");
scanf("%d",&n);
int arr[n][3];
for(int i=0;i<n;i++)
{ printf("\n enter the arrival,burst time and priority number for the %dth process\t",i+1);
scanf("%d%d%d",&arr[i][0],&arr[i][1],&arr[i][2]);
}
sort(arr,n);
int wait[n],tat[n],averageWait=0,averageTAT=0;
wait[0]=0;
for(int i=1;i<n;i++){
wait[i]=wait[i-1]+arr[i-1][1];
averageWait+=wait[i];
}
for(int i=0;i<n;i++) {
tat[i]=wait[i]+arr[i][1];
averageTAT+=tat[i];
}
double a=averageTAT/(1.0*n), b=averageWait/(1.0*n);
printf("Process no.\t Arrival time \t Burst Time\t Priority_no \t Waiting Time \t Turn around
Time\n");
for(int i=0;i<n;i++)
{ printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",i+1,arr[i][0],arr[i][1],arr[i][2],wait[i],tat[i]);
}
printf("The average wait time is: %lf \nthe average turn around time is: %lf",b,a);
return 0;
}
OUTPUT:
PROBLEM NUMBER : 11
PROGRAM:

#include <stdio.h>
#include <stdlib.h>
#define MAX 5
int front = 0, back = -1, cs = 0, nf;
int f[MAX];
void enq(int x);
void deq(void);
void dis(void);
int isfound(int);
void main()
{
int pf = 0, rfs, rf[15], i;
printf("\n FIFO page replacement");
printf("\n Enter the size of reference string:");
scanf("%d", &rfs);
printf("\n Enter the reference string:");
for (i = 0; i < rfs; i++)
{
scanf("%d", &rf[i]);
}
printf("\n Enter the number of free frames:");
scanf("%d", &nf);
enq(rf[0]);
pf = 1;
for (i = 0; i < rfs; i++)
{
if (!isfound(rf[i]))
{
pf++;
if (cs == nf)
deq();
enq(rf[i]);
}
dis();
}
printf("\n No of page faults :%d", pf);
}
int isfound(int x)
{
int i;
for (i = 0; i < cs; i++)
if (f[i] == x)
return 1;
return 0;
}
void enq(int x)
{
if (++back == nf)
back = 0;
f[back] = x;
cs++;
}
void dis()
{
int i;
for (i = 0; i < cs; i++)
printf("%d", f[i]);
printf("\n");
}
void deq()
{
cs--;
if (++front == nf)
front = 0;
return;
}

OUTPUT:
PROBLEM NUMBER : 12
PROGRAM:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int fsize, ssize, f, frame[10], arrive[30], rstring[30];
int main()
{
int i, lfi, idx, cs = 0, f, ls = 0, pf = 0, j = 0, y, k, z = 0, time = 0;
int pagefound(int x);
void display();
int leastused();
int pagelocation(int x);
printf("\n\n\t\t LRU PAGE REPLACEMENT");
printf("\n\t\t -------------------- ");
printf("\n\n\t Enter the frame size:");
scanf("%d", &fsize);
printf("\n\t Enter the reference string size:");
scanf("%d", &ssize);
printf("\n\t Enter the reference string:");
for (i = 0; i < ssize; i++)
scanf("%d", &rstring[i]);
for (k = 0; k < fsize; k++)
{ frame[k] = -3;
arrive[k] = 0;
} for (i = 0; i < ssize; i++) {
y = pagefound(rstring[i]);
if (y == 0)
{ pf++;
if (cs >= fsize)
{ lfi = leastused();
frame[lfi] = rstring[i];
arrive[lfi] = ++time;
}
else if (cs < fsize)
{ frame[cs] = rstring[i];
arrive[cs] = ++time;
}
}
else
{
idx = pagelocation(rstring[i]);
arrive[idx] = ++time;
}
cs++;
display();
}
printf("\n Page fault=%d", pf);
}
int pagefound(int x)
{
int i, val = 0;
for (i = 0; i < fsize; i++)
{
if (x == frame[i])
{
val = 1;
break;
}
}
return (val);
}
void display()
{
int i;
printf("\n");
for (i = 0; i < fsize; i++)
{
if (frame[i] >= 0)
{
printf("%d", frame[i]);
}
else
printf("\t");
}
}
int leastused()
{
int i, min = 0, n = 0;
for (i = 1; i < fsize; i++)
{
if (arrive[i] < arrive[min])
{
min = i;
n++;
}
}
if (n == 0)
return (0);
else
return (min);
}
int pagelocation(int pageno)
{
int i, flag = 0;
for (i = 0; i < fsize; i++)
{
if (frame[i] == pageno)
{
flag = 1;
break;
}
}
return (i);
}

OUTPUT:
PROBLEM NUMBER : 13
PROGRAM:
#include <stdio.h>
int main()
{
int n, pg[30], fr[10];
int count[10], i, j, k, fault, f, flag, temp, current, c, dist, max, m, cnt, p, x;
fault = 0;
dist = 0;
k = 0;
printf("Enter the total no pages:");
scanf("%d", &n);
printf("Enter the sequence:");
for (i = 0; i < n; i++)
scanf("%d", &pg[i]);
printf("\nEnter frame size:");
scanf("%d", &f);

for (i = 0; i < f; i++)


{
count[i] = 0;
fr[i] = -1;
}
for (i = 0; i < n; i++)
{
flag = 0;
temp = pg[i];
for (j = 0; j < f; j++)
{
if (temp == fr[j])
{
flag = 1;
break;
}
}
if ((flag == 0) && (k < f))
{
fault++;
fr[k] = temp;
k++;
}
else if ((flag == 0) && (k == f))
{
fault++;
for (cnt = 0; cnt < f; cnt++)
{
current = fr[cnt];
for (c = i; c < n; c++)
{
if (current != pg[c])
count[cnt]++;
else
break;
}
}
max = 0;
for (m = 0; m < f; m++)
{
if (count[m] > max)
{
max = count[m];
p = m;
}
}
fr[p] = temp;
}
printf("\npage %d frame\t", pg[i]);
for (x = 0; x < f; x++)
{
printf("%d\t", fr[x]);
}
}
printf("\nTotal number of faults=%d", fault);
return 0;
}

OUTPUT:
PROBLEM NUMBER : 14
PROGRAM:
#include <stdio.h>
int main(){
int initial,n;

printf("enter the initial position of the head and the no. of tracks to be reached :");
scanf("%d%d",&initial,&n);

printf("enter the disk track numbers to be reached\n");


int arr[n];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int total=initial-arr[0];
if(total<0)
total*=-1;
for(int i=0;i<n-1;i++)
{ int a=arr[i]-arr[i+1];
if(a<0)
a*=-1;
total+=a; }
printf("The total amount is %d",total);
return 0;

} OUTPUT:
PROBLEM NUMBER : 15
PROGRAM:
#include <stdio.h
int main(){
int initial,n;
printf("enter the initial position of the head and the no. of tracks to be reached:");
scanf("%d%d",&initial,&n);
printf("enter the disk track numbers to be reached\n");
int arr[n];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int c=0,total=0;
while(c!=n)
{ int d=10000,ind;
for(int i=0;i<n;i++)
{ int l=initial-arr[i];
if(l<0)
l*=-1;
if(l<d)
{ d=l;
ind=i;
}
}
initial=arr[ind];
arr[ind]=10000;
total+=d;
c++;
}
printf("The total amount is %d",total);
return 0;
}

OUTPUT:

You might also like