|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Note: This is an unedited contribution. If this article is inappropriate,
needs attention or copies someone else's work without reference then please
Report This Article
IntroductionRound-robin scheduling algorithm is one of the simplest scheduling algorithms. It is designed especially for time-sharing systems. The ready queue is treated as a circular queue. The algorithm assigns a time slice(also called time quantum) to each process in the ready queue in order, handling all processes without priority. A maximum of one time slice is allocated at once. If the remaining request is less than a time slice, only the remaining request time is allocated. Round-robin scheduling is both simple and easy to implement. It is also starvation-free. The project may be used to find the scheduling order, the average turn-around time and average wait time when round-robin scheduling is applied. About the codeThe code is very simple. The design consists of a class 1.
2.
3.
How the code doesHere is the main part of the code present in the calc() function: 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++)//for each arrived processes incompleted after this scheduling
if(r[k]!=0&&k!=i&&a[k]<sp+time)
if(!(a[k]<=sp))//if they arrived while scheduling this process
w[k]+=sp+time-a[k],t[i]+=sp+time-a[k];
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;
}
}
The code uses for loop which terminates when all processes have completed. HistoryInitially, the project was designed assuming all processes arrive at time. Then the code is much simpler. We need not use variable sp in the above code. Also, the Bibliography2. Silberschatz, Galvin and Gagne; Operating System Concepts; Sixth Edition; Wiley
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||