Вопросы ГЭК 2009new (1094840), страница 36
Текст из файла (страница 36)
Программа-обработчик прерывания (ПОП), как правило, является программой операционной системы, резидентной в оперативной памяти. Некоторые операционные системы (например, MS/DOS), позволяют заменить системный обработчик на пользовательский, либо соединить системный и пользовательский обработчики. Вся ответственность за неверные действия в этом случае лежит на пользователе. Неправильная работа обработчика прерываний приводит к разрушению вычислительного процесса, порче информации и «зависанию» системы. Поэтому в развитых операционных системах имеются средства контроля и восстановления информации при сбоях.
Система прерываний появилась в ЭВМ 2-го поколения, и явилась альтернативой обработке событий с помощью опроса: ожидая события, процессор может заниматься какой-либо другой полезной работой, а когда событие произойдет, процессор может заниматься какой-либо другой полезной работой, не дожидаясь полного завершения этой работы. Однако обработка прерывания сопряжена с достаточно большими накладными расходами, связанными с сохранением состояния прерываемой задачи (несколько регистров) и относительно сложным диалогом с вызвавшим прерывание устройством. Интервал между установкой сигнала прерывания и исполнением первой команды его обработчика называется задержкой прерывания и составляет десятки тактов.
Обработка прерывания состоит в сохранении счетчика команд и, возможно, некоторых других регистров (практически всегда сохраняется слово состояния процессора), и в передаче управления на адрес, определяемый типом прерывания. По этому адресу располагается программа-обработчик прерывания (ПОП), которая и осуществляет реакцию на соответствующее событие. Перед завершением обработчик восстанавливает регистры, и выполнение программы возобновляется с той точки, где она была прервана.
Разновидностью прерываний являются исключения – реакция на внутренние события в самом процессоре, такие, как неизвестный код операции, недействительный адрес памяти, деление на ноль, ошибка доступа в процессорах с виртуальной памятью и т.д. Исключения обрабатываются аналогично внешним прерываниям, с той лишь разницей, что исключение приводит к прекращению выполнения текущей команды, и сохранённый СчАК указывает на прерванную инструкцию. Во время обработки исключения ПОП может исправить неверную инструкцию, или изменить внешнюю ситуацию (например, подкачать с диска требуемую виртуальную страницу). Возврат из обработчика исключения приводит к попытке повторного исполнения команды.
Третьей разновидностью прерывания является авария. В таком случае не удаётся установить адрес прерываемой команды, и невозможно возобновить решение задачи. Например, такая ситуация возникает при двойном сбое. Реакцией на аварию может быть снятие текущей задачи со счёта, перезагрузка операционной системы или тяжёлый останов.
Принято различать следующие типы прерываний:
-
Внутренние (т.е. исключения);
-
Внешние (сигнал от таймера, клавиатуры, мыши, диска, линии связи);
-
От ввода-вывода (сигнал об окончании операции на внешнем устройстве (ВУ));
-
Программные;
-
От схем контроля.
Программные прерывания вызываются специальной командой (в МП 80х86 это команда INT) и являются специфической формой вызова подпрограммы. В данном случае программа операционной системы вызывается по её номеру, заданному в виде операнда команды, а параметры передаются через регистры. Это позволяет любой программе обращаться к системным функциям, не зная адреса исполняющей их программы. Кроме того, пользовательская программа не требует модификации при изменении системного объекта-исполнителя.
Наличие системы прерываний позволяет организовать потоковый и интерактивный мультипрограммный режим работы, виртуальную память, обработку ошибок без останова вычислительного процесса, сетевые технологии и является неотъемлимой программно-аппаратной составляющей современных вычислительных комплексов и ОС.
Контроллер прерываний от внешних устройств в архитектуре ЭВМ семейства INTEL. Программно-аппаратное взаимодействие контроллера прерываний и микропроцессора.
Сигналы внешних аппаратных прерываний поступают в микропроцессор не непосредственно, а через контроллер прерываний. В качестве него используется микросхема Intel8259a, которая имеет 8 входных линий, называемых линиями запроса прерывания (Interrupt Request, IRQ). Обычно в системе бывает 2 таких микросхемы, одна из которых (ведущая) подключается непосредственно к микропроцессору, а вторая (ведомая) – к входу IRQ2 ведущей микросхемы. Таким образом, всего рассматривается 15 входных линий запросов прерываний от внешних устройств. Иногда этого не хватает, и на одной линии запроса «висят» несколько устройств, вследствие чего операционной системе приходится прилагать дополнительные усилия, чтобы разобраться, откуда пришёл сигнал.
Выходами микросхемы контроллера являются сигнал INT, идущий на вход микропроцессора (CPU), и номер вектора прерывания. Обратная связь микропроцессора с контроллером осуществляется с помощью сигнала INTA. Схема сопряжения контроллера (CIED, Controller Interrupts of External Units, назовём его так) и CPU (Central Processing Unit, центрального процессора) приводится на следующей схеме функционирования (рис.1)
Сигнал прерывания, поступая в контроллер, доходит до микропроцессора не сразу.
Во-первых, в схеме контроллера присутствует регистр маски, биты которого могут быть установлены программно через порт 21h (A1h для ведомого контроллера). Наличие 1 в соответствующем бите этого 8-битного регистра запрещает прохождение сигнала от соответствующего устройства, 0 – разрешает.
Во-вторых, поступивший в контроллер запрос на обработку прерывания блокирует в нём прохождение сигналов от устройств текущего и более низкого приоритета до тех пор, пока микропроцессор не разблокирует их сигналом INTA, возникающим при подаче команды EOI (END OF INTERRUPT). Эта команда реализуется засылкой специального кода (20h) в порты 20h ведущего и A0h ведомого контроллера. Сигналы, поступившие на неразблокированные линии контроллера некоторое время могут ожидать обслуживания на входе, но до процессора не дойдут.
Приоритеты устройств стандартно расположены в порядке «сверху вниз» на рис1. (IRQ0 имеет наивысший приоритет, IRQ7 – наинизший, приоритеты IRQ8 – IRQ15 расположены между приоритетами IRQ1 и IRQ3. Однако контроллер прерываний – программируемое устройство, и все его регистры (маски, приоритеты, номера векторов прерываний от внешних устройств) могут быть изменены при загрузке операционной системы, и даже во время работы.
В третьих, сигнал прерывания на выходе из контроллера возбуждает линию INT, и одновременно формирует на другой линии номер вектора прерывания. Этот номер формируется из номера IRQ и так называемого «базового вектора», который равен 8 для ведущей и 70h для ведомой микросхемы (в реальном режиме; в защищённом режиме WINDOWS перепрограммирует эти номера.) По номеру прерывания CPU определяет вектор прерывания из таблицы векторов прерываний (ТВП, или IDT – Interrupt Data Table), расположенной в первом килобайте основной памяти (реальный режим). Структура ТВП следующая:
Табл. 1
IP255 | CS255 |
. . . | |
IP1 | CS1 |
IP0 | CS0 |
Каждая строка таблицы содержит два слова (4 байта) – новое содержимое регистров IP и CS при входе в программу – обработчик, то есть её косвенный адрес. Эти значения автоматически загружаются в названные регистры при поступлении запроса на обработку прерывания. Старое содержимое регистров FLAGS, CS и IP сохраняется в стеке. В новом регистре FLAGS аппаратно обнуляется бит IF, что вызывает запрет на поступление прерываний от любых внешних устройств. Программа-обработчик прерывания (ПОП), допускающая обработку вложенных прерываний (т.е. если её можно прервать для выполнения обработки более приоритетного события) должна сама установить флаг IF в 1 в той точке своего исполнения, начиная с которой её можно прерывать.
В конце своего исполнения обработчик события должен разблокировать контроллер для данного и более низких приоритетов, послав в него сигнал EOI, и вернуть управление в прерванную программу командой IRET, восстанавливающей из стека регистры FLAGS, CS и IP.
Для защищённого режима принцип обработки остаётся тем же самым, но существуют следующие отличия:
-
ТВП может быть расположена в любом месте ОП. Указателем на неё является регистр IDTR;
-
Строками ТВП являются 8-байтные записи, содержащие более подробную информацию (вместо нового IP там задается EIP, а также ряд индикаторов);
-
Сами события делятся на сбои (ошибки), ловушки и аварии;
-
В некоторых случаях в вершине стека сохраняется код ошибки.
-
При входе в обработчик учитываются так называемые «уровни привилегий» прерванной задачи и обработчика события.
Детально работу в расширенном режиме мы не рассматриваем.
Пользовательская или системная программа может создать свой собственный обработчик события, или дополнить системный обработчик своими функциями. Для этого необходимо переопределить в ТВП адрес входа в обработчик на свою программу, и при необходимости вызвать из неё системный обработчик.
Виртуальная память и ее реализация. Сегментно-страничная организация памяти и динамическое преобразование адресов. Механизм замещения страниц.
В мультипрограммных системах размещение всех исполняемых программ полностью в ОП во многих случаях невыполнимо: программы часто имеют большую длину, а емкости существующих ОП ограниченны. Однако нет принципиальной необходимости в том, чтобы вся программа находилась в ОП, так как в любой момент времени работа программы концентрируется на определенных сравнительно небольших участках. Таким образом, в ОП следует хранить только используемые в данный период части программ, а неиспользуемые части могут располагаться в ВЗУ. Программируя свою программу, пользователь не знает, в комбинации с какими программами будет выполняться его программа, какое место в памяти отведет ей операционная система.
При подготовке программ используются условные адреса. Позднее в процессе выполнения программы операционная система выделяет активным частям программы место в памяти, и условные адреса переводятся в исполнительные. Эта процедура получила название динамического распределения памяти.
Осуществление динамического распределения чисто программным путем привело бы к значительным потерям машинного времени. Целесообразнее пользоваться для этой цели аппаратурными средствами.
Один из способов динамического распределения памяти основан на использовании базовых регистров. Операционная система каждой пользовательской программе ставит в соответствие свой базовый адрес. Базовые адреса обрабатываемых программ находятся в общих регистрах. При выполнении программы реальный или физический адрес образуется суммированием базового и относительного адресов. При динамическом распределении памяти с помощью базовых регистров программа (или, по крайней мере, та часть ее, адрес которой преобразуется с помощью одного и того же базового адреса) должна располагаться в последовательных ячейках и вводиться в ОП целиком, хотя в ближайшем цикле активности может потребоваться лишь небольшой фрагмент программы.
При рассматриваемом способе динамического распределения памяти свободная память может состоять из несвязанных областей (фрагментация памяти) и для ввода нужной программы может понадобиться сдвиг содержимого памяти. На рис. 14.7, а показано распределение памяти между программами А, В, С, D, из которых две (А и D) являются в данный момент наименее активными и следовательно, могут рассматриваться как кандидаты на удаление во внешнюю память. Если вновь вводимая программа Е (рис. 14.7, б) больше любой из программ А и D, то для ее размещения в памяти необходимо, как показано на рис. 14.7, а, сдвигать программы В и С. Это перемещение связано с потерей времени. Более того, в ряде систем подобное перемещение требует выполнения заново операции редактирования связей в программе и новой загрузки программы.
Отмеченные недостатки в распределении памяти отсутствуют в виртуальной памяти со страничной, организацией.
В иртуальная память есть способ организации памяти мультипрограммной вычислительной системы, при котором достигается гибкое динамическое распределение памяти, устраняется ее фрагментация и создаются значительные удобства для работы программистов. Это удается достигнуть без заметного снижения операционной системы и процессов их функционирования.
Принцип виртуальной памяти предполагает, что пользовать при подготовке своей программы имеет дело не с физической ОП, действительно работающей в составе вычислительной установки и имеющей некоторую фиксированную емкость, с виртуальной (т. е. кажущейся) одноуровневой памятью, емкость которой равна всему адресному пространству, определяемому размером адресных полей в форматах команд и базовых регистров. В ЕС ЭВМ это пространство составляет 777 216 байт.
Пользователь имеет в своем распоряжении все адресное пространство системы независимо от объема ее физической памяти и объемов памятей, необходимых для других программ, участвующих в мультипрограммной обработке. На всех этапах подготовки программ, включая загрузку оперативную память, программа представляется в виртуальных адресах, и лишь при самом исполнении машинной команды производится преобразование виртуальных адресов в реальные адреса действующей памяти (в так называемые физические адреса).
Преобразование виртуальных адресов в физические упрощается, и устраняется фрагментация памяти, если физическую и виртуальную память разбить на блоки, называемые в этом случае страницами и содержащие одно и то же число байт. Страницам виртуальной и физической памяти присваивают номера, называемые номерами соответственно виртуальных и физических страниц. Каждая физическая страница способна хранить одну из виртуальных страниц. Порядок расположения (нумерация) байт в виртуальной и физической страницах сохраняется одним и тем же.