Составители:
программный комплекс нечто большее, нежели просто обеспечение быстрой реакции на
прерывания.
Как мы уже знаем, при появлении запроса на прерывание система прерываний
идентифицирует сигнал и, если прерывания разрешены, управление передается на соот-
ветствующую подпрограмму обработки. Из рис.3.2 видно, что в подпрограмме обработ-
ки прерывания имеются две служебные секции. Это - первая секция, в которой осуще-
ствляется сохранение контекста прерванной задачи, который не смог быть сохранен на
2-м шаге, и последняя, заключительная секция, в которой, наоборот, осуществляется
восстановление контекста. Для того чтобы система прерываний не среагировала повтор-
но на сигнал запроса на прерывание, она обычно автоматически «закрывает» (отключа-
ет) прерывания, поэтому необходимо потом в подпрограмме обработки прерываний
вновь включать систему прерываний. Установка рассмотренных режимов обработки
прерываний (с относительными и абсолютными приоритетами, и по правилу LCFS)
осуществляется в конце первой секции подпрограммы обработки. Таким образом, на
время выполнения центральной секции (в случае работы в режимах с абсолютными при-
оритетами и по дисциплине LCFS) прерывания разрешены. На время работы заключи-
тельной секции подпрограммы обработки система прерываний должна быть отключена
и после восстановления контекста вновь включена. Поскольку эти действия необходимо
выполнять практически в каждой подпрограмме обработки прерываний, во многих опе-
рационных системах первые секции подпрограмм обработки прерываний выделяются в
специальный системный программный модуль, называемый супервизором прерываний.
Супервизор прерываний прежде всего сохраняет в дескрипторе текущей задачи
рабочие регистры процессора, определяющие контекст прерываемого вычислительного
процесса. Далее он определяет ту подпрограмму, которая должна выполнить действия,
связанные с обслуживанием настоящего (текущего) запроса на прерывание. Наконец,
перед тем как передать управление этой подпрограмме, супервизор прерываний уста-
навливает необходимый режим обработки прерывания. После выполнения подпрограм-
мы обработки прерывания управление вновь передается супервизору, на этот раз уже на
тот модуль, который занимается диспетчеризацией задач. И уже диспетчер задач, в свою
очередь, в соответствии с принятым режимом распределения процессорного времени
(между выполняющимися процессами) восстановит контекст той задачи, которой будет
решено выделить процессор. Рассмотренная схема проиллюстрирована на рис.3.4 [2].
Как видно из рис.3.4, здесь нет непосредственного возврата в прерванную ранее
программу непосредственно из самой подпрограммы обработки прерывания. Для прямо-
го непосредственного возврата достаточно адрес возврата сохранить в стеке, что и дела-
ет аппаратура процессора. При этом стек легко обеспечивает возможность возврата в
случае вложенных прерываний, поскольку он всегда реализует дисциплину LCFS (last
come - first served).
Однако если бы контекст процессов сохранялся просто в стеке, как это обычно
реализуется аппаратурой, а не в дескрипторах задач, то не было бы возможности гибко
подходить к выбору той задачи, которой нужно передать процессору после завершения
работы подпрограммы обработки прерывания.
Рассмотрим как производится обработка прерываний в ОС Windows [4]. В этой
операционной системе каждому прерыванию назначается определенный приоритет, на-
зываемый уровнем запроса прерывания (interrupt request level, IRQL). IRQL назначается
источнику прерывания. Например, мышь имеет IRQL, который присваивается посту-
пающим от нее сигналам. Системный таймер также генерирует собственные прерыва-
ния, которым назначается другой IRQL.
83
программный комплекс нечто большее, нежели просто обеспечение быстрой реакции на
прерывания.
Как мы уже знаем, при появлении запроса на прерывание система прерываний
идентифицирует сигнал и, если прерывания разрешены, управление передается на соот-
ветствующую подпрограмму обработки. Из рис.3.2 видно, что в подпрограмме обработ-
ки прерывания имеются две служебные секции. Это - первая секция, в которой осуще-
ствляется сохранение контекста прерванной задачи, который не смог быть сохранен на
2-м шаге, и последняя, заключительная секция, в которой, наоборот, осуществляется
восстановление контекста. Для того чтобы система прерываний не среагировала повтор-
но на сигнал запроса на прерывание, она обычно автоматически «закрывает» (отключа-
ет) прерывания, поэтому необходимо потом в подпрограмме обработки прерываний
вновь включать систему прерываний. Установка рассмотренных режимов обработки
прерываний (с относительными и абсолютными приоритетами, и по правилу LCFS)
осуществляется в конце первой секции подпрограммы обработки. Таким образом, на
время выполнения центральной секции (в случае работы в режимах с абсолютными при-
оритетами и по дисциплине LCFS) прерывания разрешены. На время работы заключи-
тельной секции подпрограммы обработки система прерываний должна быть отключена
и после восстановления контекста вновь включена. Поскольку эти действия необходимо
выполнять практически в каждой подпрограмме обработки прерываний, во многих опе-
рационных системах первые секции подпрограмм обработки прерываний выделяются в
специальный системный программный модуль, называемый супервизором прерываний.
Супервизор прерываний прежде всего сохраняет в дескрипторе текущей задачи
рабочие регистры процессора, определяющие контекст прерываемого вычислительного
процесса. Далее он определяет ту подпрограмму, которая должна выполнить действия,
связанные с обслуживанием настоящего (текущего) запроса на прерывание. Наконец,
перед тем как передать управление этой подпрограмме, супервизор прерываний уста-
навливает необходимый режим обработки прерывания. После выполнения подпрограм-
мы обработки прерывания управление вновь передается супервизору, на этот раз уже на
тот модуль, который занимается диспетчеризацией задач. И уже диспетчер задач, в свою
очередь, в соответствии с принятым режимом распределения процессорного времени
(между выполняющимися процессами) восстановит контекст той задачи, которой будет
решено выделить процессор. Рассмотренная схема проиллюстрирована на рис.3.4 [2].
Как видно из рис.3.4, здесь нет непосредственного возврата в прерванную ранее
программу непосредственно из самой подпрограммы обработки прерывания. Для прямо-
го непосредственного возврата достаточно адрес возврата сохранить в стеке, что и дела-
ет аппаратура процессора. При этом стек легко обеспечивает возможность возврата в
случае вложенных прерываний, поскольку он всегда реализует дисциплину LCFS (last
come - first served).
Однако если бы контекст процессов сохранялся просто в стеке, как это обычно
реализуется аппаратурой, а не в дескрипторах задач, то не было бы возможности гибко
подходить к выбору той задачи, которой нужно передать процессору после завершения
работы подпрограммы обработки прерывания.
Рассмотрим как производится обработка прерываний в ОС Windows [4]. В этой
операционной системе каждому прерыванию назначается определенный приоритет, на-
зываемый уровнем запроса прерывания (interrupt request level, IRQL). IRQL назначается
источнику прерывания. Например, мышь имеет IRQL, который присваивается посту-
пающим от нее сигналам. Системный таймер также генерирует собственные прерыва-
ния, которым назначается другой IRQL.
83
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »
