Устройствам которые используют векторные прерывания назначается
Перейти к содержимому

Устройствам которые используют векторные прерывания назначается

  • автор:

ОС архив / Лекция 6

Прерывания. Классы прерываний. Механизм прерываний. Приоритезация маскирование прерываний. Последовательность действий при обработке прерываний. Диспетчер прерываний. Обработка ловушек в Windows. Обработка прерываний в Windows. Обработка исключений в Windows.

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

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

В зависимости от источника прерывания делятся на 3 класса:

  • внешние (аппаратные);
  • внутренние (исключения);
  • программные.

Внешние прерывания могут возникать в результате действий пользователя или оператора за терминалом, или в результате поступления сигналов от аппаратных устройств – сигналов завершения операций ввода-вывода, вырабатываемых контроллерами внешних устройств компьютера, такими как принтер или винчестер, или же сигналов от датчиков управляемых компьютером технических объектов. Внешние прерывания называют также аппаратными, отражая тот факт, что прерывание возникает вследствие подачи некоторой аппаратурой сигнала, который передается на специальный вход прерывания процессора. Отличительной чертой данного класса прерываний является то, что аппаратное прерывание является асинхронным событием. Оно может произойти в любой момент независимо от текущих команд, выполняемых процессором. Аппаратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций. При этом система после обработки прерывания продолжает выполнение процесса, начиная со следующей инструкции. Важной особенностью процедур, выполняемых по запросам прерываний, является то, что они выполняют работу, чаще всего никак не связанную с текущим процессом. Например, драйвер диска может получить управление после того, как контроллер диска записал в соответствующие сектора информацию, полученную от процесса A. В типичном случае в этот момент процесс A будет находиться в состоянии ожидания завершения операции ввода-вывода и драйвер прервет какой-либо другой процесс B. Внутренние прерывания, называемые также исключениями (exeption), происходят синхронно выполнению программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы. Это может быть деление на нуль, ошибки защиты памяти, попытка выполнить привилегированную команду в пользовательском режиме и т.п. Повторный запуск программы в аналогичных условиях с теми же данными позволит воспроизвести исключение. Программное прерывание возникает при выполнении особой команды процессора, выполнение которой имитирует прерывание, то есть переход на новую последовательность инструкций. Одной из причин появления инструкций прерываний в системе команд процессора является то, что их использование часто приводит к более компактному коду программ по сравнению с использованием стандартных команд выполнения процедур. Это объясняется тем, что разработчики процессора обычно резервируют для обработки прерываний небольшое количество возможных подпрограмм, так что длина операнда в команде программного прерывания меньше, чем в команде перехода на подпрограмму. Например, программное прерывание в процессорах x86 осуществляется с использованием инструкции INT, которая имеет длину операнда 1 байт (и, следовательно, предусматривает возможность применения 256 программ обработки прерывания). Другой причиной применения программных прерываний является возможность смены пользовательского режима на привилегированный одновременно с вызовом процедуры. В результате программные прерывания часто используются для выполнения ограниченного количества функций ядра операционной системы – системных вызовов. Прерываниям приписывается приоритет, с помощью которого они ранжируются по степени важности и срочности. Прерывания обычно обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению ресурсами операционной системы – принтером, дисками, памятью, процессором и.п. Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний (Interrupt Service Routine, ISR). Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения – специальными модулями ядра, программные прерывания – процедурами ОС, обслуживающими системные вызовы. Механизм прерываний поддерживается аппаратными средствами компьютера и программными средствами операционной системы. Аппаратная поддержка прерываний зависит от типа процессора и других аппаратных компонентов, передающих сигнал запроса прерывания от внешнего устройства к процессору (таких как контроллер внешнего устройства, шины подключения внешних устройств, контроллер прерываний). Существуют два основных способа, с помощью которых шины выполняют прерывания: векторный (vectored) и опрашиваемый (polled). В обоих способах процессору предоставляется информация об уровне приоритета прерывания на шине подключения внешних устройств. В случае векторных прерываний в процессор передается также информация о начальном адресе программы – обработчика прерывания. Устройствам, использующим векторные прерывания, назначается вектор прерываний. Вектор прерываний, передаваемый в процессор, представляет собой целое число в диапазоне от 0 до 255, указывающий на одну из 256 программ обработки прерываний, адреса которых находятся в таблице обработчиков прерываний. Этот вектор может быть фиксированным, конфигурируемым или программируемым. При получении сигнала запроса прерывания процессор выполняет специальный цикл подтверждения прерывания, в котором устройство должно идентифицировать себя. В течение этого цикла устройство отвечает, выставляя на шину вектор прерываний. Затем процессор использует этот вектор для нахождения обработчика прерывания. При использовании опрашиваемых прерываний процессор получает от запросившего прерывание устройства только информацию об уровне приоритета прерывания. С каждым уровнем прерываний может быть связано несколько устройств и соответственно несколько обработчиков прерываний. Процессор должен определить, какое устройство запросило прерывание. Это достигается вызовом всех обработчиков прерывания для данного уровня приоритета, пока один из обработчиков не подтвердит, что прерывание пришло от обслуживаемого им устройства. Механизм прерываний чаще всего поддерживает приоритезацию и маскирование прерываний. Приоритезация означает, что все источники прерываний делятся на классы и каждому классу назначается свой уровень приоритета запроса на прерывание. Приоритеты могут обслуживаться как относительные и абсолютные. Обслуживание запросов прерываний по схеме с относительными приоритетами заключается в том, что при одновременном поступлении запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет. Однако в дальнейшем при обслуживании этого запроса процедура обработки прерывания уже не откладывается даже в том случае, когда появляются более приоритетные запросы – решение о выборе нового запроса принимается только в момент завершения обслуживания очередного прерывания. В схеме с абсолютными приоритетами более приоритетным прерываниям разрешается приостанавливать работу процедур обслуживания менее приоритетных прерываний. При поступлении запроса определенного класса его приоритет сравнивается с текущим, и если приоритет запроса выше, текущая процедура обработки прерываний вытесняется, а по завершении обслуживания нового прерывания происходит возврат к прерванной процедуре. Упорядоченное обслуживание запросов прерываний наряду со схемами приоритетной обработки запросов может выполняться механизмом маскирования запросов. Маскирование прерывания означает, что оно не обслуживается. Схема маскирования предполагает возможность временного маскирования прерываний любого класса независимо от уровня приоритета. Обобщенно последовательность действий по обработке прерываний можно описать таким образом:

  1. При возникновении прерывания (или исключения) происходит первичное аппаратное распознавание типа прерывания. Если прерывания данного типа в этот момент запрещены, то процессор продолжает поддерживать естественный ход выполнения команд. В противном случае в зависимости от поступившей в процессор информации (уровень прерывания, вектор прерывания или тип условия внутреннего прерывания) происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в специальной таблице операционной системы.
  2. Автоматически сохраняется некоторая часть контекста прерванного потока (значение счетчика команд, слова состояния машины, некоторых регистров общего назначения и др.), которая позволит ядру возобновить исполнение потока после обработки прерывания.
  3. Одновременно с загрузкой адреса процедуры обработки прерываний в счетчик команд может автоматически выполняться загрузка нового значения слова состояния машины, которое определяет режим работы процессора при обработке прерывания, в том числе работу в привилегированном режиме.
  4. Временно запрещаются прерывания данного типа, чтобы не образовалась очередь вложенных друг в друга потоков одной и той же процедуры. Это может производиться с использованием механизма маскирования прерываний.
  5. После обработки прерывания ядром операционной системы прерванный контекст восстанавливается и работа потока возобновляется.

Для упорядочения работы обработчиков прерываний в операционных системах применяется тот же механизм, что и для упорядочения работы пользовательских процессов – механизм приоритетных очередей. Все источники прерываний делятся на несколько классов, причем каждому классу присваивается приоритет. В операционной системе выделяется программный модуль, который занимается диспетчеризацией обработчиков прерываний – диспетчер прерываний. При возникновении прерывания диспетчер вызывается первым. Он запрещает ненадолго все прерывания, а затем выясняет причину прерывания. После этого диспетчер сравнивает назначенный данному источнику прерывания приоритет и сравнивает его с текущим приоритетом потока команд, выполняемого процессором. В этот момент процессор уже может выполнять инструкции другого обработчика прерываний, имеющего некоторый приоритет. Если приоритет нового запроса выше текущего, то выполнение текущего обработчика приостанавливается и он помещается в соответствующую очередь обработчиков прерываний. В противном случае в очередь помещается обработчик нового запроса. Диспетчер прерываний в Windows называется обработчиком ловушек (trap handler). Рисунок 6.1 иллюстрирует некоторые ситуации, в которых активизируются обработчики ловушек. Рис. 6.1. Диспетчеризация ловушек. Ядро Windows различает прерывания и исключения. Прерывание является асинхронным событием. Исключение представляет собой синхронное событие. Прерывания и исключения можно генерировать как программно, так и аппаратно. При аппаратном прерывании или исключении процессор записывает статусную информацию в стек ядра для прерванного потока. Если поток выполнялся в пользовательском режиме, Windows переключается на стек режима ядра для потока. Затем создает в стеке ядра прерванного потока фрейм ловушки (trap frame), в котором сохраняет информацию о состоянии потока. Программное прерывание ядро обслуживает либо при обработке аппаратного прерывания, либо синхронно – при вызове потоком функции ядра, относящейся к данному программному прерыванию. В большинстве случаев ядро устанавливает функции, выполняющие общую обработку ловушек до и после передачи управления другим функциям, которые ставят ловушки. Например, когда устройство генерирует прерывание, обработчик ловушек аппаратных прерываний (принадлежащий ядру) передает управление процедуре обслуживания прерывания (interrupt service routine, ISR), предоставленной драйвером соответствующего устройства. Если прерывание возникло в результате вызова системного сервиса, обработчик ловушек общесистемных сервисов передает управление функции указанного системного сервиса в исполнительной системе. Ядро также устанавливает обработчики для ловушек, которые оно не ожидает или не обрабатывает. На аппаратных платформах, поддерживаемых Windows, прерывания, связанные с внешним вводом-выводом, поступают по одной из линий контроллера прерываний, который, в свою очередь связан с процессором единственной линией, по которой контроллер и уведомляет о прерывании. Как только процессор прерывается, он требует от контроллера запрос прерывания (interrupt request, IRQ). Контроллер транслирует IRQ в номер прерывания, используемый как индекс в структуре, называемой таблицей диспетчеризации прерываний (interrupt dispatch table, IDT), и передает управление соответствующей процедуре. При загрузке Windows заносит в IDT указатели на процедуры ядра, обрабатывающие каждое прерывание и исключение (первая часть IDT используется для исключений, а аппаратные прерывания располагаются за ней). Windows увязывает аппаратные IRQ с номерами прерываний в IDT. Эта таблица используется системой и при конфигурировании обработчиков ловушек для исключений. Число IRQ на конкретной машине определяется архитектурой используемого в ней контроллера прерываний. Хотя контроллеры прерываний различают уровни приоритетов прерываний, Windows использует свою схему приоритетов прерываний, известную под названием уровни запросов прерываний (interrupt request levels, IRQL). Ядро определяет стандартный набор IRQL для программных прерываний, а HAL увязывет IRQL с номерами аппаратных прерываний. IRQL, определенные для архитектуры x86, показаны на рис. 6.2. Рис. 6.2. Уровни запросов прерываний в x86-системах Прерывания обслуживаются в порядке их приоритета, и прерывания с более высоким приоритетом вытесняют обработку прерываний с более низким приоритетом. При возникновении прерывания с высоким приоритетом процессор сохраняет информацию о состоянии прерванного потока и активизирует сопоставленный с данным прерыванием диспетчер ловушки. Последний повышает IRQL и вызывает процедуру обслуживания прерывания ISR. После выполнения ISR диспетчер прерывания понижает IRQL процессора до исходного уровня и загружает сохраненные ранее данные о состоянии машины. Прерванный поток возобновляется с той точки, где он был прерван. Когда ядро понижает IRQL, могут «материализоваться» ранее замаскированные прерывания с более низким приоритетом. Тогда вышеописанный процесс повторяется ядром для обработки и этих прерываний. Типичная схема обслуживания прерываний показана на рис. 6.3. В отличие от прерываний, которые могут возникнуть в любой момент, исключения являются прямым следствием действий выполняемой программы. Windows вводит понятие структурной обработки исключений (structured exception handling, SHE), позволяющей приложениям получить управление при возникновении исключений. При этом приложение может исправить ситуацию, которая привела к исключению, или уведомить систему о том, что данное исключение ему неизвестно, и тогда система продолжит поиск подходящего обработчика для данного исключения. Рис. 6.3. Типичная схема обслуживания прерываний В системах типа x86 все исключения имеют предопределенные номера прерываний, прямо соответствующие записям в IDT, ссылающимся на обработчики ловушек конкретных исключений. В таблице 6.1 перечислены исключения, определенные для систем типа x86, с указанием номеров прерываний.

Номер прерывания Исключение
0 Divide Error (ошибка деления)
1 DEBUG TRAP (ловушка отладки)
2 NMI/NPX Error (ошибка NMI/NPX)
3 Breakpoint (точка прерывания)
4 Overflow (переполнение)
5 BOUND/Print Screen
6 Invalid Opcode (неправильный код операции)
7 NPX Not Available (NPX недоступен)
8 Double Exception (двойное исключение)
9 NPX Segment Overrun (выход за пределы сегмента NPX)
A Invalid Task State Segment (неправильный TSS)
B Segment Not Present (сегмент отсутствует)
C Stack Fault (ошибка стека)
D General Protection (ошибка общей защиты)
E Page Fault (ошибка страницы)
F Зарезервировано Intel
10 Floating Point (ошибка в операции с плавающей точкой)
11 Alignment Check (ошибка контроля выравнивания)

Таблица 6.1. Исключения в системах типа x86 Все исключения, кроме достаточно простых, которые могут быть разрешены обработчиком ловушек, обслуживаются модулем ядра – диспетчером исключений (exception dispatcher). Его задача заключается в поиске обработчика, способного «справиться» с данным исключением. Ядро перехватывает и обрабатывает некоторые из этих исключений прозрачно для пользовательских программ. Так, если при выполнении отлаживаемой программы встретилась точка прерывания, генерируется исключение, обрабатываемое ядром за счет вызова отладчика. Ряд исключений ядро обрабатывает, просто возвращая код неудачной операции. Определенные исключения могут передаваться в неизменном виде пользовательским процессам. Например, при ошибке доступа к памяти или при переполнении в ходе арифметической операции генерируется исключение, не обрабатываемое операционной системой. Для обработки этих исключений подсистема окружения может устанавливать обработчики исключений на основе SEH-фремйма. Этим термином обозначается обработчик исключения, сопоставленный с вызовом конкретной процедуры. При активизации такой процедуры в стек заталкивается стековый фрейм, представляющий вызов процедуры. Со стековым фреймом можно сопоставить один или несколько обработчиков исключений, каждый из которых защищает определенный блок кода исходной программы. При возникновении исключения ядро ищет обработчик, сопоставленный с предыдущим стековым фреймом, — и так до тех пор, пока не будет найден подходящий обработчик. Если обработчик не удалось найти, ядро вызывает собственные обработчики по умолчанию. Когда происходит исключение, цепочка событий начинается в ядре. Процессор передает управление обработчику ловушек в ядре, который создает фрейм ловушки, а также запись исключения, содержащую сведения о ее причине и другую сопутствующую информацию. Если исключение возникло в режиме ядра, то для его обработки диспетчер исключений просто вызывает процедуру поиска подходящего обработчика SEH-фрейма. Поскольку необработанные исключения режима ядра были бы фатальными ошибками операционной системы, диспетчер всегда находит какой-нибудь отладчик. Если исключение возникло в пользовательском режиме, диспетчер предпринимает более сложные действия. Подсистема windows предусматривает порт отладчика (debugger port) и порт исключений (exception port) для приема уведомлений об исключениях пользовательского режима в Windows-процессах. Они применяются ядром при обработке исключений по умолчанию, как показано на рис. 6.4. Рис. 6.4. Диспетчеризация исключений Первым делом диспетчер исключений проверяет, подключен ли к процессу, вызвавшему исключение, отладчик. Если подключен, диспетчер исключений посылает отладчику первое предупреждение (в Windows XP и более поздних системах диспетчер посылает сообщение объекта отладчика объекту отладки, сопопоставленному с процессом). Если к процессу не подключен отладчик или отладчик не в состоянии обработать данное исключение, диспетчер исключений переключается в пользовательский режим, копирует фрей ловушки в пользовательский стек и вызывает процедуру поиска обработчика SEH-фрейма. Если поиск не дал результатов, диспетчер возвращается в режим ядра и снова вызывает отладчик. При этом посылается второе предупреждение. Если отладчик не запущен и обработчики SEH-фреймов не найдены, ядро посылает сообщение в порт исключений, сопоставленный с процессом потока. Порт исключений дает возможность подсистеме окружения транслировать исходное исключение в уведомление или исключение, специфичное для ее окружения. Далее выводится окно сообщения, уведомляющее пользователя о сбое, и процесс завершается.

Механизм прерываний

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

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

Устройствам, которые используют векторные прерывания, назначается вектор прерываний. Он представляет собой электрический сигнал, выставляемый на соответствующие шины процессора и несущий в себе информацию об определенном, закрепленном за данным устройством номере, который идентифицирует соответствующий обработчик прерываний. Этот вектор может быть фиксированным, конфигурируемым (например, с использованием переключателей) или программируемым. Операционная система может предусматривать процедуру регистрации вектора обработки прерываний для определенного устройства, которая связывает некоторую подпрограмму обработки прерываний с определенным вектором. При получении сигнала запроса прерывания процессор выполняет специальный цикл подтверждения прерывания, в котором устройство должно идентифицировать себя. В течение этого цикла устройство отвечает, выставляя на шину вектор прерываний. Затем процессор использует этот вектор для нахождения обработчика данного прерывания.

При использовании опрашиваемых прерываний процессор получает от запросившего прерывание устройства только информацию об уровне приоритета. С каждым уровнем прерываний может быть связано несколько устройств и, соответственно, несколько программ — обработчиков прерываний. При возникновении прерывания процессор должен определить, какое устройство из тех, которые связаны с данным уровнем прерываний, действительно запросило прерывание. Это достигается вызовом всех обработчиков прерываний для данного уровня приоритета, пока один из обработчиков не подтвердит, что прерывание пришло от обслуживаемого им устройства. Если же с каждым уровнем прерываний связано только одно устройство, то определение нужной программы обработки прерывания происходит немедленно, как и при векторном прерывании.

Механизм прерываний некоторой аппаратной платформы может сочетать векторный и опрашиваемый типы прерываний. Типичным примером такой реализации является платформа персональных компьютеров на основе процессоров Intel Pentium. Шины, используемые в этой платформе в качестве шин подключения внешних устройств, поддерживают механизм опрашиваемых прерываний. Контроллеры периферийных устройств выставляют на шину не вектор, а сигнал запроса прерывания определенного уровня IRQ. Однако в процессоре Pentium система прерываний является векторной. Вектор прерываний в процессор Pentium поставляет контроллер прерываний, который отображает поступающий от шины сигнал IRQ на определенный номер вектора.

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

Механизм прерываний чаще всего поддерживает приоритезацию и маскирование прерываний. Приоритезация означает, что все источники прерываний делятся на классы и каждому классу назначается свой уровень приоритета запроса на прерывание. Приоритеты могут обслуживаться как относительные и абсолютные. Обслуживание запросов прерываний по схеме с относительными приоритетами заключается в том, что при одновременном поступлении запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет. Однако в дальнейшем при обслуживании этого запроса процедура обработки прерывания уже не откладывается даже в том случае, когда появляются более приоритетные запросы, — решение о выборе нового запроса принимается только в момент завершения обслуживания очередного прерывания. Если же более приоритетным прерываниям разрешается приостанавливать работу процедур обслуживания менее приоритетных прерываний, то это означает, что работает схема приоритезации с абсолютными приоритетами.

Если процессор работает по схеме с абсолютными приоритетами, то он поддерживает в одном из своих внутренних регистров переменную, фиксирующую уровень приоритета обслуживаемого в данный момент прерывания. При поступлении запроса из определенного класса его приоритет сравнивается с текущим приоритетом процессора; и если приоритет запроса выше, то текущая процедура обработки прерываний вытесняется, а по завершении обслуживания нового прерывания происходит возврат к прерванной процедуре.

Упорядоченное обслуживание запросов прерываний, наряду со схемами приоритетной обработки запросов, может выполняться механизмом маскирования запросов. Собственно говоря, в описанной схеме абсолютных приоритетов выполняется маскирование — при обслуживании некоторого запроса все запросы с равным или более низким приоритетом маскируются, т.е. не обслуживаются. Схема маскирования предполагает возможность временного маскирования прерываний любого класса независимо от уровня приоритета.

Обобщенно последовательность действий аппаратных и программных средств по обработке прерывания можно описать следующим образом.

  • 1. При возникновении сигнала (для аппаратных прерываний) или условия прерывания (для внутренних прерываний) происходит первичное аппаратное распознавание типа прерывания. Если прерывания данного типа в настоящий момент запрещены (приоритетной схемой или механизмом маскирования), то процессор продолжает поддерживать естественный ход выполнения команд. В противном случае в зависимости от поступившей в процессор информации (уровень прерывания, вектор прерывания или тип условия внутреннего прерывания) происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в специальной таблице операционной системы, размещаемой либо в регистрах процессора, либо в определенном месте оперативной памяти.
  • 2. Автоматически сохраняется некоторая часть контекста прерванного потока, которая позволит ядру возобновить исполнение потока процесса после обработки прерывания. В это подмножество обычно включаются значения счетчика команд, слова состояния компьютера, хранящего признаки основных режимов работы процессора, а также нескольких регистров общего назначения, которые требуются программе обработки прерывания. Может быть сохранен и полный контекст процесса, если ОС обслуживает данное прерывание со сменой процесса. Однако в общем случае это не обязательно, часто обработка прерываний выполняется без вытеснения текущего процесса.
  • 3. Одновременно с загрузкой адреса процедуры обработки прерываний в счетчик команд может автоматически выполняться загрузка нового значения слова состояния компьютера, которое определяет режимы работы процессора при обработке прерывания, в том числе работу в привилегированном режиме. В некоторых моделях процессоров переход в привилегированный режим за счет смены состояния машины при обработке прерывания является единственным способом смены режима. Прерывания практически во всех мультипрограммных ОС обрабатываются в привилегированном режиме модулями ядра, так как при этом обычно нужно выполнить ряд критических операций, от которых зависит жизнеспособность системы, — управлять внешними устройствами, перепланировать потоки и т.п.
  • 4. Временно запрещаются прерывания данного типа, чтобы не образовалась очередь вложенных друг в друга потоков одной и той же процедуры. Детали выполнения этой операции зависят от особенностей аппаратной платформы, например может использоваться механизм маскирования прерываний. Многие процессоры автоматически устанавливают признак запрета прерываний в начале цикла обработки прерывания, в противном случае это делает программа обработки прерываний.
  • 5. После того как прерывание обработано ядром операционной системы, прерванный контекст восстанавливается и работа потока возобновляется с прерванного места. Часть контекста восстанавливается аппаратно по команде возврата из прерываний (например, адрес следующей команды и слово состояния машины), а часть — программным способом, с помощью явных команд извлечения данных из стека. При возврате из прерывания блокировка повторных прерываний данного типа снимается.

ОС / Тесты / Тест 1 / Полный тест с ответами

Операционные системы (6с. 1п.к.). 30 мин. 1. В Windows NT вытесненный поток помещается: 1. В конец очереди готовых потоков соответствующего уровня приоритета 2. В начало очереди готовых потоков соответствующего уровня приоритета 2. Средство вычислительной системы, которое может быть выделено процессу на определенный интервал времени, называется: 1. Прерыванием 2. Процедурой 3. Системным вызовом 4. Потоком 5. Ресурсом 3. При создании процессов подсистема управления процессами тесно взаимодействует с: 1. Подсистемой управления памятью 2. Пользователем 3. Выводом 4. Подсистемой управления вводом 5. Оперативной памятью 6. Файловой системой 4. Набор функций микроядра обычно содержит функции следующих слоев обычного ядра: 1. Слой интерфейса системных вызовов 2. Слой базовых механизмов 3. Слой менеджеров ресурсов 4. Слой машинно-зависимых компонентов 5. К «твердым» ресурсам относятся: 1. Процессор 2. Аппаратные

3. Программные 4. Информационные 5. Память 6. Поддержка отказоустойчивости реализуется ОС, как правило, на основе: 1. Отключения устройств 2. Поддержки зеркальных серверов 3. Ограничения доступа 4. Поддержки дублирования контроллера 5. Обслуживания резервных устройств ввода-вывода 7. В качестве аргумента системного вызова wait() поток может указать максимальное время ожидания перехода синхронизирующего объекта в … состояние. 1. Несигнальное 2. Сигнальное 3. Выключенное 8. Семафор это: 1. Обобщенный случай блокирующей переменной 2. Мьютекс 3. Обобщенный случай критической секции 4. Объект-событие 9. События – это 1. пассивные наборы разделяемых переменных и повторно входимых процедур доступа к ним, которыми процессы пользуются в режиме разделения, причем в каждый момент времени им может пользоваться только один процесс 2. средства синхронизации, которые используются в качестве сигналов о завершении какой-либо операции 3. принцип действия мьютесов, но в них заложена возможность подсчёта ресурсов, что позволяет заранее определенному числу потоков одновременно войти в синхронизируемый участок кода 4. объекты ядра, позволяющие координировать взаимное исключение доступа к разделяемому ресурсу

10. Таблица прерываний в защищенном режиме работы процессора располагается по адресу: 1. 00000 2. 0AAFF 3. 003FF 4. Может располагаться в любом месте физической памяти 11. Многозадачность на основе режима разделения времени называется … 1. Независимой 2. Вытесняющей 3. Совместной 4. Кооперативной 5. Невытесняющей 12. В ОС Windows NT у потоков в диапазоне реального времени базовый приоритет: 1. Меньше текущего 2. Идентичен текущему 3. Больше текущего 13. Производительность ОС на основе микроядра (по сравнению с классической архитектурой) будет … 1. Иногда ниже 2. Всегда ниже 3. Не ниже 4. Такая же 5. Выше 14. В ОС на основе микроядра при обращении к функции ядра, смена режимов происходит … раза 1. 1 2. 4 3. 5 4. 3 5. 2

15. Запрет прерываний в процессоре x86 реализуется с помощью команды: 1. CMP 2. STI 3. INT 4. CLI 16. Планировщик называется статическим, если он принимает решение о планировании: 1. Не во время работы системы, а заранее 2. Во время работы системы на основе статического анализа текущей ситуации 17. Алгоритм планирования, основанный на квантовании относится к: 1. Вытесняющим алгоритмам планирования 2. Невытесняющим алгоритмам планирования 18. Некоторое число (номер) в диапазоне 0-255, указывающее на одну из 256 программ обработки прерываний, адреса которых хранятся в таблице прерываний, называется … прерывания (ий) 1. Адресом 2. Вектором 3. Адресом обработчика 4. Номером 5. Номером обработчика 19. Для упорядочивания работы обработчиков прерываний в ОС применяется механизм: 1. Очередей без приоритета 2. Очередей реального времени 3. Приоритетных очередей 20. Возможность интерактивного взаимодействия пользователя и программы возникает с появлением: 1. Мультипрограммных вычислительных систем 2. Систем пакетной обработки

3. Систем разделения времени 21. Программное прерывание в процессоре x86 реализуется с помощью команды: 1. STI 2. CMP 3. CLI 4. INT 22. Выберете алгоритм распределения памяти, который предусматривает использование внешней памяти: 1. Перемещаемыми разделами. 2. Фиксированными разделами 3. Динамическими разделами 4. Страничное распределение 23. Мультипрограммирование наиболее эффективно: 1. На уровне процессов 2. На уровне потоков 24. Мьютексы – это 1. средства синхронизации, которые используются в качестве сигналов о завершении какой-либо операции 2. объекты ядра, позволяющие координировать взаимное исключение доступа к разделяемому ресурсу 3. принцип действия семафоров, но в них заложена возможность подсчёта ресурсов, что позволяет заранее определенному числу потоков одновременно войти в синхронизируемый участок кода 4. пассивные наборы разделяемых переменных и повторно входимых процедур доступа к ним, которыми процессы пользуются в режиме разделения, причем в каждый момент времени им может пользоваться только один процесс 25. При совместном использовании одного уровня IRQ несколькими устройствами программа обработки прерываний работает в соответствии с: 1. Схемой векторных прерываний 2. Схемой опрашиваемых прерываний

26. Конвейер(канал,pipe) – это 1. буфер в кеш-памяти, поддерживающий очередь байт по алгоритму FIFO 2. буфер в кеш-памяти, поддерживающий очередь байт по алгоритму «кратчайшая задача – первая» 3. буфер в оперативной памяти, поддерживающий очередь байт по алгоритму «кратчайшая задача – первая» 4. буфер в оперативной памяти, поддерживающий очередь байт по алгоритму FIFO 27. Способ реализации системных вызовов зависит от структурной организации ОС, связанной с особенностями: 1. Оперативной памяти 2. Внешней памяти 3. Обработки прерываний 4. Приоритетного обслуживания 5. Аппаратной платформы 28. При выполнении инструкции деления на 0 возникает: 1. Прерывания не происходит, но возникает ошибка 2. Внутреннее прерывание 3. Программное прерывание 29. Устройствам, которые используют векторные прерывания, назначается: 1. Приоритет прерывания 2. Драйвер 3. Вектор прерываний 4. Диспетчер прерывания 5. Процедура обработки прерывания 30. Процесс в мультипрограммном режиме может выполняться быстрее, чем в монопольном: 1. Да 2. Нет

31. Надежность ОС на основе микроядра (по сравнению с классической архитектурой) … 1. Не выше 2. Выше 3. Такая же 4. Ниже 5. Намного ниже 32. Разделение персонала, связанного с разработкой и эксплуатацией ЭВМ, на разработчиков, специалистов по эксплуатации, операторов и программистов произошло: 1. В первый период развития вычислительной техники (1945-55 г.г.) 2. В третий период развития вычислительной техники (1965-80 г.г.) 3. Во второй период развития вычислительной техники (1955-65 г.г.) 33. В ОС Windows NT процесс имеет: 1. Только базовое значение приоритета 2. Базовое и текущее значение приоритета 34. Системные семафоры – это 1. принцип действия мьютексов, но в них заложена возможность подсчёта ресурсов, что позволяет заранее определенному числу потоков одновременно войти в синхронизируемый участок кода 2. пассивные наборы разделяемых переменных и повторно входимых процедур доступа к ним, которыми процессы пользуются в режиме разделения, причем в каждый момент времени им может пользоваться только один процесс 3. средства синхронизации, которые используются в качестве сигналов о завершении какой-либо операции 4. объекты ядра, позволяющие координировать взаимное исключение доступа к разделяемому ресурсу 35. Следующие алгоритмы планирования возможно применить в интерактивных ОС: 1. Квантование с относительными динамическими приоритетами 2. Кратчайшая задача – первая

3. Абсолютные приоритеты 4. Относительные приоритеты 36. Результат работы, какого планировщика можно назвать расписанием: 1. Статистического 2. Динамического 3. Всех перечисленных 4. Статического 37. Выберите верные утверждения: 1. Дескриптор процесса содержит необходимую ядру информацию о процессе, не зависимо от того, находится ли образ процесса в оперативной памяти или выгружен на диск. К этой информации можно отнести состояние процесса, значения приоритета и идентификатор пользователя, создавшего процесс 2. Дескриптор процесса содержит необходимую ядру информацию о процессе для возобновления его выполнения с прерванного места. К этой информации можно отнести содержимое регистров процессора, описатели открытых данным процессом файлов 38. В ОС Windows NT Server квант по умолчанию равен: 1. Двадцати пяти интервалам системного таймера 2. Десяти интервалам системного таймера 3. Двенадцати интервалам системного таймера 4. Двадцати интервалам системного таймера 39. В ОС Windows NT поток имеет: 1. Базовое и текущее значение приоритета 2. Только базовое значение приоритета 40. Как правило, повышать приоритеты потоков в системе (в определенных пределах) могут: 1. Разработчики программ 2. Некоторые пользователи 3. Администраторы 4. Все

5. Все пользователи 41. Таблица прерываний в реальном режиме работы процессора состоит из: 1. 256 элементов 2. 255 элементов 3. 1024 элементов 4. 512 элементов 42. К преимуществам микроядерной архитектуры можно отнести следующее: 1. Расширяемость, надежность, переносимость 2. Производительность, надежность 3. Расширяемость, производительность, надежность 4. Расширяемость, производительность 43. Исключения обрабатываются: 1. Специальными модулями ядра 2. Процедурами ОС, обслуживающими системные вызовы 3. Драйверами внешних устройств 44. Синхронизация потоков заключается: 1. В согласованном доступе к аппаратным средствам 2. В согласованном выполнении системных вызовов этими потоками 3. В согласовании их скоростей путем приостановки потоков 45. Аппаратные прерывания обрабатываются: 1. Специальными модулями ядра 2. Драйверами внешних устройств 3. Процедурами ОС, обслуживающими системные вызовы 46. Группы, на которые обычно подразделяются вспомогательные модули ОС: 1. Утилиты 2. Библиотеки процедур различного назначения 3. Драйверы 4. Системные обрабатывающие программы

5. Сервисные программы 47. В соответствии с определением ОС ее главными функциями является предоставление удобств пользователю и эффективное управление ресурсами вычислительной машины. В вычислительной технике середины 50-х годов из этих функций доминировала: 1. Обе функции развивались параллельно без явного доминирования 2. Эффективное управление ресурсами 3. Предоставление удобств пользователю 48. На современном этапе в развитии операционных систем персональных компьютеров наблюдается … 1. революция 2. стагнация 3. эволюция 49. В процессор передается начальный адрес обработчика прерываний в случае использования опрашиваемого механизма прерываний: 1. Да 2. Нет 50. Выберите верные утверждения: 1. Совместимость на уровне исходных текстов требует наличия соответствующего компилятора на вычислительной машине, на которой планируют выполнять данное приложение, а также совместимости на уровне системных вызовов 2. Совместимость на уровне исходных текстов требует наличия соответствующего компилятора на вычислительной машине, на которой планируют выполнять данное приложение, а также совместимости на уровне системных вызовов и идентичности внутренней структуры исполняемого файла приложения 3. Совместимость на уровне исходных текстов требует наличия соответствующего компилятора на вычислительной машине, на которой планируют выполнять данное приложение, а также идентичности внутренней структуры исполняемого файла приложения, в тоже время совместимость на уровне системных вызовов не является обязательной 4. Совместимость на уровне исходных текстов требует наличия соответствующего компилятора на вычислительной машине, на которой

Обработка прерываний, векторы прерываний, программные прерывания, IRQ.

Здесь мы разберем такие важные темы, как: обработка прерываний, векторы прерываний, программные прерывания, IRQ, в общем поговорим на темы прерывания.

Идея прерывания была предложена в середине 50-х годов и основная цель введения прерываний – реализация синхронного режима работы и реализация параллельной работы отдельных устройств ЭВМ.

Прерывания и обработка прерываний зависят от типа ЭВМ, поэтому их реализацию относят к машинно-зависимым свойствам операционных систем.

Прерывание (interrupt) – это сигнал, заставляющий ЭВМ менять обычный порядок выполнения команд процессором.

Возникновение подобных сигналов обусловлено такими событиями, как:

  • завершение операций ввода-вывода.
  • истечение заранее заданного интервала времени.
  • попытка деления на нуль.
  • сбой в работе аппаратного устройства и др.

Обработка прерывания

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

Например прерывание с номером 9 — прерывание от клавиатуры, которое генерируется при нажатии и при отжатии клавиши. Используется для чтения данных с клавиатуры. Обозначается в ОС как IRQ1, где IRQ – обозначение прерывания, а 1 – приоритет прерывания. Данные о запросах на прерывание можно проанализировать в диспетчере устройств:

Обработчик прерываний – программа обработки прерывания, являющаяся частью ОС, предназначенная для выполнения ответных действий на условие, вызвавшее прерывание.

Предположим, что в момент поступления сигнала прерывания от некоторого источника программа А находится в решении. В результате управление автоматически передается обработчику прерываний. После завершения обработки управление может быть снова передано в ту точку программы А, где ее выполнение было прервано:

Векторы прерываний

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

Для микропроцессора требуется простой способ определения местоположения программы обработки прерывания и это осуществляется путем использования таблицы векторов прерываний.

Таблица векторов прерываний занимает первый килобайт оперативной памяти — адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов — FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором — адрес сегмента обработчика прерывания. Векторами являются просто полные адреса памяти программы (в сегментированной форме), которая должна быть активизирована в случае возникновения прерывания.

Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 — 0000:0004 и т.д. Адрес такой состоит из пары 2-байтовых слов, поэтому каждый из векторов занимает четыре байта.

Можно просмотреть таблицу векторов прерываний в компьютере, если воспользоваться программой DEBUG. Используйте команду D для вывода содержимого начала памяти: D 0:0. Программа DEBUG покажет вам первые 128 байтов или 32 вектора, которые могут иметь вид наподобие следующего:

0000:0000 E8 4E 9A 01 00 00 00 00-C3 E2 00 F0 00 00 00 00
0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0
0000:0020 2C 08 51 17 D0 0A 51 17-AD 08 54 08 E8 05 01 2F
0000:0030 FA 05 01 2F 05 18 00 F0-57 EF 00 F0 F0 01 70 00
0000:0040 90 13 C7 13 4D F8 00 F0-41 F8 00 F0 3E 0A 51 17
0000:0050 5C 00 B7 25 59 F8 00 F0-E2 0A 51 17 9C 00 B7 25
0000:0060 00 00 00 F6 8E 00 DE 09-6E FE 00 F0 F2 00 7B 09
0000:0070 27 08 51 17 A4 F0 00 F0-22 05 00 00 00 00 00 F0

Векторы хранятся как «слова наоборот»: сначала смещение, а потом сегмент. Например, первые четыре байта, которые программа DEBUG показала выше (E8 4E 9A 01) можно преобразовать в сегментированный адрес 019A:4EE8.

Можно встретить три вида адресов в таблице векторов. Это могут быть адреса, указывающие на ROM-BIOS, которые можно идентифицировать шестнадцатеричной цифрой F, которая предшествует номеру сегмента. Это могут быть адреса, которые указывают на главную память (как в примере: 019A:4EE8). Эти адреса могут указывать на подпрограммы ДОС или на резидентную программу (например, SideKick или Prokey), либо они могут указывать на саму программу DEBUG (поскольку DEBUG должна временно управлять прерыванием). Также векторы могут состоять из одних нулей, когда прерывание с данным номером не обрабатывается в текущий момент.

Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке операционной системы.

Ниже приведено назначение некоторых векторов:

Описание
0 Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0).
2 Аппаратное немаскируемое прерывание. Это прерывание может использоваться по-разному в разных машинах. Обычно вырабатывается при ошибке четности в оперативной памяти и при запросе прерывания от сопроцессора.
5 Печать копии экрана. Генерируется при нажатии на клавиатуре клавиши PrtScr. Обычно используется для печати образа экрана.
8 IRQ0 — прерывание интервального таймера, возникает 18,2 раза в секунду.
9 IRQ1 — прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. Используется для чтения данных от клавиатуры.
A IRQ2 — используется для каскадирования аппаратных прерываний в машинах класса AT
B IRQ3 — прерывание асинхронного порта COM2.
C IRQ4 — прерывание асинхронного порта COM1.
D IRQ5 — прерывание от контроллера жесткого диска для XT.
E IRQ6 — прерывание генерируется контроллером флоппи-диска после завершения операции.
F IRQ7 — прерывание принтера. Генерируется принтером, когда он готов к выполнению очередной операции. Многие адаптеры принтера не используют это прерывание.
10 Обслуживание видеоадаптера.
11 Определение конфигурации устройств в системе.
12 Определение размера оперативной памяти в системе.
13 Обслуживание дисковой системы.
14 Последовательный ввод/вывод.
19 Загрузка операционной системы.
1A Обслуживание часов.
1B Обработчик прерывания Ctrl-Break.
70 IRQ8 — прерывание от часов реального времени.
71 IRQ9 — прерывание от контроллера EGA.
75 IRQ13 — прерывание от математического сопроцессора.
76 IRQ14 — прерывание от контроллера жесткого диска.
77 IRQ15 — зарезервировано.

IRQ0 — IRQ15 — это аппаратные прерывания.

Механизм обработки прерываний

При обработке каждого прерывания должна выполняться следующая последовательность действий:

  • Восприятие запроса на прерывание: прием сигнала и идентификация прерывания.
  • Запоминание состояния прерванного процесса: определяется значением счетчика команд (адресом следующей команды) и содержимым регистров процессора.
  • Передача управления прерывающей программе (в счетчик команд заносится начальный адрес подпрограммы обработки прерываний, а в соответствующие регистры – информация из слова состояния процессора).
  • Обработка прерывания.
  • Восстановление прерванного процесса и возврат в прерванную программу.

Главные функции механизма прерывания:

  1. распознавание или классификация прерываний.
  2. передача управления соответственно обработчику прерываний.
  3. корректное возвращение к прерванной программе (перед передачей управления обработчику прерываний содержимое регистров процессора запоминается либо в памяти с прямым доступом либо в системном стеке).

Типы прерываний

Прерывания, возникающие при работе вычислительной системы, можно разделить на 4 группы:

Аппаратные прерывания вызываются физическими устройствами и возникают по отношению к программе асинхронно, т.е. в общем случае невозможно предсказать, когда и по какой причине программа будет прервана.

Аппаратные прерывания не координируются c работой программного обеспечения. Когда вызывается прерывание, то процессор оставляет свою работу, выполняет прерывание, a затем возвращается на прежнее место.

Внешние прерывания возникают по сигналу какого-либо внешнего устройства например:

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

Прерывание по таймеру вызывается интервальным таймером. Этот таймер содержит регистр, которому может быть присвоено определенное начальное значение посредством специальной привилегированной команды. Значение этого регистра автоматически уменьшается на 1 по истечении каждой миллисекунды времени. Когда это значение становятся равным нулю, происходит прерывание по таймеру. Подобный интервальный таймер используется операционной системой для определения времени, в течение которого программа пользователя может оставаться под управлением машины.

Маскируемые и немаскируемые внешние прерывания

Существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (Non Mascable Interrupt, немаскируемое прерывани) INTR (interrupt request, запрос на прерывание).

Соответственно внешние прерывания подразделяются на два вида: немаскируемые и маскируемые.

Часто при выполнении критических участков программ, для того чтобы гарантировать выполнение определенной последовательности команд целиком, приходится запрещать прерывания (т.е. сделать систему нечувствительной ко всем или отдельным прерываниям). Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.

Таким образом, наличие сигнала прерывания не обязательно должно вызывать прерывание исполняющейся программы. Процессор может обладать средствами защиты от прерываний: отключение системы прерываний, маскирование (запрет) отдельных сигналов прерываний. Прерывания, которые замаскировать нельзя — это немаскируемые прерывания.

Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями, а именно прерывание происходит, когда:

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

Программные прерывания

Программы могут сами вызывать прерывания с заданным номером. Для этого они используют команду INT. По этой команде процессор осуществляет практически те же действия, что и при обычных прерываниях, но только это происходит в предсказуемой точке программы – там, где программист поместил данную команду. Поэтому программные прерывания не являются асинхронными (программа «знает», когда она вызывает прерывание).

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

Механизм программных прерываний был специально введен для того, чтобы:

  1. переключение на системные программные модули происходило не просто как переход в подпрограмму, а точно таким же образом, как и обычные прерывания. Этим обеспечивается автоматическое переключение процессора в привилегированный режим с возможностью исполнения любых команд.
  2. использование программных прерываний приводит к более компактному коду программ по сравнению с использованием стандартных команд выполнения процедур.

Пример (программные прерывания):

  • привилегированная команда в режиме пользователя.
  • адрес вне диапазона.
  • нарушение защиты памяти.
  • арифметическое переполнение, отсутствует страница.
  • нарушение защиты сегмента.
  • выход за границу сегмента.

В упрощенном виде схему обработки различных видов прерываний можно представить следующим образом:

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

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

Каждому прерыванию назначается свой уникальный приоритет. Если происходит одновременно несколько прерываний, то система отдает предпочтение самому высокоприоритетному, откладывая на время обработку остальных прерываний.

В случае о прерывании самой программы обработки прерывания говорят о вложенном прерывании. Уровни приоритетов обозначаются сокращенно IRQ0 — IRQ15 или IRQ0 – IRQ23 (в зависимости от микросхемой реализации).

Пpepывaнию вpeмeни cутoк дан мaкcимaльный пpиopитeт, пocкoльку ecли oнo будет пocтoяннo тepятьcя, то будут нeвepными пoкaзaния cиcтeмныx чacoв. Пpepывaниe от клaвиaтуpы вызывaeтcя при нaжaтии или oтпуcкaнии клавиши; oнo вызывaeт цепь coбытий, кoтopaя oбычнo зaкaнчивaeтcя тем, что код клавиши пoмeщaeтcя в буфep клaвиaтуpы (oткудa он зaтeм мoжeт быть пoлучeн пpoгpaммными пpepывaниями).

Ну и наконец реализация механизма обработки прерываний

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

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

После выполнения в ответ на запрос на прерывание любого требуемого действия стандартная программа обработки прерываний выполняет команду загрузки состояния процессора, в результате чего управление передается прерванной программе. Происходит это следующим образом: команда загрузки состояния процессора вызывает загрузку сохраненного содержимого слова состояния, счетчика команд и других регистров из соответствующих слов области сохранения, начиная с адреса, указанного в команде. Это приводит к восстановлению содержимого регистров и состояния процессора, которые были в момент прерывания. Управление затем передается на команду, перед выполнением которой произошло прерывание.

Сохранение и восстановление состояния процессора и содержимого регистров называют операцией контекстного переключения.

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

Обычные программы находятся в пользовательском режиме (признак равен нулю). Когда происходит прерывание, новое загружаемое содержимое слово состояния имеет признак, равный 1, что автоматически переводит процессор в режим супервизора. В этом режиме становится возможным использование привилегированных команд. Перед тем, как значение слова состояния будет сохранено, в другом его элементе (например, втором) будет установлено значение, указывающее на причину прерывания:

  • при программном прерывании отражается тип вызвавшего его условия, например деление на нуль.
  • при прерывании по вводу-выводу заносится номер канала, вызвавший прерывание.

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

Это поле используется, чтобы не допустить наступления прерываний определенного типа, пока первое из них не будет обработано. В MASK каждый бит соответствует некоторому классу прерываний. Если какой-то бит установлен в 1, то прерывания соответствующего класса разрешены, если в 0, то запрещены. В последнем случае говорят, что они маскированы (их также называют запрещеннымиили закрытыми). Однако маскированные прерывания не теряются, потому что сигнал, вызвавший прерывание, сохраняется аппаратурой. Временно задержанное таким способом прерывание называется отложенным. Когда (вследствие того, что значение MASK сброшено) прерывания соответствующего класса вновь разрешаются, сигнал опознается и происходит прерывание.

Маскирование прерываний находится под контролем операционной системы и зависит от значения MASK в слове состояния, которое заранее сохраняется в рабочей области каждого прерывания. Можно запретить все прерывания, установив все биты MASK в нуль. В действительности поступать подобным образом нет необходимости.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *