Apvalus Robinas yra procesoriaus planavimo algoritmas, kuriame kiekvienam procesui cikliškai priskiriamas fiksuotas laiko tarpas. Tai prevencinė CPU planavimo algoritmo „Pirmas atėjai, pirmas aptarnavimas“ versija.
pavasario batų architektūra
- Round Robin CPU algoritmas paprastai orientuojasi į laiko pasidalijimo techniką.
- Laikotarpis, kurį procesui arba užduočiai leidžiama vykdyti prevenciniu metodu, vadinamas laiku kvantinis .
- Kiekvienam paruoštoje eilėje esančiam procesui ar darbui priskiriamas CPU tam laiko kvantui, jei per tą laiką procesas bus baigtas, procesas galas kitu atveju procesas grįš į laukimo stalas ir laukite kito eilės, kad užbaigtumėte vykdymą.
„Round Robin“ procesoriaus planavimo algoritmo charakteristikos
- Tai paprasta, lengvai įgyvendinama ir nebadaujanti, nes visi procesai gauna nemažą procesoriaus dalį.
- Viena iš dažniausiai naudojamų technikų CPU planavimas yra šerdis.
- tai yra prevencinis nes procesai CPU priskiriami tik fiksuotam laiko tarpui.
- Jo trūkumas yra didesnis konteksto perjungimas.
„Round Robin“ procesoriaus planavimo algoritmo privalumai
- Tai yra teisinga, nes kiekvienam procesui tenka vienoda procesoriaus dalis.
- Naujai sukurtas procesas pridedamas prie parengtų eilės pabaigos.
- Apvalaus darbo planuotojas paprastai naudoja laiko pasidalijimą, kiekvienam darbui suteikdamas laiko tarpą arba skaičių.
- Atliekant apvalų tvarkaraštį, tam tikras laiko kiekis skiriamas skirtingiems darbams.
- Kiekvienas procesas turi galimybę perplanuoti po tam tikro kvantinio laiko šiame tvarkaraštyje.
„Round Robin“ procesoriaus planavimo algoritmo trūkumai
- Yra ilgesnis laukimo ir atsakymo laikas.
- Yra mažas pralaidumas.
- Yra kontekstiniai jungikliai.
- Atrodo, kad Ganto diagrama yra per didelė (jei kvantinis laikas yra mažesnis planavimui. Pavyzdžiui: 1 ms dideliam planavimui).
- Daug laiko reikalaujantis planavimas mažiems kvantams.
Darbo pavyzdžiai Apvalus Robinas Planavimo algoritmas
1 pavyzdys: Apsvarstykite toliau pateiktą keturių procesų atvykimo laiko ir serijos trukmės lentelę P1, P2, P3 ir P4 ir duota Laiko kvantas = 2
| Procesas | Burst Time | Atvykimo laikas |
|---|---|---|
| P1 | 5 ms | 0 ms |
| P2 | 4 ms | 1 ms |
| P3 | 2 ms | 2 ms |
| P4 | 1 ms | 4 ms |
„Round Robin“ procesoriaus planavimo algoritmas veiks pagal toliau nurodytus veiksmus:
Laike = 0,
- Vykdymas prasideda procesu P1, kurio serijos laikas yra 5.
- Čia kiekvienas procesas vykdomas 2 milisekundes ( Laiko kvantinis periodas ). P2 ir P3 vis dar laukia eilėje.
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 0-2ms | P1 | 0 ms | P2, P3 | P1 | 2 ms | 5 ms | 3 ms |
Laiku = 2,
- Procesai P1 ir P3 patenka į parengties eilę, o P2 pradeda vykdyti TQ laikotarpį
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 2-4ms | P1 | 0 ms | P3, P1 | P2 | 0 ms | 3 ms | 3 ms |
| P2 | 1 ms | 2 ms | 4ms | 2 ms |
Laiku = 4,
- Procesas P4 patenka į paruošta eilė ,
- Tada P3 vykdo už TQ laikotarpį.
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 4-6ms | P1 | 0 ms | P1, P4, P2 | P3 | 0 ms | 3 ms | 3 ms |
| P2 | 1 ms | 0 ms | 2 ms | 2 ms | |||
| P3 | 2 ms | 2 ms | 2 ms | 0 ms |
Laiku = 6,
- Procesas P3 baigia vykdyti
- Procesas P1 pradedamas vykdyti TQ laikotarpis, kaip ir kitas b.
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 6-8ms | P1 | 0 ms | P4, P2 | P1 | 2 ms | 3 ms | 1 ms |
| P2 | 1 ms | 0 ms | 2 ms | 2 ms |
Laiku = 8,
- Procesas P4 pradedamas vykdyti, jis nebus vykdomas Laikas Kvantinis periodas nes jo pliūpsnio laikas = 1
- Taigi jis veiks tik 1 ms.
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 8-9ms | P1 | 0 ms | P2, P1 | P4 | 0 ms | 3 ms | 1 ms |
| P2 | 1 ms | 0 ms | 2 ms | 2 ms | |||
| P4 | 4ms | 1 ms | 1 ms | 0 ms |
Laiku = 9,
- Procesas P4 baigia vykdyti
- Procesas P2 pradedamas vykdyti TQ laikotarpiu, kaip ir toliau paruošta eilė
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 9-11ms | P1 | 0 ms | P1 | P2 | 0 ms | 3 ms | 1 ms |
| P2 | 1 ms | 2 ms | 2 ms | 0 ms |
Laiku = 11,
- Procesas P2 baigia vykdyti.
- Procesas P1 pradedamas vykdyti, jis bus vykdomas tik 1 ms
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 11-12ms | P1 | 0 ms | P1 | 1 ms | 1 ms | 0 ms |
Laiku = 12,
- Procesas P1 baigia vykdyti.
- Bendras procesų vykdymas bus toks, kaip parodyta žemiau:
| Laiko atvejis | Procesas | Atvykimo laikas | Paruošta eilė | Bėgimo eilė | Vykdymo laikas | Pradinis serijos laikas | Likęs sprogimas Laikas |
|---|---|---|---|---|---|---|---|
| 0-2ms | P1 | 0 ms | P2, P3 | P1 | 2 ms | 5 ms | 3 ms |
| 2-4ms | P1 | 0 ms | P3, P1 | P2 | 0 ms | 3 ms | 3 ms |
| P2 | 1 ms | 2 ms | 4ms | 2 ms | |||
| 4-6ms | P1 | 0 ms | P1, P4, P2 | P3 | 0 ms | 3 ms | 3 ms |
| P2 | 1 ms | 0 ms | 2 ms | 2 ms | |||
| P3 | 2 ms | 2 ms | 2 ms | 0 ms | |||
| 6-8ms | P1 | 0 ms | P4, P2 | P1 | 2 ms | 3 ms | 1 ms |
| P2 | 1 ms | 0 ms | 2 ms | 2 ms | |||
| 8-9ms | P1 | 0 ms | P2, P1 | P4 | 0 ms | 3 ms | 1 ms |
| P2 | 1 ms | 0 ms | 2 ms | 2 ms | |||
| P4 | 4ms | 1 ms | 1 ms | 0 ms | |||
| 9-11ms | P1 | 0 ms | P1 | P2 | 0 ms | 3 ms | 1 ms |
| P2 | 1 ms | 2 ms | 2 ms | 0 ms | |||
| 11-12ms | P1 | 0 ms | P1 | 1 ms | 1 ms | 0 ms |
Ganto diagramos bus taip:

Ganto diagrama, skirta „Round Robin“ planavimo algoritmui
Kaip apskaičiuoti žemiau nurodytus „Round Robin“ laikus naudojant programą?
- Užbaigimo laikas: Laikas, kada procesas baigiamas vykdyti.
- Apsisukimo laikas: Laikas Skirtumas tarp užbaigimo laiko ir atvykimo laiko. Apsisukimo laikas = užbaigimo laikas – atvykimo laikas
- Laukimo laikas (W.T): Laikas Skirtumas tarp apsisukimo laiko ir serijos laiko.
Laukimo laikas = apsisukimo laikas – serijos laikas
Dabar paskaičiuokime vidurkį laukimo laiko ir apsisukti laikas:
| Procesai | AT | BT | KT | TAT | WT |
|---|---|---|---|---|---|
| P1 | 0 | 5 | 12 | 12-0 = 12 | 12-5 = 7 |
| P2 | 1 | 4 | vienuolika | 11-1 = 10 | 10-4 = 6 |
| P3 | 2 | 2 | 6 | 6-2 = 4 | 4-2 = 2 |
| P4 | 4 | 1 | 9 | 9-4 = 5 | 5-1 = 4 |
Dabar
- Vidutinis apsisukimo laikas = (12 + 10 + 4 + 5)/4 = 31/4 = 7,7
- Vidutinis laukimo laikas = (7 + 6 + 2 + 4)/4 = 19/4 = 4,7
2 pavyzdys: Apsvarstykite toliau pateiktą trijų procesų P1, P2 ir P3 atvykimo laiko ir serijos trukmės lentelę Laiko kvantas = 2
| Procesas | Burst Time | Atvykimo laikas |
|---|---|---|
| P1 | 10 ms | 0 ms |
| P2 | 5 ms | 0 ms |
| P3 | 8 ms | 0 ms |
Panašiai, Ganto diagramos šiam pavyzdžiui:

Ganto diagrama, pavyzdžiui, 2
Dabar paskaičiuokime vidurkį laukimo laiko ir apsisukti laikas:
| Procesai | AT | BT | KT | TAT | WT |
|---|---|---|---|---|---|
| P1 | 0 | 10 | 23 | 23-0 = 23 | 23-10 = 13 |
| P2 | 0 | 5 | penkiolika | 15-0 = 15 | 15-5 = 10 |
| P3 | 0 | 8 | dvidešimt vienas | 21-0 = 21 | 21-8 = 13 |
Bendras apsisukimo laikas = 59 ms
Taigi, Vidutinis apsisukimo laikas = 59/3 = 19,667 msIr bendras laukimo laikas = 36 ms
Taigi, Vidutinis laukimo laikas = 36/3 = 12,00 ms
Programa „Round Robin“ planavimui, kai atvykimo laikas yra 0 visiems procesams
Veiksmai, skirti rasti visų procesų laukimo laiką
- Sukurkite masyvą rem_bt[] stebėti likusį procesų eigos laiką. Šis masyvas iš pradžių yra bt[] kopija (burst times masyvas)
- Sukurkite kitą masyvą wt[] saugoti procesų laukimo laikus. Inicijuoti šį masyvą kaip 0.
- Inicijuojimo laikas: t = 0
- Pereikite visus procesus, kol jie nebaigti. Sekite už aš procesas, jei jis dar nepadarytas.
- Jei rem_bt[i]> kvantinis
- t = t + kvantas
- rem_bt[i] -= suma;
- Else // Paskutinis šio proceso ciklas
- t = t + rem_bt[i];
- wt[i] = t – bt[i]
- rem_bt[i] = 0; // Šis procesas baigėsi
Kai turėsime laukimo laiką, proceso apsisukimo laiką tat[i] galime apskaičiuoti kaip laukimo ir serijos laikų sumą, t.y. wt[i] + bt[i].
Žemiau pateikiamas aukščiau aprašytų veiksmų įgyvendinimas.
C++
// C++ program for implementation of RR scheduling> #include> using> namespace> std;> // Function to find the waiting time for all> // processes> void> findWaitingTime(>int> processes[],>int> n,> >int> bt[],>int> wt[],>int> quantum)> {> >// Make a copy of burst times bt[] to store remaining> >// burst times.> >int> rem_bt[n];> >for> (>int> i = 0 ; i rem_bt[i] = bt[i]; int t = 0; // Current time // Keep traversing processes in round robin manner // until all of them are not done. while (1) { bool done = true; // Traverse all processes one by one repeatedly for (int i = 0 ; i { // If burst time of a process is greater than 0 // then only need to process further if (rem_bt[i]>0) { padaryta = klaidinga; // Yra laukiantis procesas if (rem_bt[i]> quantum) { // Padidinti t reikšmę t.y. parodo // kiek laiko buvo apdorotas procesas t += kvantas; // Sumažinti dabartinio proceso burst_time // kvantu rem_bt[i] -= quantum; } // Jei serijos laikas yra mažesnis arba lygus // kvantui. Paskutinis šio proceso ciklas else { // Padidinkite t reikšmę t.y. parodo // kiek laiko procesas buvo apdorotas t = t + rem_bt[i]; // Laukimo laikas yra dabartinis laikas minus laikas // naudojamas šiame procese wt[i] = t - bt[i]; // Kai procesas bus visiškai įvykdytas, // padarykite likusį serijos laiką = 0 rem_bt[i] = 0; } } } // Jei visi procesai atlikti if (done == true) break; } } // Funkcija apsisukimo laikui apskaičiuoti void findTurnAroundTime(int procesai[], int n, int bt[], int wt[], int tat[]) { // apyvartos laiko apskaičiavimas pridedant // bt[i] + wt[i] for (int i = 0; i tat[i] = bt[i] + wt[i]; } // Funkcija vidutiniam laikui apskaičiuoti void findavgTime(int process[], int n, int bt[ ], int quantum) { int wt[n], tat[n], total_wt = 0, total_tat = 0 // Funkcija, skirta rasti visų procesų laukimo laiką findWaitingTime(proceses, n, bt, wt, quantum); Funkcija visų procesų apsisukimo laikui rasti findTurnAroundTime(proceses, n, bt, wt, tat // Rodyti procesus kartu su visomis detalėmis cout).<< 'PN '<< ' BT ' << ' WT ' << ' TAT
'; // Calculate total waiting time and total turn // around time for (int i=0; i { total_wt = total_wt + wt[i]; total_tat = total_tat + tat[i]; cout << ' ' << i+1 << ' ' << bt[i] <<' ' << wt[i] <<' ' << tat[i] < } cout << 'Average waiting time = ' << (float)total_wt / (float)n; cout << '
Average turn around time = ' << (float)total_tat / (float)n; } // Driver code int main() { // process id's int processes[] = { 1, 2, 3}; int n = sizeof processes / sizeof processes[0]; // Burst time of all processes int burst_time[] = {10, 5, 8}; // Time quantum int quantum = 2; findavgTime(processes, n, burst_time, quantum); return 0; }> |
>
>
Java
java sąrašas
// Java program for implementation of RR scheduling> public> class> GFG> {> >// Method to find the waiting time for all> >// processes> >static> void> findWaitingTime(>int> processes[],>int> n,> >int> bt[],>int> wt[],>int> quantum)> >{> >// Make a copy of burst times bt[] to store remaining> >// burst times.> >int> rem_bt[] =>new> int>[n];> >for> (>int> i =>0> ; i rem_bt[i] = bt[i]; int t = 0; // Current time // Keep traversing processes in round robin manner // until all of them are not done. while(true) { boolean done = true; // Traverse all processes one by one repeatedly for (int i = 0 ; i { // If burst time of a process is greater than 0 // then only need to process further if (rem_bt[i]>0) { padaryta = klaidinga; // Yra laukiantis procesas if (rem_bt[i]> quantum) { // Padidinti t reikšmę t.y. parodo // kiek laiko buvo apdorotas procesas t += kvantas; // Sumažinti dabartinio proceso burst_time // kvantu rem_bt[i] -= quantum; } // Jei serijos laikas yra mažesnis arba lygus // kvantui. Paskutinis šio proceso ciklas else { // Padidinkite t reikšmę t.y. parodo // kiek laiko procesas buvo apdorotas t = t + rem_bt[i]; // Laukimo laikas yra dabartinis laikas minus laikas // naudojamas šiame procese wt[i] = t - bt[i]; // Kai procesas bus visiškai įvykdytas, // padarykite likusį serijos laiką = 0 rem_bt[i] = 0; } } } // Jei visi procesai atlikti if (done == true) break; } } // Apsukimo laiko skaičiavimo metodas statinis void findTurnAroundTime(int procesai[], int n, int bt[], int wt[], int tat[]) { // apyvartos laiko apskaičiavimas pridedant // bt[i ] + wt[i] for (int i = 0; i tat[i] = bt[i] + wt[i]; } // Vidutinio laiko statinio void findavgTime(int process[], int n, int) skaičiavimo metodas bt[], int quantum) { int wt[] = new int[n], tat[] = new int[n] int total_wt = 0, total_tat = 0 // Funkcija visų procesų laukimo laikui rasti findWaitingTime(; procesai, n, bt, wt, kvantas // Funkcija visų procesų apsisukimo laikui rasti findTurnAroundTime(proceses, n, bt, wt, tat // Rodyti procesus kartu su visomis detalėmis System.out.println); 'PN ' + ' B ' + ' WT ' + ' TAT' // Apskaičiuokite bendrą laukimo laiką ir bendrą apsisukimo laiką // (int i=0; i { total_wt = total_wt +); wt[i] = total_tat + tat[i] System.out.println(' ' + (i+1) + ' ' + bt[i] +' ; ' + wt[i] +' ' + tat[i]); } System.out.println('Vidutinis laukimo laikas = ' + (float)total_wt / (float)n); System.out.println('Vidutinis apsisukimo laikas = ' + (float)total_tat / (float)n); } // Tvarkyklės metodas public static void main(String[] args) { // proceso ID's int procesai[] = { 1, 2, 3}; int n = procesai.ilgis; // Visų procesų serijos laikas int burst_time[] = {10, 5, 8}; // Laiko kvantas int kvantas = 2; findavgTime(procesai, n, serijos_laikas, kvantas); } }>> |
>
# Python3 program for implementation of># RR scheduling># Function to find the waiting time># for all processes>def>findWaitingTime(processes, n, bt,>>wt, quantum):>>rem_bt>=>[>0>]>*>n>># Copy the burst time into rt[]>>for>i>in>range>(n):>>rem_bt[i]>=>bt[i]>>t>=>0># Current time>># Keep traversing processes in round>># robin manner until all of them are>># not done.>>while>(>1>):>>done>=>True>># Traverse all processes one by>># one repeatedly>>for>i>in>range>(n):>>># If burst time of a process is greater>># than 0 then only need to process further>>if>(rem_bt[i]>>>) :> >done>=>False># There is a pending process>>>if>(rem_bt[i]>kvantinis) :>>># Increase the value of t i.e. shows>># how much time a process has been processed>>t>+>=>quantum>># Decrease the burst_time of current>># process by quantum>>rem_bt[i]>->=>quantum>>># If burst time is smaller than or equal>># to quantum. Last cycle for this process>>else>:>>># Increase the value of t i.e. shows>># how much time a process has been processed>>t>=>t>+>rem_bt[i]>># Waiting time is current time minus>># time used by this process>>wt[i]>=>t>->bt[i]>># As the process gets fully executed>># make its remaining burst time = 0>>rem_bt[i]>=>0>>># If all processes are done>>if>(done>=>=>True>):>>break>># Function to calculate turn around time>def>findTurnAroundTime(processes, n, bt, wt, tat):>>># Calculating turnaround time>>for>i>in>range>(n):>>tat[i]>=>bt[i]>+>wt[i]># Function to calculate average waiting># and turn-around times.>def>findavgTime(processes, n, bt, quantum):>>wt>=>[>0>]>*>n>>tat>=>[>0>]>*>n>># Function to find waiting time>># of all processes>>findWaitingTime(processes, n, bt,>>wt, quantum)>># Function to find turn around time>># for all processes>>findTurnAroundTime(processes, n, bt,>>wt, tat)>># Display processes along with all details>>print>(>'Processes Burst Time Waiting'>,>>'Time Turn-Around Time'>)>>total_wt>=>0>>total_tat>=>0>>for>i>in>range>(n):>>total_wt>=>total_wt>+>wt[i]>>total_tat>=>total_tat>+>tat[i]>>print>(>' '>, i>+>1>,>' '>, bt[i],>>' '>, wt[i],>' '>, tat[i])>>print>(>' Average waiting time = %.5f '>%>(total_wt>/>n) )>>print>(>'Average turn around time = %.5f '>%>(total_tat>/>n))>># Driver code>if>__name__>=>=>'__main__'>:>>># Process id's>>proc>=>[>1>,>2>,>3>]>>n>=>3>># Burst time of all processes>>burst_time>=>[>10>,>5>,>8>]>># Time quantum>>quantum>=>2>;>>findavgTime(proc, n, burst_time, quantum)># This code is contributed by># Shubham Singh(SHUBHAMSINGH10)>np.nulis>>C#
// C# program for implementation of RR>// scheduling>using>System;>public>class>GFG {>>>// Method to find the waiting time>>// for all processes>>static>void>findWaitingTime(>int>[]processes,>>int>n,>int>[]bt,>int>[]wt,>int>quantum)>>{>>>// Make a copy of burst times bt[] to>>// store remaining burst times.>>int>[]rem_bt =>new>int>[n];>>>for>(>int>i = 0 ; i rem_bt[i] = bt[i]; int t = 0; // Current time // Keep traversing processes in round // robin manner until all of them are // not done. while(true) { bool done = true; // Traverse all processes one by // one repeatedly for (int i = 0 ; i { // If burst time of a process // is greater than 0 then only // need to process further if (rem_bt[i]>0) { // Yra laukiamas procesas, atliktas = false; if (rem_bt[i]> quantum) { // Padidinti t reikšmę t.y. // rodo, kiek laiko procesas buvo apdorotas // t += kvantas; // Sumažinti // dabartinio proceso burst_time quantum rem_bt[i] -= quantum; } // Jei serijos laikas yra mažesnis nei // arba lygus kvantiniam. Paskutinis ciklas // šiam procesui else { // Padidinkite t reikšmę t.y. // rodo, kiek laiko procesas buvo apdorotas // t = t + rem_bt[i]; // Laukimo laikas yra dabartinis // laikas minus laikas, naudojamas // šiame procese wt[i] = t - bt[i]; // Procesui visiškai pasibaigus // padarykite likusį // serijos laiką = 0 rem_bt[i] = 0; } } } // Jei visi procesai atlikti if (done == true) break; } } // Apsisukimo laiko skaičiavimo metodas statinis void findTurnAroundTime(int []proceses, int n, int []bt, int []wt, int []tat) { // apyvartos laiko apskaičiavimas pridedant // bt[i ] + wt[i] for (int i = 0; i tat[i] = bt[i] + wt[i]; } // Vidutinio laiko statinio void findavgTime(int []processes, int n, int) skaičiavimo metodas []bt, int quantum) { int []wt = naujas int[n]; int total_wt = 0, total_tat = 0 // visų laukimo laikas; procesai findWaitingTime(proceses, n, bt, wt, quantum) // Funkcija, skirta rasti apsisukimo laiką // visiems procesams findTurnAroundTime(proceses, n, bt, wt, tat // Rodyti procesus kartu su // visa informacija); Console.WriteLine('Procesai ' + ' Burst time ' + ' Laukimo laikas ' + ' Apsisukimo laikas' // Apskaičiuokite bendrą laukimo laiką ir bendrą apsisukimo laiką // (int i = 0 i { total_wt = total_tat + tat[i]. WriteLine(' ' + (i+1) + ' t' + bt[i; ] + ' ' + wt[i] +' ' + tat[i]); } Console.WriteLine('Vidutinis laukimo laikas = ' + (float)total_wt / (float)n); Console.Write('Vidutinis apsisukimo laikas = ' + (float)total_tat / (float)n); } // Tvarkyklės metodas public static void Main() { // proceso ID's int []processes = { 1, 2, 3}; int n = procesai.Ilgis; // Visų procesų serijos laikas int []burst_time = {10, 5, 8}; // Laiko kvantas int kvantas = 2; findavgTime(procesai, n, serijos_laikas, kvantas); } } // Šį kodą sukūrė nitin mittal.>>>
>>// JavaScript program for implementation of RR scheduling>>// Function to find the waiting time for all>>// processes>>const findWaitingTime = (processes, n, bt, wt, quantum) =>{>>// Make a copy of burst times bt[] to store remaining>>// burst times.>>let rem_bt =>new>Array(n).fill(0);>>for>(let i = 0; i rem_bt[i] = bt[i]; let t = 0; // Current time // Keep traversing processes in round robin manner // until all of them are not done. while (1) { let done = true; // Traverse all processes one by one repeatedly for (let i = 0; i // If burst time of a process is greater than 0 // then only need to process further if (rem_bt[i]>0) { padaryta = klaidinga; // Yra laukiantis procesas if (rem_bt[i]> quantum) { // Padidinti t reikšmę t.y. parodo // kiek laiko buvo apdorotas procesas t += kvantas; // Sumažinti dabartinio proceso burst_time // kvantu rem_bt[i] -= quantum; } // Jei serijos laikas yra mažesnis arba lygus // kvantui. Paskutinis šio proceso ciklas else { // Padidinkite t reikšmę t.y. parodo // kiek laiko procesas buvo apdorotas t = t + rem_bt[i]; // Laukimo laikas yra dabartinis laikas minus laikas // naudojamas šiame procese wt[i] = t - bt[i]; // Kai procesas bus visiškai įvykdytas, // padarykite likusį serijos laiką = 0 rem_bt[i] = 0; } } } // Jei visi procesai atlikti if (done == true) break; } } // Funkcija apsisukimo laikui apskaičiuoti const findTurnAroundTime = (procesai, n, bt, wt, tat) => { // apyvartos laiko apskaičiavimas pridedant // bt[i] + wt[i] for (tegul i = 0; i tat[i] = bt[i] + wt[i] } // Funkcija vidutiniam laikui const findavgTime = (procesai, n, bt, kvantas) => { tegul wt = naujas Masyvas(n). fill(0), tat = new Array(n).fill(0) tegul total_wt = 0, total_tat = 0 // Funkcija visų procesų laukimo laikui rasti findWaitingTime(proceses, n, bt, wt, quantum); // Funkcija visų procesų apsisukimo laikui rasti findTurnAroundTime(processes, n, bt, wt, tat // Rodyti procesus kartu su visomis detalėmis document.write(`Procesų serijos laikas Laukimo laikas`); Apskaičiuokite bendrą laukimo laiką ir bendrą apsisukimo laiką // (tegul i = 0; i total_wt = total_wt + wt[i]; total_tat = total_tat + tat[i]; document.write(`${i + 1} ${ bt[i]} ${wt[i]} ${tat[i]} } document.write(`Vidutinis laukimo laikas = document.write(` Vidutinis apsisukimo laikas). = ${total_tat / n}`); } // Tvarkyklės kodas // Proceso ID procesai = [1, 2, 3]; tegul n = procesai.ilgis; // Visų procesų serijos laikas tegul burst_time = [10, 5, 8]; // Laiko kvantas tegul kvantas = 2; findavgTime(procesai, n, serijos_laikas, kvantas); // Šį kodą sukūrė rakeshsahni>>>į priekį grandinePN BT WT TAT 1 10 13 23 2 5 10 15 3 8 13 21 Average waiting time = 12 Average turn around time = 19.6667> „Round Robin“ planavimo programa, kai atvykimo laikas lygus nuliui, skirtingi ir tokie pat atvykimo laikai
C++
#include>#include>using>namespace>std;>struct>Process {>>int>AT, BT, ST[20], WT, FT, TAT, pos;>};>int>quant;>int>main() {>>int>n, i, j;>>// Taking Input>>cout <<>'Enter the no. of processes: '>;>>cin>> n;>>Process p[n];>>cout <<>'Enter the quantum: '><< endl;>>cin>> quant;>>cout <<>'Enter the process numbers: '><< endl;>>for>(i = 0; i cin>> p[i].pos; cout<< 'Enter the Arrival time of processes: ' << endl; for (i = 0; i cin>> p[i].AT; cout<< 'Enter the Burst time of processes: ' << endl; for (i = 0; i cin>> p[i].BT; // Kintamųjų deklaravimas int c = n, s[n][20]; plaukimo laikas = 0, mini = INT_MAX, b[n], a[n]; // Inicijuojami serijos ir atvykimo laiko masyvai int index = -1; (i = 0; i b[i] = p[i].BT; a[i] = p[i].AT; (j = 0; j)<20; j++) { s[i][j] = -1; } } int tot_wt, tot_tat; tot_wt = 0; tot_tat = 0; bool flag = false; while (c != 0) { mini = INT_MAX; flag = false; for (i = 0; i float p = time + 0.1; if (a[i] <= p && mini>a[i] && b[i]> 0) { indeksas = i; mini = a[i]; vėliavėlė = tiesa; } } // jei ties =1, tada ciklas išeina, todėl vėliavėlė nustatoma į false if (!flag) { time++; Tęsti; } // skaičiuojant pradžios laiką j = 0; while (s[indeksas][j] != -1) { j++; } if (s[indeksas][j] == -1) { s[indeksas][j] = laikas; p[indeksas].ST[j] = laikas; } jei (b[indeksas]<= quant) { time += b[index]; b[index] = 0; } else { time += quant; b[index] -= quant; } if (b[index]>0) { a[indeksas] = laikas + 0,1; } // skaičiuojant atvykimo, serijos, galutinius laikus if (b[index] == 0) { c--; p[indeksas].FT = laikas; p[indeksas].WT = p[indeksas].FT – p[indeksas].AT – p[indeksas].BT; tot_wt += p[indeksas].WT; p[indeksas].TAT = p[indeksas].BT + p[indeksas].WT; tot_tat += p[indeksas].TAT; } } // while ciklo pabaiga // Spausdinimo išvesties galia<< 'Process number '; cout << 'Arrival time '; cout << 'Burst time '; cout << ' Start time'; j = 0; while (j != 10) { j += 1; cout << ' '; } cout << ' Final time'; cout << ' Wait Time '; cout << ' TurnAround Time' << endl; for (i = 0; i cout << p[i].pos << ' '; cout << p[i].AT << ' '; cout << p[i].BT << ' '; j = 0; int v = 0; while (s[i][j] != -1) { cout << p[i].ST[j] << ' '; j++; v += 3; } while (v != 40) { cout << ' '; v += 1; } cout << p[i].FT << ' '; cout << p[i].WT << ' '; cout << p[i].TAT << endl; } // Calculating average wait time and turnaround time double avg_wt, avg_tat; avg_wt = tot_wt / static_cast(n); avg_tat = tot_tat / static_cast (n); // Spausdinamas vidutinis laukimo laikas ir apyvartos laikas<< 'The average wait time is: ' << avg_wt << endl; cout << 'The average TurnAround time is: ' << avg_tat << endl; return 0; }> >>C
sql tvarka atsitiktine tvarka
#include>#include>#include>struct>P{>int>AT,BT,ST[20],WT,FT,TAT,pos;>};>int>quant;>int>main(){>int>n,i,j;>// Taking Input>printf>(>'Enter the no. of processes :'>);>scanf>(>'%d'>,&n);>struct>P p[n];>>printf>(>'Enter the quantum '>);>scanf>(>'%d'>,&quant);>printf>(>'Enter the process numbers '>);>for>(i=0;i scanf('%d',&(p[i].pos)); printf('Enter the Arrival time of processes '); for(i=0;i scanf('%d',&(p[i].AT)); printf('Enter the Burst time of processes '); for(i=0;i scanf('%d',&(p[i].BT)); // Declaring variables int c=n,s[n][20]; float time=0,mini=INT_MAX,b[n],a[n]; // Initializing burst and arrival time arrays int index=-1; for(i=0;i b[i]=p[i].BT; a[i]=p[i].AT; for(j=0;j<20;j++){ s[i][j]=-1; } } int tot_wt,tot_tat; tot_wt=0; tot_tat=0; bool flag=false; while(c!=0){ mini=INT_MAX; flag=false; for(i=0;i float p=time+0.1; if(a[i]a[i] && b[i]>0){ indeksas=i; mini=a[i]; vėliavėlė=tiesa; } } // jei ties =1, tada ciklas išeina, todėl vėliavėlė nustatoma į false if(!flag){ time++; Tęsti; } //pradžios laiko apskaičiavimas j=0; while(s[indeksas][j]!=-1){ j++; } if(s[indeksas][j]==-1){ s[indeksas][j]=laikas; p[indeksas].ST[j] = laikas; } if(b[indeksas]<=quant){ time+=b[index]; b[index]=0; } else{ time+=quant; b[index]-=quant; } if(b[index]>0){ a[indeksas]=laikas+0,1; } // atvykimo, serijos, galutinio laiko skaičiavimas if(b[index]==0){ c--; p[indeksas].FT=laikas; p[indeksas].WT=p[indeksas].FT-p[indeksas].AT-p[indeksas].BT; tot_wt+=p[indeksas].WT; p[indeksas].TAT=p[indeksas].BT+p[indeksas].WT; tot_tat+=p[indeksas].TAT; } } // while ciklo pabaiga // Spausdinimo išvestis printf('Proceso numeris '); printf('Atvykimo laikas '); printf('Burst time '); printf(' Pradžios laikas'); j = 0; while(j!=10){ j+=1; printf(''); } printf(' Galutinis laikas'); printf(' Laukimo laikas '); printf(' Apsukimo laikas '); for(i=0;i printf('%d ',p[i].pos); printf('%d ',p[i].AT); printf ('%d ',p[i].BT j=0 while(s[i][j]!=-1){ printf('%d '); ,p[i].ST[j] } while(v!=40){ printf('%d t; ',p[i].FT); printf('%d ',p[i].WT); } //Skaičiuojamas vidutinis laukimo laikas ir vidutinis laukimo laikas laikas yra: %lf ',avg_wt ('Vidutinis apsisukimo laikas yra: %lf ',avg_tat }>'>);>Enter the number of processes : 4 Enter the time quanta : 2 Enter the process numbers : 1 2 3 4 Enter the arrival time of the processes : 0 1 2 3 Enter the burst time of the processes : 5 4 2 1 Program No. Arrival Time Burst Time Wait Time TurnAround Time 1 0 5 7 12 2 1 4 6 10 3 2 2 2 4 4 3 1 5 6 Average wait time : 5 Average Turn Around Time : 8> Programa, skirta tvarkaraščių sudarymui su skirtingais visų procesų atvykimo laikais
Išsamiai įgyvendinamas prevencinis apvalus algoritmas su skirtingu atvykimo laiku visiems procesams, žr. Programa „Round Robin“ planavimui su skirtingais atvykimo laikais .
Išvada
Apibendrinant galima pasakyti, kad „Round Robin“ procesoriaus planavimas yra teisingas ir prevencinis algoritmas, kuris kiekvienam procesui skiria fiksuotą laiko kvantą, užtikrindamas vienodą procesoriaus prieigą. Tai paprasta įdiegti, tačiau gali padidėti konteksto perjungimo išlaidos. Nors tai skatina sąžiningumą ir apsaugo nuo bado, gali pailgėti laukimo laikas ir sumažėti pralaidumas, priklausomai nuo laiko kiekio. Veiksmingas programos įgyvendinimas leidžia apskaičiuoti pagrindinius rodiklius, tokius kaip užbaigimo laikas, apyvartos laikas ir laukimo laikas, padedant įvertinti ir optimizuoti našumą.