- //Shortest job first
- #include<iostream>
- //#include<conio.h>
- using namespace std;
- struct Process{
- int PID;
- int arr_time;
- int burst_time;
- int start_time;
- int completion_time;
- int turnaround_time;
- int response_time ;
- int wait_time;
- };
- class Scheduling{
- int num;
- Process *plist;
- float totalturnar_time;
- float totalresp_time;
- float totalwait_time;
- public :
- void input();
- // void fcfs();
- void output();
- void sort();
- void SJF();
- void sort_bursttime(int,int);
- };
- void Scheduling::sort(){
- for(int i=0;i<=num-1;i++){
- for(int j=0;j<num-i-1;j++){
- if(plist[j].arr_time>plist[j+1].arr_time){
- Process x=plist[j];
- plist[j]=plist[j+1];
- plist[j+1]=x;
- }
- }
- }
- SJF();
- }
- void Scheduling::sort_bursttime(int start,int end){
- for(int i=start;i<=end;i++){
- for(int j=start;j<=end-1;j++){
- if(plist[j].burst_time>plist[j+1].burst_time){
- Process x=plist[j];
- plist[j]=plist[j+1];
- plist[j+1]=x;
- }
- }
- }
- }
- void Scheduling::input(){
- cout<<"Enter the number of processes ";
- cin >>num;
- plist=new struct Process[num];
- for(int i=0;i<num;i++){
- cout<<"Enter the PID P"<<i+1<<" ";
- cin>>plist[i].PID;
- }
- cout<<endl;
- for(int i=0;i<num;i++){
- cout<<"Enter the arrival time for P"<<i+1<<" ";
- cin>>plist[i].arr_time;
- }
- cout<<endl;
- for(int i=0;i<num;i++){
- cout<<"Enter the burst time for P"<<i+1<<" ";
- cin>>plist[i].burst_time;
- }
- }
- /* void Scheduling::fcfs(){
- int current_time =0;
- for(int i=0;i<num;i++){
- if(plist[i].arr_time>current_time)
- current_time=plist[i].arr_time;
- plist[i].start_time=current_time;
- plist[i].completion_time=current_time+plist[i].burst_time;
- plist[i].turnaround_time=plist[i].completion_time-plist[i].arr_time;
- plist[i].response_time=plist[i].start_time-plist[i].arr_time;
- plist[i].wait_time=plist[i].response_time;
- current_time=plist[i].completion_time;
- totalturnar_time=+plist[i].turnaround_time;
- totalresp_time=+plist[i].response_time;
- totalwait_time=+plist[i].wait_time;
- }
- sort();
- }*/
- void Scheduling::SJF()
- {
- int j;
- int start_time;
- int current_time=0;
- for(int i=0;i<=num-1;i++)
- {
- start_time=i;
- for( j=i;j<=num-1;j++)
- {
- if(plist[j].arr_time<=current_time)
- {
- continue;
- }
- else
- {
- break;
- }
- }
- sort_bursttime(i,j-1);
- // current_time=plist[i].arr_time;
- plist[i].start_time=current_time;
- plist[i].completion_time=current_time+plist[i].burst_time;
- plist[i].turnaround_time=plist[i].completion_time-plist[i].arr_time;
- plist[i].response_time=plist[i].start_time-plist[i].arr_time;
- plist[i].wait_time=plist[i].response_time;
- current_time=plist[i].completion_time;
- totalturnar_time=+plist[i].turnaround_time;
- totalresp_time=+plist[i].response_time;
- totalwait_time=+plist[i].wait_time;
- }
- }
- void Scheduling::output(){
- cout<<"Process | PID | Arrivaltime | Bursttime | Starttime | Completiontime | turnaround time | Response time| wait time\n";
- for(int i=0;i<num;i++){
- cout<<"P"<<plist[i].PID<<" "<<"\t"<<"| "<<plist[i].PID<<"\t"<<"| "<<plist[i].arr_time<<"\t"<<" | "<<plist[i].burst_time<<"\t"<<" | "<<plist[i].start_time<<"\t"<<" | "<<plist[i].completion_time<<"\t"<<" | "<<plist[i].turnaround_time<<"\t"<<" | "<<plist[i].response_time<<"\t"<<" | "<<plist[i].wait_time<<endl; }
- cout<<"\nTotal turn around time "<<totalturnar_time<<endl;
- cout<<"\naverage turn around time "<<totalturnar_time/num<<endl;
- cout<<"\nTotal response time "<<totalresp_time<<endl;
- cout<<"\naverage response time "<<totalresp_time/num<<endl;
- cout<<"\nTotal wait time "<<totalwait_time<<endl;
- cout<<"\naverage wait time "<<totalwait_time/num<<endl;
- }
- int main(){
- Scheduling obj;
- obj.input();
- obj.sort();
- // obj.fcfs();
- obj.output();
- // getch();
- return 0;
- }
