Giới thiệu giải thuật định thời Round-Robin(RR)
2 posters
Trang 1 trong tổng số 1 trang
Giới thiệu giải thuật định thời Round-Robin(RR)
Yêu cầu: Hiểu biết C++,C#,Kiến trúc máy tính .
Giải thuật :Nắm rõ RR
Hiện thực mô phỏng giải thuật định thời Round-Robin
Ta xậy dựng chương trình cho giải thuật RR
#include "roundrobin.h"//khai bao de tao file .h khi muốn sử dụng
#include<iomanip>//khai bao de su dung ham khoang cach
#include<iostream>
using namespace std;
roundrobin::roundrobin(void)
{
rq=w=t=NULL;
}
roundrobin::~roundrobin(void)
{
if(rq!=NULL)
{
delete[] rq;
delete[] w;
delete[] t;
delete[] a;
}
}
int roundrobin::read()//doc du lieu tu nguoi su dung
{
int i;
cout<<"Enter number of processes:";// Nhap vao so luong process
cin>>n;
if(rq!=NULL)
{
delete[] rq;
delete[] w;
delete[] t;
}
try
{
rq=new int[n];
w=new int[n];
t=new int[n];
a=new int[n];
}
catch(bad_alloc &ba)
{
cerr<<ba.what()<<endl;
exit(1);
}
cout<<"Enter arrival times:\n";//Nhap vao thoi diem vao cua cac process
for(i=0;i<n;i++)
{
cin>>a[i];
}
cout<<"Enter request times:\n";
for(i=0;i<n;i++)
{
cin>>rq[i];
w[i]=t[i]=0;
}
cout<<"Enter time quantum:";//khai bao quan tum time de dong bo hoa tien trinh
cin>>q;
return 1;
}
void roundrobin::calc()//tinh toan turn-around and wait times of all processes and the ordering
{
int j=0;
int time;
int k;
int i;
int *r;//remaining times
try
{
r=new int[n];
}
catch(bad_alloc &ba)
{
cerr<<ba.what()<<endl;
exit(1);
}
for(i=0;i<n;i++) r[i]=rq[i];
bool f=false;//flag to indicate whether any process was scheduled as i changed from 0 to n-1 in the next for loop
int sp=0;//time spent
for(i=0;j<n;i=(i+1)%n)//while there are uncompleted processes
{
if(r[i]>0&&sp>=a[i])//find the next uncompleted process which has already or just arrived
{
f=true;
if(r[i]<=q)//if the process requests for time less than the quantum
time=r[i];//time to be alloted in this turn is the complete requested time
else time=q;//else, it is the quantum time
//schedule the process
t[i]+=time,r[i]-=time,order.push_back(i+1);
if(r[i]==0) j++;//if the process has got completed, increment j
for(k=0;k<n;k++)
if(r[k]!=0&&k!=i&&a[k]<sp+time)//for all other arrived processes incompleted after scheduling this process
if(!(a[k]<=sp))//if they arrived while scheduling this process
w[k]+=sp+time-a[k],t[i]+=sp+time-a[k];//account for the time they spent waiting while the process was being scheduled
else
w[k]+=time,t[k]+=time;//add time to their wait times and turn-around times
sp+=time;
continue;
}
if(i==n-1)
{
if(!f)
//now there are no more arrived processes to be scheduled
//so change sp to the arrival time of next arriving process
{
int it;
int diff=0;//diff between present time spent and arrivaltime of next arriving process
for(it=0;it<n;it++)
if(sp<a[it])//if process has'nt yet arrived
{
if(diff==0) diff=a[it]-sp;
else if(diff>a[it]-sp) diff=a[it]-sp;
}
sp+=diff;
}
f=false;
}
}
delete[] r;
}
void roundrobin::display()
{
int i;
float tav=0;//average turn-around time
float wav=0;//average wait time
for(i=0;i<n;i++)
tav+=t[i],wav+=w[i];
tav/=n,wav/=n;
cout<<"Scheduling order:\n";
list<int>::iterator oi;
for(oi=order.begin();oi!=order.end();oi++)
cout<<*oi<<"\t";
cout<<"\nAverage turn-around time = "<<tav<<endl<<"Average wait time = "<<wav<<endl;
}
Sau đó ta xây dựng lớp roundrobin: chèn vào file code roundrobin.h
#pragma once
#include<list>
using namespace std;
class roundrobin//class representing round robin scheduling
{
int *rq;//request times
int n;//number of processes
int q;//time quantum
int *w;//wait times
int *t;//turn-around times
int *a;//arrival times
list<int> order;
public:
roundrobin(void);
~roundrobin(void);
int read();//read input from the user
void calc();//to calculate turn-around and wait times of all processes and the ordering
void display();
};
Cuối cùng chèn vào hàm main debug vài cái và okie:
#include"roundrobin.h"
#include<iostream>
using namespace std;
#include<conio.h>
int main()
{
roundrobin r;
r.read();
r.calc();
r.display();
cout<<"Press any key to exit...";
_getch();
}
Lưu ý: Ta xóa bớt vài hàm khai báo thư viện trùng của các phần thêm vào như trên.
Chú ý khai báo
#include<iostream>
using namespace std;
Giải thuật :Nắm rõ RR
Hiện thực mô phỏng giải thuật định thời Round-Robin
Ta xậy dựng chương trình cho giải thuật RR
#include "roundrobin.h"//khai bao de tao file .h khi muốn sử dụng
#include<iomanip>//khai bao de su dung ham khoang cach
#include<iostream>
using namespace std;
roundrobin::roundrobin(void)
{
rq=w=t=NULL;
}
roundrobin::~roundrobin(void)
{
if(rq!=NULL)
{
delete[] rq;
delete[] w;
delete[] t;
delete[] a;
}
}
int roundrobin::read()//doc du lieu tu nguoi su dung
{
int i;
cout<<"Enter number of processes:";// Nhap vao so luong process
cin>>n;
if(rq!=NULL)
{
delete[] rq;
delete[] w;
delete[] t;
}
try
{
rq=new int[n];
w=new int[n];
t=new int[n];
a=new int[n];
}
catch(bad_alloc &ba)
{
cerr<<ba.what()<<endl;
exit(1);
}
cout<<"Enter arrival times:\n";//Nhap vao thoi diem vao cua cac process
for(i=0;i<n;i++)
{
cin>>a[i];
}
cout<<"Enter request times:\n";
for(i=0;i<n;i++)
{
cin>>rq[i];
w[i]=t[i]=0;
}
cout<<"Enter time quantum:";//khai bao quan tum time de dong bo hoa tien trinh
cin>>q;
return 1;
}
void roundrobin::calc()//tinh toan turn-around and wait times of all processes and the ordering
{
int j=0;
int time;
int k;
int i;
int *r;//remaining times
try
{
r=new int[n];
}
catch(bad_alloc &ba)
{
cerr<<ba.what()<<endl;
exit(1);
}
for(i=0;i<n;i++) r[i]=rq[i];
bool f=false;//flag to indicate whether any process was scheduled as i changed from 0 to n-1 in the next for loop
int sp=0;//time spent
for(i=0;j<n;i=(i+1)%n)//while there are uncompleted processes
{
if(r[i]>0&&sp>=a[i])//find the next uncompleted process which has already or just arrived
{
f=true;
if(r[i]<=q)//if the process requests for time less than the quantum
time=r[i];//time to be alloted in this turn is the complete requested time
else time=q;//else, it is the quantum time
//schedule the process
t[i]+=time,r[i]-=time,order.push_back(i+1);
if(r[i]==0) j++;//if the process has got completed, increment j
for(k=0;k<n;k++)
if(r[k]!=0&&k!=i&&a[k]<sp+time)//for all other arrived processes incompleted after scheduling this process
if(!(a[k]<=sp))//if they arrived while scheduling this process
w[k]+=sp+time-a[k],t[i]+=sp+time-a[k];//account for the time they spent waiting while the process was being scheduled
else
w[k]+=time,t[k]+=time;//add time to their wait times and turn-around times
sp+=time;
continue;
}
if(i==n-1)
{
if(!f)
//now there are no more arrived processes to be scheduled
//so change sp to the arrival time of next arriving process
{
int it;
int diff=0;//diff between present time spent and arrivaltime of next arriving process
for(it=0;it<n;it++)
if(sp<a[it])//if process has'nt yet arrived
{
if(diff==0) diff=a[it]-sp;
else if(diff>a[it]-sp) diff=a[it]-sp;
}
sp+=diff;
}
f=false;
}
}
delete[] r;
}
void roundrobin::display()
{
int i;
float tav=0;//average turn-around time
float wav=0;//average wait time
for(i=0;i<n;i++)
tav+=t[i],wav+=w[i];
tav/=n,wav/=n;
cout<<"Scheduling order:\n";
list<int>::iterator oi;
for(oi=order.begin();oi!=order.end();oi++)
cout<<*oi<<"\t";
cout<<"\nAverage turn-around time = "<<tav<<endl<<"Average wait time = "<<wav<<endl;
}
Sau đó ta xây dựng lớp roundrobin: chèn vào file code roundrobin.h
#pragma once
#include<list>
using namespace std;
class roundrobin//class representing round robin scheduling
{
int *rq;//request times
int n;//number of processes
int q;//time quantum
int *w;//wait times
int *t;//turn-around times
int *a;//arrival times
list<int> order;
public:
roundrobin(void);
~roundrobin(void);
int read();//read input from the user
void calc();//to calculate turn-around and wait times of all processes and the ordering
void display();
};
Cuối cùng chèn vào hàm main debug vài cái và okie:
#include"roundrobin.h"
#include<iostream>
using namespace std;
#include<conio.h>
int main()
{
roundrobin r;
r.read();
r.calc();
r.display();
cout<<"Press any key to exit...";
_getch();
}
Lưu ý: Ta xóa bớt vài hàm khai báo thư viện trùng của các phần thêm vào như trên.
Chú ý khai báo
#include<iostream>
using namespace std;
myphuong2707- Tổng số bài gửi : 29
Join date : 14/05/2009
Re: Giới thiệu giải thuật định thời Round-Robin(RR)
sao ma` dài vậy
Sang-I83C- Tổng số bài gửi : 46
Join date : 22/11/2009
Similar topics
» bài 2:Dùng thuật giải Round-Robin mình không hiểu lắm bài giai thuat Round-Robin nên mình làm thế không biết đúng hay sai bạn nào hiêu rõ xin giúp minh nói rõ hơn cho minh hiểu
» Video hướng dẫn giải bài tập thuật giải Round Robin - sưu tầm của khóa trước
» Thảo luận Bài 6
» Thảo luận Bài 6: Bài tập dùng RRS (Round-Robin)
» Giải bài tập điều phối CPU dùng thuật giải Round-Robin
» Video hướng dẫn giải bài tập thuật giải Round Robin - sưu tầm của khóa trước
» Thảo luận Bài 6
» Thảo luận Bài 6: Bài tập dùng RRS (Round-Robin)
» Giải bài tập điều phối CPU dùng thuật giải Round-Robin
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết