Próbuję zaimplementować algorytm szeregowania Round Robin. Ale kod, który do tej pory zrobiłem, bierze pod uwagę tylko czas wybuchu. Muszę również wziąć pod uwagę czas przybycia procesu. Mam tablicę time_chart, której używam do przechowywania numeru aktualnie wykonywanego procesu. Ale jeśli żaden proces nie jest aktualnie wykonywany (to znaczy, jeśli wybrany proces zakończył wykonywanie, a kolejny proces nie dotarł), wartość 0 należy wstawić do tablicy time_chart.Planowanie Round Robin w java
I przechowywano czasu rozerwania oraz czas przybycia w matrycy 2D jako:
//proc[][0] is the AT array
//proc[][1] is the BT array
i czasem kwantowej zmienną q. Poniżej znajduje się mój kod:
int time_chart[] = new int[total_time];
int sel_proc = 1;
int current_q = 0;
for (int k = 0; k < total_time; k++) {
//Assign selected process to current time in the Chart
time_chart[k] = sel_proc;
//Decrement Remaining Time of selected process by 1 since it has been assigned the CPU for 1 unit of time
proc[sel_proc - 1][1]--;
//Updating value of sel_proc for next iteration
current_q++;
if (current_q == q || proc[sel_proc - 1][1] == 0)//If Time slice has expired or the current process has completed execution
{
current_q = 0;
//This will select the next valid value for sel_proc
for (int j = 1; j <= n; j++) {
sel_proc++;
if (sel_proc == (n + 1)) {
sel_proc = 1;
}
if (proc[sel_proc - 1][1] != 0) {
break;
}
}
}
}
// print timeline for testing
for (i = 0; i < total_time; i++) {
System.out.println("Time " + i + ": " + time_chart[i]);
}
obecnie wybierze następny proces, mimo że jeszcze nie dotarł. Dlatego muszę sprawdzić, czy następny proces nadszedł, czy nie. Próbowałem użyć proc[sel_proc][0] <= k
, aby to sprawdzić, ale nie działało. Rozumiem przez to, że nie otrzymałem żadnych wyników. Nie mogę wymyślić innego sposobu sprawdzenia, czy następny proces nadszedł, czy nie. Jak mogę to sprawdzić i umieścić wartość 0 w tablicy, jeśli następny proces nie dotarł?
Porada: użyj 'Listy' z' klasy Proc {int arrival; int pozostały Czas} 'dla tabeli czasu. Łatwiej jest żonglować dodawaniem nowych wpisów i usuwaniem zakończonych. –
@AdrianColomitchi. Nie muszę usuwać procesów, ponieważ te szczegóły służą później do obliczenia czasu oczekiwania i czasu realizacji. Już ukończyłem tę część. –
Czy możesz podać tekstowy opis problemu, który próbujesz rozwiązać. Round Robin służy do dystrybucji obciążenia między wieloma zasobami. Jaki jest twój zasób? czy istnieją inne problemy związane z harmonogramowaniem, które wymagają tylko jednego zasobu? może niektóre żądania wykorzystują więcej zasobów niż inne. –