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

UptoLike

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

Процедуравыбрать1” определяет конец просмотра списка процессов по следующему
отношению
р^.следующий:= текущий процесс
В этом случае она выводит сообщение об отсутствии готовых процессов и продолжа-
ет просмотр списка процессов, который соответствует состоянию ожидания.
Диспетчер с абсолютным приоритетом
Принцип абсолютных приоритетов предполагает, что при появлении запроса на пре-
рывание от процесса, приоритет которого выше, чем приоритет выполняющегося процесса,
должна произойти передача процесса к процессу с наивысшим приоритетом.
При построении диспетчера допустим, что при отсутствии запросов с помощью пре-
рываний диспетчер должен работать в равенстве с принципом относительного приоритета.
Кроме того, среди процессов, определённых в системе, могут быть процессы, имеющие оди-
наковый приоритет. В этом случае, для работы с такими процессами диспетчер также должен
использовать относительный приоритет, определённый порядком расположения этих про-
цессов в списке.
Таким образом, мы приходим к смешанной дисциплине обслуживания.
Чтобы диспетчер мог определить приоритет каждого процесса, его необходимо задать
явным образом.
Обычно процессу приписывают приоритет в виде целого числа. Для хранения значе-
ния приоритета введём в дескриптор процесса ещё одно поле с именем «Приоритет».
type связь = ^дескриптор;
связь1 = ^процесс;
связь2 = ^стек;
дескриптор = record
: связь;
адрес процесса : связь;
адрес стека : связь;
состояние : boolean;
приоритет : int;
end;
Работа диспетчера, использующего абсолютный приоритет
Диспетчер построен на основе уже описанного, полагая, что пользователь имеет в
распоряжении примитивыготовиждать”. В случае появления прерывания работает про-
грамма обработки прерывания. Если она определяет, что причиной прерывания является за-
прос на активизацию некоторого процесса, то она должна обратиться к диспетчеру для того,
чтобы он попытался запустить требуемый процесс.
Для запуска с учётом абсолютных приоритетов введём ещё один примитив диспетче-
ра, который назовёмзапустить (k)
”, где k – номер процесса в списке. Эта процедура должна
выполнять следующие действия:
1) найти дескриптор процесса с номером k в списке процессов;
2) изменить состояние найденного процесса наготов”;
3) сравнить абсолютные приоритеты процесса с номером k и текущего. Если послед-
ний больше, то продолжать выполнение текущего. В противном случае необходимо:
заполнить контекст текущего процесса в стеке;
следующий
адрес процесса
адрес стека
состояние
приоритет
      Процедура “выбрать1” определяет конец просмотра списка процессов по следующему
отношению
     р^.следующий:= текущий процесс

       В этом случае она выводит сообщение об отсутствии готовых процессов и продолжа-
ет просмотр списка процессов, который соответствует состоянию ожидания.

       Диспетчер с абсолютным приоритетом

       Принцип абсолютных приоритетов предполагает, что при появлении запроса на пре-
рывание от процесса, приоритет которого выше, чем приоритет выполняющегося процесса,
должна произойти передача процесса к процессу с наивысшим приоритетом.
       При построении диспетчера допустим, что при отсутствии запросов с помощью пре-
рываний диспетчер должен работать в равенстве с принципом относительного приоритета.
Кроме того, среди процессов, определённых в системе, могут быть процессы, имеющие оди-
наковый приоритет. В этом случае, для работы с такими процессами диспетчер также должен
использовать относительный приоритет, определённый порядком расположения этих про-
цессов в списке.
       Таким образом, мы приходим к смешанной дисциплине обслуживания.
       Чтобы диспетчер мог определить приоритет каждого процесса, его необходимо задать
явным образом.
       Обычно процессу приписывают приоритет в виде целого числа. Для хранения значе-
ния приоритета введём в дескриптор процесса ещё одно поле с именем «Приоритет».

type   связь = ^дескриптор;
       связь1 = ^процесс;
       связь2 = ^стек;                       следующий

        дескриптор = record                адрес процесса
: связь;                                     адрес стека
адрес процесса : связь;
адрес стека : связь;                         состояние
состояние : boolean;                         приоритет
приоритет : int;
end;


       Работа диспетчера, использующего абсолютный приоритет

       Диспетчер построен на основе уже описанного, полагая, что пользователь имеет в
распоряжении примитивы “готов” и “ждать”. В случае появления прерывания работает про-
грамма обработки прерывания. Если она определяет, что причиной прерывания является за-
прос на активизацию некоторого процесса, то она должна обратиться к диспетчеру для того,
чтобы он попытался запустить требуемый процесс.
       Для запуска с учётом абсолютных приоритетов введём ещё один примитив диспетче-
ра, который назовём “запустить (k)”, где k – номер процесса в списке. Эта процедура должна
выполнять следующие действия:
       1) найти дескриптор процесса с номером k в списке процессов;
       2) изменить состояние найденного процесса на “готов”;
       3) сравнить абсолютные приоритеты процесса с номером k и текущего. Если послед-
ний больше, то продолжать выполнение текущего. В противном случае необходимо:
       – заполнить контекст текущего процесса в стеке;