Я пытаюсь реализовать алгоритм Round Robin для симулятора планировщика CPU, но используя структуру связанных списков.Round Robin scheduling с помощью связанного списка
Я написал этот код, но, похоже, не работает так, как должно быть:
//Round Robin scheduling
void roundRobin(){
bubbleSortArrivalTime();
struct process *temp;
int totalTimeCnt=0;
int totalTime;
int quantum=4;
int i;
for(temp=proc; temp!=NULL; temp=temp->next){
totalTime+=temp->burstTime;
}
do{
for(i=1; i<LISTSIZE; i++){
if(i==1){
set_nth_process_burstTime(proc, i, get_nth_process_burstTime(proc,i)-quantum);
//set_nth_process_waitingTime(proc, i, get_nth_process_burstTime(proc,i-1)+get_nth_process_waitingTime(proc, i-1));
totalTime+=4;
}
else{
set_nth_process_burstTime(proc, i, get_nth_process_burstTime(proc,i)-quantum);
set_nth_process_waitingTime(proc, i, get_nth_process_burstTime(proc,i-1)+get_nth_process_waitingTime(proc, i-1));
totalTime+=4;
}
}
}while(totalTimeCnt!=0);
method="Method selected: Round Robin Scheduling";
}
Структура моего связанного списка выглядит следующим образом:
struct process{
int burstTime,arrivalTime, priority,pname;
float waitingTime, turnArroundTime;
struct process *next;
}*proc=NULL;
где proc
является определяемый как глобальный.
Я реализовал некоторые получают и установить функции для доступа к любому элементу легко:
void set_nth_process_burstTime(struct process*header, int position, int value)
void set_nth_process_waitingTime(struct process *header, int position, float value)
int get_nth_process_waitingTime(struct process *header, int position)
int get_nth_process_priority(struct process *header,int position)
int get_nth_process_arrivalTime(struct process *header,int position)
int get_nth_process_burstTime(struct process *header,int position)
Не могли бы вы мне советы о том, как реализовать Round Robin правильно? Это не дает правильных результатов.
Где таймер прерывает? Что, если 'process_1' берет навсегда? Что делать, если процесс убит? Он будет снова запланирован на следующей итерации 'while'. Это больше похоже на алгоритм пакетной обработки. И небольшая степень мультипрограммирования также будет приятной. – Downvoter
для меня это просто симулятор. Не нужно использовать эти функции. –
@cad, вопрос OPs был о 'round robin' не о каком-либо мультипрограммировании. Надеюсь, вы заметили обработчик сторожевого таймера, обработчик прерываний и другие функции, которые должны быть в реалистичной системе. Точно так же, что 'while()' loop - это то, что подразумевается под 'round robin'. Сторожевой сторож будет обращаться с любой проблемой, например, с процессом. несмотря на то, что правильный подход заключается в том, чтобы не писать никаких циклов ожидания, которые могли бы повесить навсегда. – user3629249