Организация вычислительных процессов. Конспект лекций по дисциплине "Системы реального времени". Степанов Б.М. - 19 стр.

UptoLike

Составители: 

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