Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_СГTУ new v10.doc
Скачиваний:
101
Добавлен:
12.11.2019
Размер:
4.13 Mб
Скачать

1.4. Прерывания

Прерывание представляет собой механизм, позволяющий координировать параллельное функционирование отдельных устройств ВС и реагировать на особые состояния, возникающие при работе процессора, таким образом, прерывание – это принудительная передача управления от выполняемой программы к системе, происходящее при возникновении определённого события.

Механизм прерывания реализуется аппаратно-программными средствами и включает в себя следующие этапы:

  1. установка факта прерывания и его идентификация;

  2. запоминание контекста (состояния) прерванного процесса; состояние процесса определяют: счетчик команд (PС), содержимое регистров процессора (АС), а также может включать спецификацию режима (пользовательский или привилегированный) и др. информацию хранящуюся в регистре флага;

  3. управление аппаратно передаётся подпрограмме обработки идентифицированного прерывания, в простейшем случае в регистр счетчика команд заносится начальный адрес обработки, а в соответствующие регистры - информация словосостояния;

  4. сохраняется информация о прерванной программе, если это не было сделано аппаратно;

  5. обработка прерывания может быть выполнена обработчиком аппаратного прерывания, но чаще используется обработчик ОС;

  6. восстанавливается информация, относящаяся к прерванному процессу;

  7. возврат управления прерванной программы.

При этом этапы 1-3 реализуются аппаратно, а 4-7 программно.

При возникновении запроса на прерывание естественный ход вычислений нарушается, и управление передаётся программе обработчика возникшего прерывания. При этом средствами аппаратуры (с помощью механизмов стековой памяти) сохраняется адрес той команды, с которой следует продолжить выполнение прерванной программы. После выполнения программы обработки прерывания управление возвращается прерванной ранее программе посредством занесения в указатель команд сохранённого адреса команды из стека (рис.9). Такая схема используется для простейших ОС, для более сложных ОС при обработке прерываний используется супервизор прерываний [3].

В данном случае нет непосредственного возврата в прерванную ранее программу, прямо из подпрограммы обработки прерываний. Такая схема используется для многозадачных и многопользовательских ОС. Таким образом, главными функциями механизма прерываний являются:

  • распознавание или классификация прерываний;

  • передача управления соответствующему обработчику прерываний;

  • корректное возвращение к прерванной программе.

Рис.9 . Исполнение процессором команд с прерыванием

Прерывание, возникающее при работе ВС можно разделить: на внешние (асинхронные), внутренние (синхронные) и программные.

Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса (программы) (например, прерывание таймера, внешних устройств, по нарушению питания, с пульта оператора ВС, от другого процессора или ВС).

Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями (например, при нарушении адресации (в адресной части выполняемой команды указан запрещённый или несуществующий адрес, обращение к отсутствующей странице или сегменту при организации механизма витруальной памяти), при наличии в поле кода операции не используемой двоичной комбинации, при делении на 0, при переполнении или исчезновении порядка, при обнаружении ошибки чётности и ошибок в работе различных устройств аппаратуры средствами контроля.

Существуют программные прерывания, которые возникают при выполнении процессором соответствующей команды (INT). По этой команде процессор осуществляет те же действия, что и при обработке внутренних прерываний (рис.10). Этот механизм введён для переключения на системные программные модули по правилам прерываний, а не подпрограмм, это обеспечивает автоматическое переключение процессора в привилегированный режим с возможностью выполнения любых команд [3].

Рис.10. Схема обработки прерывания

В многопользовательских и многозадачных ОС применяется концепция реентерабельности. Реентерабельной называется процедура, последовательность команд которой может одновременно использоваться несколькими приложениями. Для обеспечения этой концепции необходимо, чтобы программный код не был самомодифицирующимся, а локальные данные каждого пользователя должны храниться отдельно друг от друга. Исполнение реентерабельной процедуры может быть приостановлено с помощью прерывания, а после возврата из него корректно продолжиться. В многопользовательских и многозадачных ОС реентерабельность позволяет более эффективно использовать ОП. В ней хранится только одна копия программного кода процедуры, даже если к ней обращаются несколько различных приложений.

Стек — это специальным образом организованный участок памяти, используемый для временного хранения переменных, для передачи параметров вызываемым подпрограммам и для сохранения адреса возврата при вызове процедур и прерываний. Легче всего представить стек в виде стопки листов бумаги (это одно из значений слова «stack» в английском языке) — вы можете класть и забирать листы бумаги только с вершины стопки. Таким образом, если записать в стек числа 1, 2, 3, то при чтении они будут получаться в обратном порядке — 3, 2, 1.

Для процессоров Intel x86 стек располагается в сегменте памяти, описываемом регистром SS, а текущее смещение вершины стека записано в регистре ESP, причем при записи в стек значение этого смещения уменьшается, то есть стек растет вниз от максимально возможного адреса.

Такое расположение стека «вверх ногами» необходимо в бессегментной модели памяти, когда все сегменты, включая сегмент стека и сегмент кода, занимают одну и ту же область — всю память. Тогда программа исполняется в нижней области памяти, в области малых адресов, и EIP растет, а стек располагается в верхней области памяти, и ESP уменьшается.