Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Giới thiệu giải thuật định thời Round-Robin(RR)

2 posters

Go down

Giới thiệu giải thuật định thời Round-Robin(RR) Empty Giới thiệu giải thuật định thời Round-Robin(RR)

Bài gửi  myphuong2707 16/12/2009, 11:56

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;

myphuong2707

Tổng số bài gửi : 29
Join date : 14/05/2009

Về Đầu Trang Go down

Giới thiệu giải thuật định thời Round-Robin(RR) Empty Re: Giới thiệu giải thuật định thời Round-Robin(RR)

Bài gửi  Sang-I83C 18/12/2009, 15:26

sao ma` dài vậy

Sang-I83C

Tổng số bài gửi : 46
Join date : 22/11/2009

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết