Professional Documents
Culture Documents
Lab
Exp. No. 7 Reader-Writer Problem
Code
#include<semaphore.h>
#include<stdio.h>
#include<stdlib.h>
sem_t x,y;
pthread_t tid;
pthread_t writerthreads[100],readerthreads[100];
int readercount;
O SRMIST
21CSC202J- Operating Systems Lab
printf("\nWriter has entered"); Lab
sem_post(&y);
printf("\nWriter is leaving");
}
int main()
{
int n2,i;
printf("Enter the number of readers:");
scanf("%d",&n2);
int n1[n2];
sem_init(&x,0,1);
sem_init(&y,0,1);
for(i=0;i<n2;i++)
{
pthread_create(&writerthreads[i],NULL,reader,NULL);
pthread_create(&readerthreads[i],NULL,writer,NULL);
}
for(i=0;i<n2;i++)
{
pthread_join(writerthreads[i],NULL);
pthread_join(readerthreads[i],NULL);
}
O SRMIST
21CSC202J- Operating Systems Lab
Lab
Exp. No. 8 FCFS and SJF Scheduling
FCFS Scheduling
Code
#include<iostream>
#define MAX_PROCESS 10
using namespace std;
class process
{
public:
int process_num;
int burst_time;
int arrival_time;
int response_time;
int waiting_time;
int turnaround_time;
void input_process(int);
int get_at()
{
return arrival_time;
}
};
void process::input_process(int count)
{
process_num=count+1;
cout<<"\nENTER BURST TIME FOR PROCESS "<<count+1<<" : ";
cin>>burst_time;
cout<<"ENTER ARRIVAL TIME FOR PROCESS "<<count+1<<" : ";
cin>>arrival_time;
}
void calc_wait_tat(process*,int);
void average(process*,int);
void display(process*,int);
int main()
{
process p[MAX_PROCESS],temp;
int num,i,j;
cout<<"ENTER NUMBER OF PROCESSES : ";
cin>>num;
for(i=0;i<num;++i)
p[i].input_process(i);
for(i=0;i<num;++i)
{
O SRMIST
21CSC202J- Operating Systems Lab
for(j=i+1;j<num;++j) Lab
{
if(p[i].get_at()>p[j].get_at())
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
calc_wait_tat(p,num);
display(p,num);
return 0;
}
void calc_wait_tat(process *p,int n)
{
int i;
p[0].response_time=0;
for(i=1;i<n;++i)
{
p[i].response_time=p[i-1].burst_time+p[i-1].response_time;
if(p[i].response_time<p[i].arrival_time)
p[i].response_time=p[i].arrival_time;
}
p[0].waiting_time=0;
for(i=1;i<n;++i)
p[i].waiting_time=p[i].response_time-p[i].arrival_time;
for(i=0;i<n;++i)
p[i].turnaround_time=p[i].waiting_time+p[i].burst_time;
}
void average(process *p,int n)
{
float avg_wt=0,avg_tat=0;
for(int i=0;i<n;++i)
{
avg_wt+=(float)p[i].waiting_time;
avg_tat+=(float)p[i].turnaround_time;
}
avg_wt/=n;
avg_tat/=n;
cout<<"\n\nAVERAGE WAITING TIME : "<<avg_wt;
cout<<"\nAVERAGE TURN AROUND TIME : "<<avg_tat;
}
void display(process *p,int n)
{
cout<<"Processes "<<" Burst time "<<" Arrival time "<<" Waiting time "<<" Turn around
time\n";
for (int i=0;i<n;i++)
{
cout<<"\n "<<p[i].process_num<<"\t\t"<<p[i].burst_time<<"\t\t"<<p[i].arrival_time<<"\t\t
"<<p[i].waiting_time<<"\t\t"<<p[i].turnaround_time;
}
average(p,n);
}
O SRMIST
21CSC202J- Operating Systems Lab
Lab
O SRMIST
21CSC202J- Operating Systems Lab
Lab
Exp. No.9(a) FCFS and SJF Scheduling
SJF Scheduling(Non-Primitive)
DESCRIPTION: The shortest job first (SJF) or shortest job next, is a scheduling
policy that selects the waiting process with the smallest execution time to execute
next. SJN, also known as Shortest Job Next (SJN), can be preemptive or non-
preemptive.
Code 1
#include <iostream>
using namespace std;
int main() {
temp = A[i][0];
A[i][0] = A[index][0];
A[index][0] = temp;
}
A[0][2] = 0;
O SRMIST
21CSC202J- Operating Systems Lab
// Calculation of Waiting Times Lab
for (i = 1; i < n; i++) {
A[i][2] = 0;
for (j = 0; j < i; j++)
A[i][2] += A[j][1];
total += A[i][2];
}
avg_wt = (float)total / n;
total = 0;
cout << "P BT WT TAT" << endl;
avg_tat = (float)total / n;
cout << "Average Waiting Time= " << avg_wt << endl;
cout << "Average Turnaround Time= " << avg_tat << endl;
}
O SRMIST
21CSC202J- Operating Systems Lab
Lab
Exp. No.9(b) FCFS and SJF Scheduling
SJF Scheduling(Primitive)
Code
#include<iostream>
cout<<"enter no of process"<<endl;
cin>>n;
int a[n],b[n],e[n],tat[n],wt[n];
for(i=0;i<n;i++)
{
cout<<"enter arival time "; //input
cin>>a[i];
}
for(i=0;i<n;i++)
{
cout<<"enter brust time "; //input
cin>>b[i];
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(b[i]>b[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
min=a[0];
for(i=0;i<n;i++)
O SRMIST
21CSC202J- Operating Systems Lab
{ Lab
if(min>a[i])
{
min=a[i];
d=i;
}
}
tt=min;
e[d]=tt+b[d];
tt=e[d];
for(i=0;i<n;i++)
{
if(a[i]!=min)
{
e[i]=b[i]+tt;
tt=e[i];
}
}
for(i=0;i<n;i++)
{
tat[i]=e[i]-a[i];
stat=stat+tat[i];
wt[i]=tat[i]-b[i];
swt=swt+wt[i];
}
atat=stat/n;
awt=swt/n;
cout<<"Process Arrival-time(s) Burst-time(s) Waiting-time(s) Turnaround-
time(s)\n";
for(i=0;i<n;i++)
{
cout<<"P"<<i+1<<" "<<a[i]<<" "<<b[i]<<"
"<<wt[i]<<" "<<tat[i]<<endl;
}
O SRMIST
21CSC202J- Operating Systems Lab
Lab
O SRMIST