ВУЗ:
Составители:
Рубрика:
Если процесс вырабатывает команду “ждать”, то прерывание нарушает чередование
квантов (следующему процессу достаётся часть кванта). В этом случае возможны две страте-
гии:
1) можно не принимать во внимание (в среднем);
2) после команды “ждать” всегда начинается подсчёт прерываний с нуля (квант будет
целый).
Допустим, что ППОВ использует некоторую переменную: “текущий квант”, в кото-
рую оно образует сумму числа прерываний. С вызовом D текущему кванту присвоится зна-
чение 0.
Procedure Переключить;
{Процедура вызывает ППОВ, не изменяя состояния процесса}
Begin
Передать контекст процесса (текущий процесс^.адрес стека);
Выбрать;
{Определяет новое значение “текущего процесса”}
Загрузить контекст процесса (текущий процесс^.адрес стека);
Переключить контекст;
End.
Возникает вопрос: как сохранять величину кванта? Возможны два случая.
1-й случай:
Величина кванта хранится в дескрипторе процесса. Если процесс становится активный, то
сам диспетчер будет определять, когда переключать процесс.
Type
связь = ^ дескриптор;
связь1 = ^ процесс;
связь2 = ^ стек;
дескриптор = record
следующий : связь;
адрес процесса : связь1;
адрес стека : связь2;
состояние : boolean;
приоритет : integer;
max. время : integer;
текущее время : integer;
Procedure Переключить2;
Begin
текущий процесс^.текущее время := текущий процесс^.текущее время+1;
If
текущий процесс^.текущее время > текущий процесс^.max. время
then
begin
текущий процесс^.текущее время := 0;
Передать контекст процесса (текущий процесс^.адрес стека);
Выбрать;
Загрузить контекст процесса (текущий процесс^.адрес стека);
End.
Если процесс вырабатывает команду “ждать”, то прерывание нарушает чередование квантов (следующему процессу достаётся часть кванта). В этом случае возможны две страте- гии: 1) можно не принимать во внимание (в среднем); 2) после команды “ждать” всегда начинается подсчёт прерываний с нуля (квант будет целый). Допустим, что ППОВ использует некоторую переменную: “текущий квант”, в кото- рую оно образует сумму числа прерываний. С вызовом D текущему кванту присвоится зна- чение 0. Procedure Переключить; {Процедура вызывает ППОВ, не изменяя состояния процесса} Begin Передать контекст процесса (текущий процесс^.адрес стека); Выбрать; {Определяет новое значение “текущего процесса”} Загрузить контекст процесса (текущий процесс^.адрес стека); Переключить контекст; End. Возникает вопрос: как сохранять величину кванта? Возможны два случая. 1-й случай: Величина кванта хранится в дескрипторе процесса. Если процесс становится активный, то сам диспетчер будет определять, когда переключать процесс. Type связь = ^ дескриптор; связь1 = ^ процесс; связь2 = ^ стек; дескриптор = record следующий : связь; адрес процесса : связь1; адрес стека : связь2; состояние : boolean; приоритет : integer; max. время : integer; текущее время : integer; Procedure Переключить2; Begin текущий процесс^.текущее время := текущий процесс^.текущее время+1; If текущий процесс^.текущее время > текущий процесс^.max. время then begin текущий процесс^.текущее время := 0; Передать контекст процесса (текущий процесс^.адрес стека); Выбрать; Загрузить контекст процесса (текущий процесс^.адрес стека); End.