Professional Documents
Culture Documents
ON
Operating Systems
Laboratory
SUBMITTED BY:
ID: 316
BATCH: 47
SESSION: 2018
SUBMITTED TO:
Bulbul Ahammad
Lecturer
#include<stdio.h>
int main(){
int bt[10]={0},at[10]={0},tat[10]={0},wt[10]={0},ct[10]={0};
int n,sum=0;
float totalTAT=0,totalWT=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("Arrival time of process[%d] ",i+1);
scanf("%d",&at[i]);
scanf("%d",&bt[i]);
printf("\n");
for(int j=0;j<n;j++)
sum+=bt[j];
ct[j]+=sum;
tat[k]=ct[k]-at[k];
totalTAT+=tat[k];
for(int k=0;k<n;k++)
wt[k]=tat[k]-bt[k];
totalWT+=wt[k];
printf("Solution: \n\n");
for(int i=0;i<n;i++)
}
printf("\n\nAverage Turnaround Time = %f\n",totalTAT/n);
printf("Average WT = %f\n\n",totalWT/n);
return 0;
Image:
Shortest Job First (SJF)- Preemptive
Code:
#include<bits/stdc++.h>
struct process{
int process_id;
int arrival;
int burst;
int start_time;
int completion;
int tat;
int waiting;
};
int main()
{
int p_no;
float avg_waiting;
int total_waiting = 0;
int mark[10];
int burst_remaining[100];
memset(mark,0,sizeof(mark));
int i;
cout<<setprecision(2)<<fixed;
cin>>p_no;
cin>>p[i].arrival;
cout<<endl;
}
cin>>p[i].burst;
p[i].process_id = i+1;
burst_remaining[i]=p[i].burst;
cout<<endl;
int current_time = 0;
int completed = 0;
while (completed!=p_no)
int id = -1;
int maxbur=10000;
for(i=0;i<p_no;i++)
{
if(p[i].arrival<=current_time && mark[i]==0)
if(burst_remaining[i]<maxbur)
maxbur=burst_remaining[i];
id=i;
if(burst_remaining[i]==maxbur)
if(p[i].arrival<p[id].arrival)
maxbur = burst_remaining[i];
id=i;
if(id!= -1)
{
if(burst_remaining[id]==p[id].burst)
p[id].start_time=current_time;
burst_remaining[id] -= 1;
current_time++;
if(burst_remaining[id]==0)
p[id].completion = current_time;
p[id].tat=p[id].completion - p[id].arrival;
total_waiting=total_waiting+p[id].waiting;
mark[id]=1;
completed++;
}
else
{
current_time++;
avg_waiting=(float) total_waiting/p_no;
cout<<endl;
cout<<endl;
cout<<"process\t"<<"Arrival\t"<<"Burst\t"<<"Start\t"<<"Completion\t"<<"TurnAr
ound\t"<<"Waiting\t"<<endl;
for (i=0;i<p_no;i++)
{
cout<<"P"<<p[i].process_id<<"\t"<<p[i].arrival<<"\t"<<p[i].burst<<"\t"<<p[i].start
_time<<"\t\t"<<p[i].completion<<"\t\t"<<p[i].tat<<"\t\t"<<p[i].waiting<<"\t"<<"\
n"<<endl;
Image:
Shortest Job First (SJF)-Non Preemptive
Code:
#include<bits/stdc++.h>
struct process{
int process_id;
int arrival;
int burst;
int start_time;
int completion;
int tat;
int waiting;
};
int main()
{
int p_no;
float avg_waiting;
int total_waiting = 0;
int mark[10];
memset(mark,0,sizeof(mark));
int i;
cout<<setprecision(2)<<fixed;
cin>>p_no;
cin>>p[i].arrival;
cout<<endl;
cin>>p[i].burst;
p[i].process_id = i+1;
cout<<endl;
int current_time = 0;
int completed = 0;
while (completed!=p_no)
int id = -1;
int maxbur=10000;
for(i=0;i<p_no;i++)
if(p[i].burst<maxbur)
{
maxbur=p[i].burst;
id=i;
if(p[i].burst==maxbur)
if(p[i].arrival<p[id].arrival)
maxbur = p[i].burst;
id=i;
if(id!= -1)
p[id].start_time=current_time;
total_waiting=total_waiting+p[id].waiting;
mark[id]=1;
completed++;
current_time=p[id].completion;
else
{
current_time++;
avg_waiting=(float) total_waiting/p_no;
cout<<endl;
cout<<endl;
cout<<"process\t"<<"Arrival\t"<<"Burst\t"<<"Start\t"<<"Completion\t"<<"TurnAr
ound\t"<<"Waiting\t"<<endl;
for (i=0;i<p_no;i++)
cout<<"P"<<p[i].process_id<<"\t"<<p[i].arrival<<"\t"<<p[i].burst<<"\t"<<p[i].start
_time<<"\t\t"<<p[i].completion<<"\t\t"<<p[i].tat<<"\t\t"<<p[i].waiting<<"\t"<<"\
n"<<endl;
Image:
#include<bits/stdc++.h>
struct process{
int process_id;
int arrival;
int burst;
int start_time;
int completion;
int tat;
int waiting;
int priority;
};
int main()
{
int p_no;
float avg_waiting,avg_tat;
int total_waiting = 0;
int total_tat=0;
int mark[10];
memset(mark,0,sizeof(mark));
int i;
cout<<setprecision(2)<<fixed;
cin>>p_no;
cin>>p[i].arrival;
cout<<endl;
cout<<"Enter Burst Time for process "<<i+1<<" - ";
cin>>p[i].burst;
p[i].process_id = i+1;
cout<<endl;
cin>>p[i].priority;
cout<<endl;
int current_time = 0;
int completed = 0;
while (completed!=p_no)
int id = -1;
int maxprior=10000;
for(i=0;i<p_no;i++)
{
if(p[i].priority<maxprior)
maxprior=p[i].priority;
id=i;
if(p[i].priority==maxprior)
if(p[i].arrival<p[id].arrival)
maxprior = p[i].priority;
id=i;
if(id!= -1)
p[id].start_time=current_time;
p[id].completion = p[id].start_time + p[id].burst;
p[id].tat=p[id].completion - p[id].arrival;
total_waiting=total_waiting+p[id].waiting;
total_tat=total_tat+p[id].tat;
mark[id]=1;
completed++;
current_time=p[id].completion;
else
{
current_time++;
avg_waiting=(float) total_waiting/p_no;
avg_tat=(float) total_tat/p_no;
cout<<endl;
cout<<endl;
cout<<"process\t"<<"Arrival\t"<<"Burst\t"<<"Start\t"<<"Completion\t"<<"TurnAr
ound\t"<<"Waiting\t"<<endl;
for (i=0;i<p_no;i++)
cout<<"P"<<p[i].process_id<<"\t"<<p[i].arrival<<"\t"<<p[i].burst<<"\t"<<p[i].start
_time<<"\t\t"<<p[i].completion<<"\t\t"<<p[i].tat<<"\t\t"<<p[i].waiting<<"\t"<<"\
n"<<endl;
}
Image:
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <string.h>
struct process {
int pid;
int arrival_time;
int burst_time;
int priority;
int start_time;
int completion_time;
int turnaround_time;
int waiting_time;
int response_time;
};
int main() {
int n;
float avg_turnaround_time;
float avg_waiting_time;
float avg_response_time;
float cpu_utilisation;
int total_turnaround_time = 0;
int total_waiting_time = 0;
int total_response_time = 0;
int total_idle_time = 0;
float throughput;
int burst_remaining[100];
int is_completed[100];
memset(is_completed,0,sizeof(is_completed));
cout << setprecision(2) << fixed;
cin>>n;
cin>>p[i].arrival_time;
cin>>p[i].burst_time;
cin>>p[i].priority;
p[i].pid = i+1;
burst_remaining[i] = p[i].burst_time;
cout<<endl;
int current_time = 0;
int completed = 0;
int prev = 0;
while(completed != n) {
int mx = 1000;
mx = p[i].priority;
idx = i;
if(p[i].priority == mx) {
mx = p[i].priority;
idx = i;
if(idx != -1) {
if(burst_remaining[idx] == p[idx].burst_time) {
p[idx].start_time = current_time;
burst_remaining[idx] -= 1;
current_time++;
prev = current_time;
if(burst_remaining[idx] == 0) {
p[idx].completion_time = current_time;
total_turnaround_time += p[idx].turnaround_time;
total_waiting_time += p[idx].waiting_time;
total_response_time += p[idx].response_time;
is_completed[idx] = 1;
completed++;
}
else {
current_time++;
min_arrival_time = min(min_arrival_time,p[i].arrival_time);
max_completion_time = max(max_completion_time,p[i].completion_time);
cout<<"#P\t"<<"AT\t"<<"BT\t"<<"PRI\t"<<"ST\t"<<"CT\t"<<"TAT\t"<<"WT\t"<<"R
T\t"<<"\n"<<endl;
cout<<p[i].pid<<"\t"<<p[i].arrival_time<<"\t"<<p[i].burst_time<<"\t"<<p[i].priorit
y<<"\t"<<p[i].start_time<<"\t"<<p[i].completion_time<<"\t"<<p[i].turnaround_ti
me<<"\t"<<p[i].waiting_time<<"\t"<<p[i].response_time<<"\t"<<"\n"<<endl;
}
Image:
Round Robin
Code:
#include<stdio.h>
#include<conio.h>
void main()
scanf("%d", &NOP);
y = NOP;
printf("\n Enter the Arrival and Burst time of the Process[%d]\n", i+1);
printf(" Arrival time is: \t");
scanf("%d", &at[i]);
scanf("%d", &bt[i]);
temp[i] = bt[i];
scanf("%d", &quant);
printf("\n Process No \t\t Burst Time \t\t TAT \t\t Waiting Time ");
for(sum=0, i = 0; y!=0; )
temp[i] = 0;
count=1;
wt = wt+sum-at[i]-bt[i];
tat = tat+sum-at[i];
count =0;
if(i==NOP-1)
i=0;
else if(at[i+1]<=sum)
i++;
}
else
i=0;
avg_wt = wt * 1.0/NOP;
getch();
Image:
Enter the Arrival and Burst time of the
Process[3] Arrival time is: 3