ВУЗ:
Составители:
Рубрика:
Процедура “выбрать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 и текущего. Если послед- ний больше, то продолжать выполнение текущего. В противном случае необходимо: – заполнить контекст текущего процесса в стеке;
Страницы
- « первая
- ‹ предыдущая
- …
- 10
- 11
- 12
- 13
- 14
- …
- следующая ›
- последняя »