ВУЗ:
Составители:
Рубрика:
Если процесс вырабатывает команду “ждать”, то прерывание нарушает чередование
квантов (следующему процессу достаётся часть кванта). В этом случае возможны две страте-
гии:
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.
