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;
}