Professional Documents
Culture Documents
Dos Assignment 1941012610 K
Dos Assignment 1941012610 K
On
Design of Operating Systems (CSE 4049)
Submitted by
CODE:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct
{
int pid;
int burst_time;
int waiting_time;
int turnaround_time;
} Process;
void print_table(Process p[], int n);
void print_gantt_chart(Process p[], int n);
int main()
{
Process p[MAX];
int i, j, n;
int sum_waiting_time = 0, sum_turnaround_time;
printf("Enter total number of process: ");
scanf("%d", &n);
printf("Enter burst time for each process:\n");
for(i=0; i<n; i++) {
p[i].pid = i+1;
printf("P[%d] : ", i+1);
scanf("%d", &p[i].burst_time);
p[i].waiting_time = p[i].turnaround_time = 0;
}
p[0].turnaround_time = p[0].burst_time;
for(i=1; i<n; i++) {
p[i].waiting_time = p[i-1].waiting_time + p[i-1].burst_time;
p[i].turnaround_time = p[i].waiting_time + p[i].burst_time;
}
for(i=0; i<n; i++) {
sum_waiting_time += p[i].waiting_time;
sum_turnaround_time += p[i].turnaround_time;
}
puts("");
print_table(p, n);
puts("");
printf("Total Waiting Time : %-2d\n", sum_waiting_time);
printf("Average Waiting Time : %-2.2lf\n", (double)sum_waiting_time /
(double) n);
printf("Total Turnaround Time : %-2d\n", sum_turnaround_time);
printf("Average Turnaround Time : %-2.2lf\n", (double)sum_turnaround_time /
(double)n);
puts("");
puts(" GANTT CHART ");
puts(" *********** ");
print_gantt_chart(p, n);
return 0;
}
void print_table(Process p[], int n)
{
int i;
puts("+-----+------------+--------------+-----------------+");
puts("| PID | Burst Time | Waiting Time | Turnaround Time |");
puts("+-----+------------+--------------+-----------------+");
for(i=0; i<n; i++) {
printf("| %2d | %2d | %2d | %2d |\n"
, p[i].pid, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time );
puts("+-----+------------+--------------+-----------------+");
}
}
void print_gantt_chart(Process p[], int n)
{
int i, j;
printf(" ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n|");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time - 1; j++) printf(" ");
printf("P%d", p[i].pid);
for(j=0; j<p[i].burst_time - 1; j++) printf(" ");
printf("|");
}
printf("\n ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n");
printf("0");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf(" ");
if(p[i].turnaround_time > 9) printf("\b");
printf("%d", p[i].turnaround_time);
}
printf("\n");
}
Input choice 2, and print the Gantt charts that illustrate the execution of these
processes using the SJF scheduling algorithm and then print the average
turnaround time, average waiting time and average response time.
CODE:
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS 100
struct process {
int pid;
int burst_time;
int waiting_time;
};
typedef struct process Process;
double average_waiting_time;
int total_waiting_time;
void sort_process_by_burst_time(Process p[], int n);
void calculate_waiting_time(Process p[], int n);
void print_gantt_chart(Process p[], int n);
int main()
{
Process p[MAX_PROCESS];
int n, i, j;
puts("SHORTEST JOB FIRST SCHEDULING ALGORITHM");
puts("=======================================");
printf("Enter total process: ");
scanf("%d", &n);
printf("Enter burst time for each process:\n");
for(i=0; i<n; i++) {
printf("P[%d]: ", i+1);
scanf("%d", &p[i].burst_time);
p[i].pid = i+1;
}
sort_process_by_burst_time(p, n);
calculate_waiting_time(p, n);
average_waiting_time = (double) ( (double)total_waiting_time / (double) n );
puts("");
printf("Average Waiting Time: %.2lf\n",average_waiting_time);
printf("Gantt Chart:\n");
print_gantt_chart(p, n);
return 0;
}
void sort_process_by_burst_time(Process p[], int n)
{
int i, j;
Process temp;
for(i=0; i<n-1; i++) {
for(j=0; j<n-1-i; j++) {
if(p[j].burst_time > p[j+1].burst_time) {
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
void calculate_waiting_time(Process p[], int n)
{
int i;
total_waiting_time = 0;
p[0].waiting_time = 0;
for(i=1; i<n; i++) {
p[i].waiting_time = p[i-1].waiting_time + p[i-1].burst_time;
total_waiting_time += p[i].waiting_time;
}
}
void print_gantt_chart(Process p[], int n)
{
int i, j;
int last = p[n-1].burst_time + ( n== 1 ? 0 : p[n-1].waiting_time);
printf(" ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n|");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time-1; j++) printf(" ");
printf("p%d", p[i].pid);
for(j=0; j<p[i].burst_time-1; j++) printf(" ");
printf("|");
}
printf("\n ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n");
int minus = 0;
for(i=0; i<n; i++) {
if(p[i].waiting_time>9) printf(" ");
printf("%d", p[i].waiting_time);
if(p[i+1].waiting_time>9){
minus = 1;
}
if(i+1 == n ) if (last>9) minus = 1;
for(j=0; j<p[i].burst_time-minus; j++) printf(" ");
}
if(last>9) printf(" ");
printf("%d\n", last);
}
Input choice 3, and print the Gantt charts that illustrate the execution of these
processes using the SRTF scheduling algorithm and then print the average
turnaround time, average waiting time and average response time.
CODE:
#include <stdio.h>
int main()
{
int n, ari[10], bur[10], total = 0, i, j, small, temp, procs[100], k, waiting[10],
finish[10];
float tavg = 0.0, wavg = 0.0;
printf("ENTER THE NUMBER OF PROCESSES:");
scanf("%d", & n);
for (i = 0; i < n; i++)
{
printf("ENTER THE ARRIVAL TIME OF PROCESS %d:\t", i);
scanf("%d", & ari[i]);
printf("ENTER THE BURST TIME OF PROCESS %d:\t", i);
scanf("%d", & bur[i]);
waiting[i] = 0;
total += bur[i];
}
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (ari[i] > ari[j])
{
temp = ari[i];
ari[i] = ari[j];
ari[j] = temp;
temp = bur[i];
bur[i] = bur[j];
bur[j] = temp;
}
}
}
for (i = 0; i < total; i++)
{
small = 3200;
for (j = 0; j < n; j++)
{
if ((bur[j] != 0) && (ari[j] <= i) && (bur[j] < small))
{
small = bur[j];
k = j;
}
}
bur[k]--;
procs[i] = k;
}
k=0;
for (i = 0; i < total; i++)
{
for (j = 0; j < n; j++)
{
if (procs[i] == j)
{
finish[j] = i;
waiting[j]++;
}
}
}
for (i = 0; i < n; i++)
{
printf("\n PROCESS %d -FINISH TIME==> %d TURNAROUND TIME==>%d
WAITING TIME==>%d\n", i + 1, finish[i] + 1, (finish[i] - ari[i]) + 1, (((finish[i] + 1)
- waiting[i]) - ari[i]));
wavg = wavg + (((finish[i] + 1) - waiting[i]) - ari[i]);
tavg = tavg + ((finish[i] - ari[i]) + 1);
}
printf("\n WAvG==>\t%f\n TAVG==>\t%f\n", (wavg / n), (tavg / n));
return 0;
}
Input choice 4, and print the Gantt charts that illustrate the execution of these
processes using the RR scheduling algorithm and then print the average
turnaround time, average waiting time and average response time.
CODE:
#include<stdio.h>
struct times
{
int p,art,but,wtt,tat,rnt;
};
void sortart(struct times a[],int pro)
{
int i,j;
struct times temp;
for(i=0;i<pro;i++)
{
for(j=i+1;j<pro;j++)
{
if(a[i].art > a[j].art)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return;
}
int main()
{
int i,j,pro,time,remain,flag=0,ts;
struct times a[100];
float avgwt=0,avgtt=0;
printf("Round Robin Scheduling Algorithm\n");
printf("Enter Number Of Processes : ");
scanf("%d",&pro);
remain=pro;
for(i=0;i<pro;i++)
{
printf("Enter arrival time and Burst time for Process P%d : ",i);
scanf("%d%d",&a[i].art,&a[i].but);
a[i].p = i;
a[i].rnt = a[i].but;
}
sortart(a,pro);
printf("Enter Time Slice OR Quantum Number : ");
scanf("%d",&ts);
printf("\n***************************************\n");
printf("Gantt Chart\n");
printf("0");
for(time=0,i=0;remain!=0;)
{
if(a[i].rnt<=ts && a[i].rnt>0)
{
time = time + a[i].rnt;
printf(" -> [P%d] <- %d",a[i].p,time);
a[i].rnt=0;
flag=1;
}
else if(a[i].rnt > 0)
{
a[i].rnt = a[i].rnt - ts;
time = time + ts;
printf(" -> [P%d] <- %d",a[i].p,time);
}
if(a[i].rnt==0 && flag==1)
{
remain--;
a[i].tat = time-a[i].art;
a[i].wtt = time-a[i].art-a[i].but;
avgwt = avgwt + time-a[i].art-a[i].but;
avgtt = avgtt + time-a[i].art;
flag=0;
}
if(i==pro-1)
i=0;
else if(a[i+1].art <= time)
i++;
else
i=0;
}
printf("\n\n");
printf("***************************************\n");
printf("Pro\tArTi\tBuTi\tTaTi\tWtTi\n");
printf("***************************************\n");
for(i=0;i<pro;i++)
{
printf("P%d\t%d\t%d\t%d\t%d\n",a[i].p,a[i].art,a[i].but,a[i].tat,a[i].wtt);
}
printf("***************************************\n");
avgwt = avgwt/pro;
avgtt = avgtt/pro;
printf("Average Waiting Time : %.2f\n",avgwt);
printf("Average Turnaround Time : %.2f\n",avgtt);
return 0;
}
Analyze the results and determine which of the algorithms results in the minimum
average waiting time over all processes?
On analyzing the results of the algorithm , the minimum average waiting time is
3.20seconds of Shortest Job First (SJF) and shortest Remaining Time First
(SRTF).
2. Consider the set of processes with arrival time (in milliseconds), CPU burst time (in
milliseconds), and time quantum =2ms as shown below.
Input choice 1, and print the Gantt charts that illustrate the execution of these
processes using the FCFS scheduling algorithm and then print the average
turnaround time, average waiting time and average response time.
CODE:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct
{
int pid;
int burst_time;
int waiting_time;
int turnaround_time;
} Process;
void print_table(Process p[], int n);
void print_gantt_chart(Process p[], int n);
int main()
{
Process p[MAX];
int i, j, n;
int sum_waiting_time = 0, sum_turnaround_time;
printf("Enter total number of process: ");
scanf("%d", &n);
printf("Enter burst time for each process:\n");
for(i=0; i<n; i++) {
p[i].pid = i+1;
printf("P[%d] : ", i+1);
scanf("%d", &p[i].burst_time);
p[i].waiting_time = p[i].turnaround_time = 0;
}
p[0].turnaround_time = p[0].burst_time;
for(i=1; i<n; i++) {
p[i].waiting_time = p[i-1].waiting_time + p[i-1].burst_time;
p[i].turnaround_time = p[i].waiting_time + p[i].burst_time;
}
for(i=0; i<n; i++) {
sum_waiting_time += p[i].waiting_time;
sum_turnaround_time += p[i].turnaround_time;
}
puts("");
print_table(p, n);
puts("");
printf("Total Waiting Time : %-2d\n", sum_waiting_time);
printf("Average Waiting Time : %-2.2lf\n", (double)sum_waiting_time /
(double) n);
printf("Total Turnaround Time : %-2d\n", sum_turnaround_time);
printf("Average Turnaround Time : %-2.2lf\n", (double)sum_turnaround_time /
(double)n);
puts("");
puts(" GANTT CHART ");
puts(" *********** ");
print_gantt_chart(p, n);
return 0;
}
void print_table(Process p[], int n)
{
int i;
puts("+-----+------------+--------------+-----------------+");
puts("| PID | Burst Time | Waiting Time | Turnaround Time |");
puts("+-----+------------+--------------+-----------------+");
for(i=0; i<n; i++) {
printf("| %2d | %2d | %2d | %2d |\n"
, p[i].pid, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time );
puts("+-----+------------+--------------+-----------------+");
}
}
void print_gantt_chart(Process p[], int n)
{
int i, j;
printf(" ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n|");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time - 1; j++) printf(" ");
printf("P%d", p[i].pid);
for(j=0; j<p[i].burst_time - 1; j++) printf(" ");
printf("|");
}
printf("\n ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n");
printf("0");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf(" ");
if(p[i].turnaround_time > 9) printf("\b");
printf("%d", p[i].turnaround_time);
}
printf("\n");
}
Input choice 2, and print the Gantt charts that illustrate the execution of these
processes using the SJF scheduling algorithm and then print the average turnaround
time, average waiting time and average response time.
CODE:
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS 100
struct process {
int pid;
int burst_time;
int waiting_time;
};
typedef struct process Process;
double average_waiting_time;
int total_waiting_time;
void sort_process_by_burst_time(Process p[], int n);
void calculate_waiting_time(Process p[], int n);
void print_gantt_chart(Process p[], int n);
int main()
{
Process p[MAX_PROCESS];
int n, i, j;
puts("SHORTEST JOB FIRST SCHEDULING ALGORITHM");
puts("=======================================");
printf("Enter total process: ");
scanf("%d", &n);
printf("Enter burst time for each process:\n");
for(i=0; i<n; i++) {
printf("P[%d]: ", i+1);
scanf("%d", &p[i].burst_time);
p[i].pid = i+1;
}
sort_process_by_burst_time(p, n);
calculate_waiting_time(p, n);
average_waiting_time = (double) ( (double)total_waiting_time / (double) n );
puts("");
printf("Average Waiting Time: %.2lf\n",average_waiting_time);
printf("Gantt Chart:\n");
print_gantt_chart(p, n);
return 0;
}
void sort_process_by_burst_time(Process p[], int n)
{
int i, j;
Process temp;
for(i=0; i<n-1; i++) {
for(j=0; j<n-1-i; j++) {
if(p[j].burst_time > p[j+1].burst_time) {
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
void calculate_waiting_time(Process p[], int n)
{
int i;
total_waiting_time = 0;
p[0].waiting_time = 0;
for(i=1; i<n; i++) {
p[i].waiting_time = p[i-1].waiting_time + p[i-1].burst_time;
total_waiting_time += p[i].waiting_time;
}
}
void print_gantt_chart(Process p[], int n)
{
int i, j;
int last = p[n-1].burst_time + ( n== 1 ? 0 : p[n-1].waiting_time);
printf(" ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n|");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time-1; j++) printf(" ");
printf("p%d", p[i].pid);
for(j=0; j<p[i].burst_time-1; j++) printf(" ");
printf("|");
}
printf("\n ");
for(i=0; i<n; i++) {
for(j=0; j<p[i].burst_time; j++) printf("--");
printf(" ");
}
printf("\n");
int minus = 0;
for(i=0; i<n; i++) {
if(p[i].waiting_time>9) printf(" ");
printf("%d", p[i].waiting_time);
if(p[i+1].waiting_time>9){
minus = 1;
}
if(i+1 == n ) if (last>9) minus = 1;
for(j=0; j<p[i].burst_time-minus; j++) printf(" ");
}
if(last>9) printf(" ");
printf("%d\n", last);
}
Input choice 3, and print the Gantt charts that illustrate the execution of these
processes using the SRTF scheduling algorithm and then print the average
turnaround time, average waiting time and average response time.
CODE:
#include <stdio.h>
int main()
{
int n, ari[10], bur[10], total = 0, i, j, small, temp, procs[100], k, waiting[10],
finish[10];
float tavg = 0.0, wavg = 0.0;
printf("ENTER THE NUMBER OF PROCESSES:");
scanf("%d", & n);
for (i = 0; i < n; i++)
{
printf("ENTER THE ARRIVAL TIME OF PROCESS %d:\t", i);
scanf("%d", & ari[i]);
printf("ENTER THE BURST TIME OF PROCESS %d:\t", i);
scanf("%d", & bur[i]);
waiting[i] = 0;
total += bur[i];
}
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (ari[i] > ari[j])
{
temp = ari[i];
ari[i] = ari[j];
ari[j] = temp;
temp = bur[i];
bur[i] = bur[j];
bur[j] = temp;
}
}
}
for (i = 0; i < total; i++)
{
small = 3200;
for (j = 0; j < n; j++)
{
if ((bur[j] != 0) && (ari[j] <= i) && (bur[j] < small))
{
small = bur[j];
k = j;
}
}
bur[k]--;
procs[i] = k;
}
k=0;
for (i = 0; i < total; i++)
{
for (j = 0; j < n; j++)
{
if (procs[i] == j)
{
finish[j] = i;
waiting[j]++;
}
}
}
for (i = 0; i < n; i++)
{
printf("\n PROCESS %d -FINISH TIME==> %d TURNAROUND TIME==>%d
WAITING TIME==>%d\n", i + 1, finish[i] + 1, (finish[i] - ari[i]) + 1, (((finish[i] +
1) - waiting[i]) - ari[i]));
wavg = wavg + (((finish[i] + 1) - waiting[i]) - ari[i]);
tavg = tavg + ((finish[i] - ari[i]) + 1);
}
printf("\n WAvG==>\t%f\n TAVG==>\t%f\n", (wavg / n), (tavg / n));
return 0;
}
Input choice 4, and print the Gantt charts that illustrate the execution of these
processes using the RR scheduling algorithm and then print the average turnaround
time, average waiting time and average response time.
CODE:
#include<stdio.h>
struct times
{
int p,art,but,wtt,tat,rnt;
};
void sortart(struct times a[],int pro)
{
int i,j;
struct times temp;
for(i=0;i<pro;i++)
{
for(j=i+1;j<pro;j++)
{
if(a[i].art > a[j].art)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return;
}
int main()
{
int i,j,pro,time,remain,flag=0,ts;
struct times a[100];
float avgwt=0,avgtt=0;
printf("Round Robin Scheduling Algorithm\n");
printf("Enter Number Of Processes : ");
scanf("%d",&pro);
remain=pro;
for(i=0;i<pro;i++)
{
printf("Enter arrival time and Burst time for Process P%d : ",i);
scanf("%d%d",&a[i].art,&a[i].but);
a[i].p = i;
a[i].rnt = a[i].but;
}
sortart(a,pro);
printf("Enter Time Slice OR Quantum Number : ");
scanf("%d",&ts);
printf("\n***************************************\n");
printf("Gantt Chart\n");
printf("0");
for(time=0,i=0;remain!=0;)
{
if(a[i].rnt<=ts && a[i].rnt>0)
{
time = time + a[i].rnt;
printf(" -> [P%d] <- %d",a[i].p,time);
a[i].rnt=0;
flag=1;
}
else if(a[i].rnt > 0)
{
a[i].rnt = a[i].rnt - ts;
time = time + ts;
printf(" -> [P%d] <- %d",a[i].p,time);
}
if(a[i].rnt==0 && flag==1)
{
remain--;
a[i].tat = time-a[i].art;
a[i].wtt = time-a[i].art-a[i].but;
avgwt = avgwt + time-a[i].art-a[i].but;
avgtt = avgtt + time-a[i].art;
flag=0;
}
if(i==pro-1)
i=0;
else if(a[i+1].art <= time)
i++;
else
i=0;
}
printf("\n\n");
printf("***************************************\n");
printf("Pro\tArTi\tBuTi\tTaTi\tWtTi\n");
printf("***************************************\n");
for(i=0;i<pro;i++)
{
printf("P%d\t%d\t%d\t%d\t%d\n",a[i].p,a[i].art,a[i].but,a[i].tat,a[i].wtt);
}
printf("***************************************\n");
avgwt = avgwt/pro;
avgtt = avgtt/pro;
printf("Average Waiting Time : %.2f\n",avgwt);
printf("Average Turnaround Time : %.2f\n",avgtt);
return 0;
}
Analyze the results and determine which of the algorithms results in the minimum
average waiting time over all processes?
On analyzing the results of the algorithm , the minimum average waiting time is 2.50
seconds of Shortest Job First (SJF) and shortest Remaining Time First (SRTF).
Department of Computer Sclence & Englneering
Faculty of Engineering & Technology (ITER)
Best Fet
3/2h in 46ok
k
17h n b00
700k
212 h t n
526 mwstut
wost
SI?h tn 600h
400 k
212 k n
S2h mt wat
cala ddhA
2) heapAed to hehAederd la/
NumbU7 bih
2" 128 by k
na 190 addhen
Meseatp Aical
Beqvuded o Ae
b)
Vomb b
2 20 1
n= 21
2/16by
Paqt ( e
dos 40 qe 5by s
2 o0
4
fehn 204-/836+ 962 b, s
7n n a l la;men
2
S) Ne ags 212 10
2
t n u e n b o n et Aiy te - l e v
tits = 1 /11
Vumben a e n
mims
2 Toad phudi tal
6) 4|paget
4/2 byfes
8 34/2 hyty
-
S
E= 1S n
23bod k20-25
Al entie (on be
addieuei b1
VMhol addley =231B
36 b b
addhers
eqpiied fo he hept Cos, tas
a
NUmhen o beh
n16 des
o upsejedph ptalt
umh 07 hih Aqisd
n=/2
C)12/160
I2%.16 12
16x 12 +12 -28
21
3
ol0
d) 35 6ol1 T
Paqe de'pe 16hB =2 é0 74
B
olol 403S
OIrb 6Doo 0d1
Name:- Regd. Number:-
Department of Computer Sclence & Engineering
Faculty of Engineering & Technology (TTER)
11)
a) o130
219+43 0=649
110
2 300fl0 =23 1d
C2, 10o
90t/50 190
)2,Soo
tlleq al epAene
Name:-
Regd. Number:-