logo

Program for Round Robin-planlægning for samme ankomsttid

Runde Robin er en CPU-planlægningsalgoritme, hvor hver proces er cyklisk tildelt en fast tidsslot. Det er den forebyggende version af 'First-til-mølle' CPU-planlægningsalgoritmen.

javascript kommentar
  • Round Robin CPU Algorithm fokuserer generelt på Time Sharing teknik.
  • Det tidsrum, som en proces eller et job får lov til at køre i en forebyggende metode kaldes tid kvante .
  • Hver proces eller job, der er til stede i klarkøen, tildeles CPU'en for det tidskvante, hvis udførelsen af ​​processen er fuldført i løbet af det tidsrum, vil processen ende ellers vil processen gå tilbage til ventebord og vent på næste tur for at fuldføre udførelsen.

Karakteristika for Round Robin CPU-planlægningsalgoritme

  • Det er enkelt, nemt at implementere og sult-frit, da alle processer får en rimelig andel af CPU.
  • En af de mest brugte teknikker i CPU-planlægning er en kerne.
  • det er forebyggende da processer kun tildeles CPU i et fast stykke tid højst.
  • Ulempen ved det er mere overhead af kontekstskifte.

Fordele ved Round Robin CPU Scheduling Algorithm

  • Der er retfærdighed, da hver proces får en lige stor del af CPU'en.
  • Den nyoprettede proces føjes til slutningen af ​​klarkøen.
  • En round-robin-planlægger anvender generelt tidsdeling, hvilket giver hvert job et tidsrum eller kvante.
  • Mens der udføres en round-robin planlægning, tildeles et bestemt tidskvante til forskellige job.
  • Hver proces får en chance for at omplanlægge efter en bestemt kvantetid i denne planlægning.

Ulemper ved Round Robin CPU Scheduling Algorithm

  • Der er større ventetid og responstid.
  • Der er lav gennemstrømning.
  • Der er Context Switches.
  • Gantt-diagrammet ser ud til at blive for stort (hvis kvantetiden er mindre til planlægning. For eksempel: 1 ms til stor planlægning).
  • Tidskrævende planlægning for små kvante.

Eksempler til at vise arbejdet med Runde Robin Planlægningsalgoritme

Eksempel-1: Overvej følgende tabel over ankomsttid og bursttid for fire processer P1, P2, P3 og P4 og givet Tidskvante = 2

Behandle Burst Time Ankomsttid
P1 5 ms 0 ms
P2 4 ms 1 ms
P3 2 ms 2 ms
P4 1 ms 4 ms

Round Robin CPU-planlægningsalgoritmen vil arbejde på basis af trin som nævnt nedenfor:



Til tiden = 0,

  • Udførelsen begynder med proces P1, som har bursttid 5.
  • Her udføres hver proces i 2 millisekunder ( Tid Kvanteperiode ). P2 og P3 står stadig i ventekøen.
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
0-2ms P1 0ms P2, P3 P1 2 ms 5 ms 3 ms

På tidspunktet = 2,

  • Processerne P1 og P3 ankommer i klarkøen, og P2 begynder at udføre for TQ periode
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
2-4 ms P1 0ms P3, P1 P2 0ms 3 ms 3 ms
P2 1 ms 2 ms 4 ms 2 ms

På tidspunktet = 4,

  • Processen P4 ankommer i klar kø ,
  • Så udfører P3 for TQ periode.
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
4-6 ms P1 0ms P1, P4, P2 P3 0ms 3 ms 3 ms
P2 1 ms 0ms 2 ms 2 ms
P3 2 ms 2 ms 2 ms 0ms

På tidspunktet = 6,

  • Proces P3 afslutter sin udførelse
  • Proces P1 begynder at udføre for TQ periode, da den er næste i b.
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
6-8 ms P1 0ms P4, P2 P1 2 ms 3 ms 1 ms
P2 1 ms 0ms 2 ms 2 ms

På tidspunktet = 8,

  • Proces P4 begynder at udføre, den vil ikke køre for Tid Kvanteperiode da det har sprængt tid = 1
  • Derfor vil den kun køre i 1 ms.
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
8-9 ms P1 0ms P2, P1 P4 0ms 3 ms 1 ms
P2 1 ms 0ms 2 ms 2 ms
P4 4 ms 1 ms 1 ms 0ms

På tidspunktet = 9,

  • Proces P4 afslutter sin udførelse
  • Proces P2 begynder at udføre for TQ periode som det er næste i klar kø
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
9-11 ms P1 0ms P1 P2 0ms 3 ms 1 ms
P2 1 ms 2 ms 2 ms 0ms

På tidspunktet = 11,

  • Proces P2 afslutter sin udførelse.
  • Proces P1 begynder at udføre, den vil kun køre i 1 ms
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
11-12 ms P1 0ms P1 1 ms 1 ms 0ms

Til tiden = 12,

  • Proces P1 afslutter sin udførelse.
  • Den overordnede udførelse af processerne vil være som vist nedenfor:
Tidsforekomst Behandle Ankomsttid Klar kø Løbende kø Udførelsestid Indledende burst tid Resterende burst
Tid
0-2ms P1 0ms P2, P3 P1 2 ms 5 ms 3 ms
2-4 ms P1 0ms P3, P1 P2 0ms 3 ms 3 ms
P2 1 ms 2 ms 4 ms 2 ms
4-6 ms P1 0ms P1, P4, P2 P3 0ms 3 ms 3 ms
P2 1 ms 0ms 2 ms 2 ms
P3 2 ms 2 ms 2 ms 0ms
6-8 ms P1 0ms P4, P2 P1 2 ms 3 ms 1 ms
P2 1 ms 0ms 2 ms 2 ms
8-9 ms P1 0ms P2, P1 P4 0ms 3 ms 1 ms
P2 1 ms 0ms 2 ms 2 ms
P4 4 ms 1 ms 1 ms 0ms
9-11 ms P1 0ms P1 P2 0ms 3 ms 1 ms
P2 1 ms 2 ms 2 ms 0ms
11-12 ms P1 0ms P1 1 ms 1 ms 0ms

Gantt kort vil være som følgende:

Gantt-diagram for Round Robin Scheduling Algorithm

Gantt-diagram for Round Robin Scheduling Algorithm

Hvordan beregner man nedenstående tider i Round Robin ved hjælp af et program?

  • Gennemførelsestid: Tidspunkt, hvor processen afslutter sin udførelse.
  • Omløbstid: Tidsforskel mellem færdiggørelsestidspunkt og ankomsttidspunkt. Turn Around Time = Gennemførelsestid - Ankomsttid
  • Ventetid (W.T): Tid Forskel mellem omløbstid og eksplosionstid.
    Ventetid = Omløbstid - Burst Time

Lad os nu beregne gennemsnittet ventetid og vend om tid:

Processer BT CT TAT WT
P1 0 5 12 12-0 = 12 12-5 = 7
P2 1 4 elleve 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

Nu,

  • Gennemsnitlig omløbstid = (12 + 10 + 4 + 5)/4 = 31/4 = 7,7
  • Gennemsnitlig ventetid = (7 + 6 + 2 + 4)/4 = 19/4 = 4,7

Eksempel 2: Overvej følgende tabel over ankomsttid og bursttid for tre processer P1, P2 og P3 og givet Tidskvante = 2

Behandle Burst Time Ankomsttid
P1 10 ms 0 ms
P2 5 ms 0 ms
P3 8 ms 0 ms

Tilsvarende Gantt kort for dette eksempel:

Gantt-diagram for eksempel 2

Gantt-diagram for eksempel 2

Lad os nu beregne gennemsnittet ventetid og vend om tid:

Processer BT CT TAT WT
P1 0 10 23 23-0 = 23 23-10 = 13
P2 0 5 femten 15-0 = 15 15-5 = 10
P3 0 8 enogtyve 21-0 = 21 21-8 = 13

Samlet omløbstid = 59 ms
Så, Gennemsnitlig omløbstid = 59/3 = 19,667 ms

Og samlet ventetid = 36 ms
Så, Gennemsnitlig ventetid = 36/3 = 12,00 ms

Program for Round Robin-planlægning med ankomsttid som 0 for alle processer

Trin til at finde ventetider for alle processer

  • Opret et array rem_bt[] at holde styr på den resterende burst-tid af processer. Dette array er oprindeligt en kopi af bt[] (burst times array)
  • Opret et andet array vægt[] at gemme ventetider på processer. Initialiser dette array som 0.
  • Initialiseringstid: t = 0
  • Bliv ved med at gennemgå alle processer, mens de ikke er færdige. Følg med for i’th proces, hvis det ikke er gjort endnu.
    • Hvis rem_bt[i]> kvante
      • t = t + kvante
      • rem_bt[i] -= beløb;
    • Else // Sidste cyklus for denne proces
      • t = t + rem_bt[i];
      • wt[i] = t – bt[i]
      • rem_bt[i] = 0; // Denne proces er slut

Når først vi har ventetider, kan vi beregne omløbstid tat[i] af en proces som summen af ​​vente- og bursttider, dvs. wt[i] + bt[i].
Nedenfor er implementering af ovenstående trin.

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) { udført = falsk; // Der er en afventende proces hvis (rem_bt[i]> kvante) { // Forøg værdien af ​​t dvs. viser // hvor lang tid en proces er blevet behandlet t += kvante; // Reducer burst_time for nuværende proces // med kvante rem_bt[i] -= kvante; } // Hvis bursttiden er mindre end eller lig med // quantum. Sidste cyklus for denne proces ellers { // Forøg værdien af ​​t, dvs. viser // hvor lang tid en proces er blevet behandlet t = t + rem_bt[i]; // Ventetid er aktuel tid minus tid // brugt af denne proces wt[i] = t - bt[i]; // Efterhånden som processen bliver fuldført // gør dens resterende bursttid = 0 rem_bt[i] = 0; } } } // Hvis alle processer er udført, hvis (gjort == sand) break; } } // Funktion til at beregne omløbstid void findTurnAroundTime(int processer[], int n, int bt[], int wt[], int tat[]) { // beregner ekspeditionstid ved at tilføje // bt[i] + wt[i] for (int i = 0; i tat[i] = bt[i] + wt[i]; } // Funktion til at beregne gennemsnitlig tid void findavgTime(int processer[], int n, int bt[ ], int quantum) { int wt[n], tat[n], total_wt = 0, total_tat = 0 // Funktion til at finde ventetid for alle processer findWaitingTime(processer, n, bt, wt, quantum); Funktion til at finde omløbstid for alle processer findTurnAroundTime(processer, n, bt, wt, tat // Vis processer sammen med alle detaljer 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


ins nøgle



// 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) { udført = falsk; // Der er en afventende proces hvis (rem_bt[i]> kvante) { // Forøg værdien af ​​t dvs. viser // hvor lang tid en proces er blevet behandlet t += kvante; // Reducer burst_time for nuværende proces // med kvante rem_bt[i] -= kvante; } // Hvis bursttiden er mindre end eller lig med // quantum. Sidste cyklus for denne proces ellers { // Forøg værdien af ​​t, dvs. viser // hvor lang tid en proces er blevet behandlet t = t + rem_bt[i]; // Ventetid er aktuel tid minus tid // brugt af denne proces wt[i] = t - bt[i]; // Efterhånden som processen bliver fuldført // gør dens resterende bursttid = 0 rem_bt[i] = 0; } } } // Hvis alle processer er udført, hvis (gjort == sand) break; } } // Metode til at beregne omløbstid statisk tomrum findTurnAroundTime(int processer[], int n, int bt[], int wt[], int tat[]) { // beregner ekspeditionstid ved at tilføje // bt[i ] + wt[i] for (int i = 0; i tat[i] = bt[i] + wt[i]; } // Metode til at beregne gennemsnitstid static void findavgTime(int processer[], int n, int bt[], int quantum) { int wt[] = new int[n], tat[] = new int[n]; int total_wt = 0, total_tat = 0 // Funktion til at finde ventetid for alle processer findWaitingTime( processer, n, bt, wt, quantum); 'PN ' + ' B ' + ' WT ' + ' TAT'); // Beregn samlet ventetid og samlet omdrejningstid for (int i=0; i { total_wt = total_wt + wt[i]; total_tat = total_tat + tat[i]; System.out.println(' ' + (i+1) + ' ' + bt[i] +' ' + wt[i] +' ' + tat[i]); } System.out.println('Gennemsnitlig ventetid = ' + (float)total_wt / (float)n); System.out.println('Gennemsnitlig omløbstid = ' + (float)total_tat / (float)n); } // Drivermetode public static void main(String[] args) { // process id's int processes[] = { 1, 2, 3}; int n = processer.længde; // Burst-tid for alle processer int burst_time[] = {10, 5, 8}; // Time quantum int quantum = 2; findavgTime(processer, n, burst_time, quantum); } }>

>

>

repl i java

Python3




# 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]>>0>) :> >done>=> False> # There is a pending process> > >if> (rem_bt[i]>kvante) :> > ># 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)>

>

>

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) { // Der er en afventende proces udført = falsk; if (rem_bt[i]> kvante) { // Forøg værdien af ​​t dvs. // viser hvor lang tid en proces // er blevet behandlet t += kvante; // Reducer burst_time for // nuværende proces med quantum rem_bt[i] -= quantum; } // Hvis bursttiden er mindre end // eller lig med kvante. Sidste cyklus // for denne proces ellers { // Forøg værdien af ​​t, dvs. // viser, hvor lang tid en proces // er blevet behandlet t = t + rem_bt[i]; // Ventetiden er aktuel // tid minus tid brugt af // denne proces wt[i] = t - bt[i]; // Efterhånden som processen bliver fuldstændig // udført, skal dens resterende // burst tid = 0 rem_bt[i] = 0; } } } // Hvis alle processer er udført, hvis (gjort == sand) break; } } // Metode til at beregne omløbstid static void findTurnAroundTime(int []processer, int n, int []bt, int []wt, int []tat) { // beregner ekspeditionstid ved at tilføje // bt[i ] + wt[i] for (int i = 0; i tat[i] = bt[i] + wt[i]; } // Metode til at beregne gennemsnitstid static void findavgTime(int []processer, int n, int []bt, int quantum) { int []wt = new int[n]; int []tat = new int[n]; int total_wt = 0, total_tat = 0 // Funktion til at finde ventetid for // alle processer findWaitingTime(processer, n, bt, wt, quantum); // Funktion til at finde omløbstid // for alle processer findTurnAroundTime(processer, n, bt, wt, tat); Console.WriteLine('Processer ' + ' Burst tid ' + ' Ventetid ' + ' Omdrejningstid'); // Beregn samlet ventetid og total omdrejningstid for (int i = 0; i { total_wt = total_wt + wt[i]; ] + ' ' + wt[i] +' ' + tat[i]); } Console.WriteLine('Gennemsnitlig ventetid = ' + (float)total_wt / (float)n); Console.Write('Gennemsnitlig omløbstid = ' + (float)total_tat / (float)n); } // Drivermetode public static void Main() { // proces-id's int []processer = { 1, 2, 3}; int n = processer.Længde; // Burst-tid for alle processer int []burst_time = {10, 5, 8}; // Time quantum int quantum = 2; findavgTime(processer, n, burst_time, quantum); } } // Denne kode er bidraget af nitin mittal.>

>

>

Javascript




> >// 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) { udført = falsk; // Der er en afventende proces hvis (rem_bt[i]> kvante) { // Forøg værdien af ​​t dvs. viser // hvor lang tid en proces er blevet behandlet t += kvante; // Reducer burst_time for nuværende proces // med kvante rem_bt[i] -= kvante; } // Hvis bursttiden er mindre end eller lig med // quantum. Sidste cyklus for denne proces ellers { // Forøg værdien af ​​t, dvs. viser // hvor lang tid en proces er blevet behandlet t = t + rem_bt[i]; // Ventetid er aktuel tid minus tid // brugt af denne proces wt[i] = t - bt[i]; // Efterhånden som processen bliver fuldført // gør dens resterende bursttid = 0 rem_bt[i] = 0; } } } // Hvis alle processer er udført, hvis (gjort == sand) break; } } // Funktion til at beregne omløbstid const findTurnAroundTime = (processer, n, bt, wt, tat) => { // beregner omløbstid ved at tilføje // bt[i] + wt[i] for (lad i = 0; i tat[i] = bt[i] + wt[i]; } // Funktion til at beregne gennemsnitstid const findavgTime = (processer, n, bt, quantum) => { let wt = new Array(n). fill(0), tat = new Array(n).fill(0) lad total_wt = 0, total_tat = 0; // Funktion til at finde ventetid for alle processer findWaitingTime(processer, n, bt, wt, quantum); // Funktion til at finde omløbstid for alle processer findTurnAroundTime(processer, n, bt, wt, tat); Beregn den samlede ventetid og den samlede omdrejningstid for (lad 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(`Gennemsnitlig ventetid = ${total_wt / n}`); = ${total_tat / n}`); } // Driverkode // proces-id's processer = [1, 2, 3]; lad n = processer.længde; // Bursttid for alle processer lad burst_time = [10, 5, 8]; // Tidskvante lad kvante = 2; findavgTime(processer, n, burst_time, quantum); // Denne kode er bidraget af rakeshsahni>

indeks over java
>

>

Produktion

PN 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>

Program for Round Robin-planlægning med ankomsttid som nul, forskellige og samme ankomsttider

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>> kvant;> >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; // Erklæring af variable int c = n, s[n][20]; flydetid = 0, mini = INT_MAX, b[n], a[n]; // Initialisering af burst- og ankomsttidsarrays 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] <= p && mini>a[i] && b[i]> 0) { indeks = i; mini = a[i]; flag = sandt; } } // hvis ved =1, så kommer løkken ud, og sæt flaget til false if (!flag) { time++; Blive ved; } // beregner starttid j = 0; while (s[indeks][j] != -1) { j++; } if (s[indeks][j] == -1) { s[indeks][j] = tid; p[indeks].ST[j] = tid; } hvis (b[indeks]<= quant) { time += b[index]; b[index] = 0; } else { time += quant; b[index] -= quant; } if (b[index]>0) { a[indeks] = tid + 0,1; } // beregner ankomst, burst, sluttider if (b[indeks] == 0) { c--; p[indeks].FT = tid; p[indeks].WT = p[indeks].FT - p[indeks].AT - p[indeks].BT; tot_wt += p[indeks].WT; p[indeks].TAT = p[indeks].BT + p[indeks].WT; tot_tat += p[indeks].TAT; } } // end of while loop // Udskrivning af output cout<< '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 / statisk_cast(n); // Udskrivning af gennemsnitlig ventetid og ekspeditionstid<< 'The average wait time is: ' << avg_wt << endl; cout << 'The average TurnAround time is: ' << avg_tat << endl; return 0; }>

>

>

C




#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){ indeks=i; mini=a[i]; flag=sandt; } } // hvis ved =1, så kommer løkken ud, og sæt flaget til false if(!flag){ time++; Blive ved; } //beregner starttidspunkt j=0; while(s[indeks][j]!=-1){ j++; } if(s[indeks][j]==-1){ s[indeks][j]=tid; p[indeks].ST[j]=tid; } hvis(b[indeks]<=quant){ time+=b[index]; b[index]=0; } else{ time+=quant; b[index]-=quant; } if(b[index]>0){ a[indeks]=tid+0,1; } // beregner ankomst, burst, endelige gange if(b[indeks]==0){ c--; p[indeks].FT=tid; p[indeks].WT=p[indeks].FT-p[indeks].AT-p[indeks].BT; tot_wt+=p[indeks].WT; p[indeks].TAT=p[indeks].BT+p[indeks].WT; tot_tat+=p[indeks].TAT; } } // slutningen af ​​while-løkke // Udskriftsoutput printf('Procesnummer '); printf('Ankomsttid '); printf('Bursttid '); printf(' Starttidspunkt'); j=0; mens(j!=10){ j+=1; printf(' '); } printf(' Endelig tid'); printf(' Ventetid '); printf(' Driftstid '); for(i=0;i printf('%d ',p[i].pos); printf('%d ',p[i].AT); printf ('%d ',p[i].BT j=0; int v=0; while(s[i][j]!=-1){ printf('%d '); ,p[i].ST[j]); v+=3; ',p[i].FT); printf('%d ',p[i].WT); printf('%d ',p[i].TAT) } //Beregning af gennemsnitlig ventetid og behandlingstid dobbelt avg_wt=tot_wt/(float)n; tid er: %lf ',avg_wt);

> 

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>

Program til Round Robin-planlægning med forskellige ankomsttider for alle processer

For detaljeret implementering af Preemptive Round Robin-algoritme med forskellige ankomsttider for alle processer henvises til: Program for Round Robin-planlægning med forskellige ankomsttider .

Konklusion

Som konklusion er Round Robin CPU-planlægning en retfærdig og forebyggende algoritme, der tildeler et fast tidskvantetal til hver proces, hvilket sikrer lige CPU-adgang. Det er nemt at implementere, men kan føre til højere kontekstskiftende omkostninger. Selvom det fremmer retfærdighed og forhindrer sult, kan det resultere i længere ventetider og reduceret gennemløb, afhængigt af tidskvantumet. Effektiv programimplementering giver mulighed for beregning af nøglemålinger som færdiggørelsestid, ekspeditionstid og ventetid, hvilket hjælper med præstationsevaluering og optimering.