Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
5 views13 pages

Rahuul Os Midterm

Uploaded by

yadavmayank0712
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)
5 views13 pages

Rahuul Os Midterm

Uploaded by

yadavmayank0712
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
You are on page 1/ 13

1️⃣ FCFS Scheduling (Without Arrival Time)

#include <stdio.h>

int main() {
int n, i;
printf("Enter number of processes: ");
scanf("%d", &n);

int bt[n], wt[n], tat[n];


float avg_wt = 0, avg_tat = 0;

printf("Enter burst times for each process:\n");


for(i = 0; i < n; i++) {
printf("P%d: ", i+1);
scanf("%d", &bt[i]);
}

wt[0] = 0; // first process has no waiting time


for(i = 1; i < n; i++)
wt[i] = wt[i-1] + bt[i-1];

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


tat[i] = wt[i] + bt[i];

printf("\nProcess\tBT\tWT\tTAT\n");
for(i = 0; i < n; i++) {
printf("P%d\t%d\t%d\t%d\n", i+1, bt[i], wt[i], tat[i]);
avg_wt += wt[i];
avg_tat += tat[i];
}

printf("\nAverage Waiting Time = %.2f", avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n", avg_tat/n);

return 0;
}
2️⃣ FCFS Scheduling (With Arrival Time)
#include <stdio.h>

int main() {
int n, i, j;
printf("Enter number of processes: ");
scanf("%d", &n);

int pid[n], at[n], bt[n], ct[n], tat[n], wt[n];


float avg_wt = 0, avg_tat = 0;

for(i = 0; i < n; i++) {


pid[i] = i+1;
printf("Enter Arrival Time and Burst Time for P%d: ", i+1);
scanf("%d %d", &at[i], &bt[i]);
}

// Sort by Arrival Time (simple bubble sort)


for(i = 0; i < n-1; i++) {
for(j = 0; j < n-i-1; j++) {
if(at[j] > at[j+1]) {
int temp = at[j]; at[j] = at[j+1]; at[j+1] = temp;
temp = bt[j]; bt[j] = bt[j+1]; bt[j+1] = temp;
temp = pid[j]; pid[j] = pid[j+1]; pid[j+1] = temp;
}
}
}
ct[0] = at[0] + bt[0];
for(i = 1; i < n; i++) {
if(ct[i-1] < at[i]) // CPU idle
ct[i] = at[i] + bt[i];
else
ct[i] = ct[i-1] + bt[i];
}

for(i = 0; i < n; i++) {


tat[i] = ct[i] - at[i];
wt[i] = tat[i] - bt[i];
avg_wt += wt[i];
avg_tat += tat[i];
}

printf("\nPID\tAT\tBT\tCT\tTAT\tWT\n");
for(i = 0; i < n; i++) {
printf("P%d\t%d\t%d\t%d\t%d\t%d\n", pid[i], at[i], bt[i], ct[i], tat[i], wt[i]);
}

printf("\nAverage Waiting Time = %.2f", avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n", avg_tat/n);

return 0;
}
1️⃣ SJF (Non-preemptive, Without Arrival Time)

#include <stdio.h>

int main() {
int n;
printf("Enter number of processes: ");
scanf("%d", &n);

int bt[n], pid[n], wt[n], tat[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter burst time for P%d: ", i+1);
scanf("%d", &bt[i]);
}

// sort by burst time


for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(bt[j] > bt[j+1]){
int t=bt[j]; bt[j]=bt[j+1]; bt[j+1]=t;
t=pid[j]; pid[j]=pid[j+1]; pid[j+1]=t;
}
}
}

wt[0]=0;
for(int i=1;i<n;i++)
wt[i]=wt[i-1]+bt[i-1];

for(int i=0;i<n;i++){
tat[i]=wt[i]+bt[i];
avg_wt+=wt[i];
avg_tat+=tat[i];
}

printf("\nPID\tBT\tWT\tTAT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\n", pid[i], bt[i], wt[i], tat[i]);

printf("\nAverage Waiting Time = %.2f", avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n", avg_tat/n);
return 0;
}
2️⃣ SJF (Non-preemptive, With Arrival Time)

#include <stdio.h>
#include <limits.h>

int main() {
int n;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], at[n], bt[n], ct[n], tat[n], wt[n], done[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter Arrival Time and Burst Time for P%d: ",i+1);
scanf("%d %d",&at[i],&bt[i]);
done[i]=0;
}

int time=0, completed=0;


while(completed<n){
int idx=-1, min_bt=INT_MAX;
for(int i=0;i<n;i++){
if(at[i]<=time && !done[i]){
if(bt[i]<min_bt){
min_bt=bt[i];
idx=i;
}
}
}

if(idx==-1){
time++; // CPU idle
} else {
time+=bt[idx];
ct[idx]=time;
tat[idx]=ct[idx]-at[idx];
wt[idx]=tat[idx]-bt[idx];
avg_wt+=wt[idx];
avg_tat+=tat[idx];
done[idx]=1;
completed++;
}
}

printf("\nPID\tAT\tBT\tCT\tTAT\tWT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\t%d\n",pid[i],at[i],bt[i],ct[i],tat[i],wt[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}

3️⃣ SJF Preemptive (SRTF, With Arrival Time)

#include <stdio.h>
#include <limits.h>

int main(){
int n;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], at[n], bt[n], rt[n], ct[n], tat[n], wt[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter Arrival Time and Burst Time for P%d: ",i+1);
scanf("%d %d",&at[i],&bt[i]);
rt[i]=bt[i];
}

int time=0, completed=0;


while(completed<n){
int idx=-1, min_rt=INT_MAX;
for(int i=0;i<n;i++){
if(at[i]<=time && rt[i]>0){
if(rt[i]<min_rt){
min_rt=rt[i];
idx=i;
}
}
}

if(idx==-1){
time++;
} else {
rt[idx]--;
time++;
if(rt[idx]==0){
completed++;
ct[idx]=time;
tat[idx]=ct[idx]-at[idx];
wt[idx]=tat[idx]-bt[idx];
avg_wt+=wt[idx];
avg_tat+=tat[idx];
}
}
}
printf("\nPID\tAT\tBT\tCT\tTAT\tWT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\t%d\n",pid[i],at[i],bt[i],ct[i],tat[i],wt[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}

SJF non-preemptive without AT)

#include <stdio.h>

int main() {
int n;
printf("Enter number of processes: ");
scanf("%d", &n);

int bt[n], pid[n], wt[n], tat[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter burst time for P%d: ", i+1);
scanf("%d", &bt[i]);
}

// sort by burst time (shortest job first)


for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(bt[j] > bt[j+1]){
int t=bt[j]; bt[j]=bt[j+1]; bt[j+1]=t;
t=pid[j]; pid[j]=pid[j+1]; pid[j+1]=t;
}
}
}

wt[0]=0;
for(int i=1;i<n;i++)
wt[i]=wt[i-1]+bt[i-1];

for(int i=0;i<n;i++){
tat[i]=wt[i]+bt[i];
avg_wt+=wt[i];
avg_tat+=tat[i];
}

printf("\nPID\tBT\tWT\tTAT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\n", pid[i], bt[i], wt[i], tat[i]);

printf("\nAverage Waiting Time = %.2f", avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n", avg_tat/n);

return 0;
}

1️⃣ RR Without Arrival Time

#include <stdio.h>

int main() {
int n, tq;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], bt[n], rt[n], wt[n], tat[n], ct[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter burst time for P%d: ",i+1);
scanf("%d",&bt[i]);
rt[i]=bt[i]; // remaining time
}

printf("Enter time quantum: ");


scanf("%d",&tq);

int time=0, completed=0;


while(completed<n){
for(int i=0;i<n;i++){
if(rt[i]>0){
if(rt[i]>tq){
time+=tq;
rt[i]-=tq;
} else {
time+=rt[i];
ct[i]=time;
tat[i]=ct[i];
wt[i]=tat[i]-bt[i];
avg_wt+=wt[i];
avg_tat+=tat[i];
rt[i]=0;
completed++;
}
}
}
}
printf("\nPID\tBT\tCT\tTAT\tWT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\n",pid[i],bt[i],ct[i],tat[i],wt[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}

2️⃣ RR With Arrival Time

#include <stdio.h>

int main() {
int n, tq;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], at[n], bt[n], rt[n], wt[n], tat[n], ct[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter Arrival Time and Burst Time for P%d: ",i+1);
scanf("%d %d",&at[i],&bt[i]);
rt[i]=bt[i];
}

printf("Enter time quantum: ");


scanf("%d",&tq);

int time=0, completed=0, done=0;


while(completed<n){
done=1;
for(int i=0;i<n;i++){
if(at[i]<=time && rt[i]>0){
done=0;
if(rt[i]>tq){
time+=tq;
rt[i]-=tq;
} else {
time+=rt[i];
ct[i]=time;
tat[i]=ct[i]-at[i];
wt[i]=tat[i]-bt[i];
avg_wt+=wt[i];
avg_tat+=tat[i];
rt[i]=0;
completed++;
}
}
}
if(done) time++; // if CPU idle, move time
}

printf("\nPID\tAT\tBT\tCT\tTAT\tWT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\t%d\n",pid[i],at[i],bt[i],ct[i],tat[i],wt[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}

1️⃣ Priority Scheduling (Non-Preemptive, Without Arrival Time)

👉
4️⃣ Priority Scheduling (Preemptive, Without Arrival Time)
If all processes arrive at t=0, then preemptive priority = non-preemptive priority.
#include <stdio.h>

int main() {
int n;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], bt[n], pr[n], wt[n], tat[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter Burst Time and Priority for P%d: ",i+1);
scanf("%d %d",&bt[i],&pr[i]);
}

// sort by priority (lower number = higher priority)


for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(pr[j] > pr[j+1]){
int t=pr[j]; pr[j]=pr[j+1]; pr[j+1]=t;
t=bt[j]; bt[j]=bt[j+1]; bt[j+1]=t;
t=pid[j]; pid[j]=pid[j+1]; pid[j+1]=t;
}
}
}

wt[0]=0;
for(int i=1;i<n;i++)
wt[i]=wt[i-1]+bt[i-1];

for(int i=0;i<n;i++){
tat[i]=wt[i]+bt[i];
avg_wt+=wt[i];
avg_tat+=tat[i];
}

printf("\nPID\tBT\tPR\tWT\tTAT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\n",pid[i],bt[i],pr[i],wt[i],tat[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}

2️⃣ Priority Scheduling (Non-Preemptive, With Arrival Time)

#include <stdio.h>
#include <limits.h>

int main() {
int n;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], at[n], bt[n], pr[n], ct[n], tat[n], wt[n], done[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter Arrival Time, Burst Time, Priority for P%d: ",i+1);
scanf("%d %d %d",&at[i],&bt[i],&pr[i]);
done[i]=0;
}

int time=0, completed=0;


while(completed<n){
int idx=-1, best=INT_MAX;
for(int i=0;i<n;i++){
if(at[i]<=time && !done[i]){
if(pr[i]<best){ // lower = higher priority
best=pr[i];
idx=i;
}
}
}

if(idx==-1){
time++; // CPU idle
} else {
time+=bt[idx];
ct[idx]=time;
tat[idx]=ct[idx]-at[idx];
wt[idx]=tat[idx]-bt[idx];
avg_wt+=wt[idx];
avg_tat+=tat[idx];
done[idx]=1;
completed++;
}
}

printf("\nPID\tAT\tBT\tPR\tCT\tTAT\tWT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\t%d\t%d\n",pid[i],at[i],bt[i],pr[i],ct[i],tat[i],wt[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}

3️⃣ Priority Scheduling (Preemptive, With Arrival Time)

#include <stdio.h>
#include <limits.h>

int main() {
int n;
printf("Enter number of processes: ");
scanf("%d",&n);

int pid[n], at[n], bt[n], pr[n], rt[n], ct[n], tat[n], wt[n];


float avg_wt=0, avg_tat=0;

for(int i=0;i<n;i++){
pid[i]=i+1;
printf("Enter Arrival Time, Burst Time, Priority for P%d: ",i+1);
scanf("%d %d %d",&at[i],&bt[i],&pr[i]);
rt[i]=bt[i];
}

int time=0, completed=0;


while(completed<n){
int idx=-1, best=INT_MAX;
for(int i=0;i<n;i++){
if(at[i]<=time && rt[i]>0){
if(pr[i]<best){
best=pr[i];
idx=i;
}
}
}

if(idx==-1){
time++; // idle
} else {
rt[idx]--;
time++;
if(rt[idx]==0){
completed++;
ct[idx]=time;
tat[idx]=ct[idx]-at[idx];
wt[idx]=tat[idx]-bt[idx];
avg_wt+=wt[idx];
avg_tat+=tat[idx];
}
}
}

printf("\nPID\tAT\tBT\tPR\tCT\tTAT\tWT\n");
for(int i=0;i<n;i++)
printf("P%d\t%d\t%d\t%d\t%d\t%d\t%d\n",pid[i],at[i],bt[i],pr[i],ct[i],tat[i],wt[i]);

printf("\nAverage Waiting Time = %.2f",avg_wt/n);


printf("\nAverage Turnaround Time = %.2f\n",avg_tat/n);
return 0;
}
Process Manipulation
1.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
fork();
fork();
fork();
printf("hello\n");
return 0;
}
2.
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main() {
int fd[2]; // file descriptors for pipe
pid_t pid;
char write_msg[] = "Hello from parent!";
char read_msg[50];

// Create pipe
if (pipe(fd) == -1) {
perror("Pipe failed");
return 1;
}

// Fork a child process


pid = fork();
if (pid < 0) {
perror("Fork failed");
return 1;
}

if (pid == 0) { // Child process


close(fd[1]); // Close write end
read(fd[0], read_msg, sizeof(read_msg));
printf("Child received: %s\n", read_msg);
close(fd[0]); // Close read end
} else { // Parent process
close(fd[0]); // Close read end
write(fd[1], write_msg, strlen(write_msg) + 1);
close(fd[1]); // Close write end
}

return 0;
}

You might also like