Передача управления прерывающей программы и возврат из нее Определение начального адреса обработчика прерыванияможно осуществлять как программным, так и аппаратным способом. Суть программного распознавания состоит в следующем. Все линии связи, по которым приходят запросы прерывания, объединяются в схему ИЛИ, формирующую на выходе один и тот же сигнал, который в допустимый момент прерывания поступает в программу-обработчик. Последняя распознает запросы и разветвляется для их выполнения. Так как происходит анализ запросов прерывания, то времена реакции tp и обслуживания tобс сравнительно велики, что затрудняет приоритетное обслуживание. При аппаратном распознавании причин прерывания каждому источнику прерывания ставится в соответствие свой адрес начала программы-обработчика. Специальная схема при появлении запроса формирует соответствующий адрес перехода к прерывающей программе. Вход системы прерывания, обладающей способностью формировать собственный адрес начала прерывающей программы, принято называть уровнем прерывания. Простейший способ указания начальных адресов состоит в следующем. Каждому уровню присваивается номер и в памяти отводится ячейка, адрес которой, к примеру, равен номеру уровня. В такой ячейке памяти может храниться команда перехода к остальной части обработчика прерывания, которая может находиться в любом месте памяти. Набор фиксированных по отношению к своим уровням ячеек памяти образует таблицу входов в прерывающие программы, содержание которой может менять программист. Обычно элемент такой таблицы называют вектором прерывания, а саму таблицу – таблицей векторов прерываний(рис. 2.10). В общем случае вектор прерывания представляет собой слово состояния программы-обработчика. Если каждое ССП занимает в оперативной памяти s байт, то вектор прерывания уровня iбудет находиться по адресу (i‑1)·s, а таблица векторов прерываний c Nвходамизаймет первые N·s байт оперативной памяти. Заметим, что удобный компромисс достигается от сочетания аппаратного и программного методов распознавания типа запроса прерывания и определения начального адреса обработчика. Можно организовать систему, в которой каждый уровень используется для обслуживания нескольких источников прерывания, а физически уровень реализуется в виде некоторого количества прерывающих входов, объединенных схемой ИЛИ. В определенную для данного уровня прерывания ячейку памяти записывается состояние прерывающих входов в момент прерывания. Рис. 2.10. Таблица векторов прерываний с N входами Для ПЭВМ на основе МП Intel x86 этот объём составляет 1 Кбайт и содержит значения сегментного регистра команд (CS) и указателя команд (IP) для 256 обработчиков прерываний. Таблица 2.1. Структура таблицы векторов прерываний Адрес в ОП | Обозначение и типы прерываний | | Тип 0. Деление на ноль | … | | | Тип 1 | … | | | Тип 2. Запрос по выходу IRQ (системный таймер) | … | | | Тип 255. Пользовательское прерывание | Для осуществления возврата к прерванной программе необходимо полностью восстановить ее состояние вычислений на момент прерывания. Информацию, которую следует сохранять при прерывании программы, можно разделить на основную (которая составляет ССПи запоминается всегда) и дополнительную (необходимость запоминания которой зависит от содержания программы-обработчика). В слово состояния программы обычно включается: · содержимое программного счетчика, т.е. адрес первой невыполненной команды прерванной программы; · триггер состояния системы: «рабочее» или «состояние ожидания»; · маска прерывания, устанавливаемая каждой новой программой; · код прерывания– двоичное число, отдельное для каждого уровня, объединяющего прерывание от нескольких источников, по которому прерывающая программа опознает конкретный источник прерывания. Маска прерывания– шаблонная последовательность знаков, управляющая сохранением или исключением отдельных частей другой последовательности знаков. В простейшем виде маска – это двоичное число, каждый разряд которого соответствует одному из уровней прерывания и разрешает (например, состояние 1) или запрещает (состояние 0) прерывание от запросов, относящихся к данному уровню. Для каждого обработчика прерывания может быть установлена своя маска, указывающая, какие программы-обработчики способны его прерывать. Каждый разряд маски соответствует отдельной программе. Маска прерывания является составной частью слова состояния программы, и если программа вызывается для выполнения, то ее маска засылается в регистр маски. Последний обычно реализуется в виде триггерного регистра, состояние которого можно изменить программным путем. При формировании маски состояние «разрешено» получают лишь те триггеры, которые соответствуют программам с более высоким, чем у данной программы, приоритетом. Код прерывания обычно находится в общем для всех уровней регистре, т.е. с приходом новой прерывающей программы его также надо запоминать. В момент прерывания старое ССП, относящееся к прерываемой программе, заменяется ССП программы-обработчика, а в конце прерывания старое ССП восстанавливается прерывающей программой. Для ускорения процесса замены ССП эту процедуру выполняют обычно аппаратным путем. Важным замечанием является то, что в период сохранения и восстановления ССП прерывания любого уровня запрещены. К дополнительной информации относят содержимое: · арифметических регистров; · индексных регистров; · прочих программно-доступных регистров, общих для всех программ, и т.п. Сохранение дополнительной информации увеличивает время обслуживания. Поэтому программисту надо тщательно продумать, что из дополнительной информации следует запоминать в каждом конкретном случае. Более того, момент прерывания следует выбирать так (если это возможно), чтобы дополнительной информации для сохранения было как можно меньше. Вопросы для самоконтроля 1. Перечислите основные принципы фон-неймановской модели ЭВМ. 2. Перечислите основные функциональные блоки последовательной ЭВМ. 3. Что собой представляет центральный процессор? 4. Что такое стандартный цикл команды? 5. Поясните разницу между аппаратным и микропрограммным управлением. 6. Изобразите структуру оператора машинной команды. 7. Что такое система команд ЭВМ? 8. Перечислите основные признаки, по которым классифицируются системы команд. 9. Какие принципы заложены при создании CISC и RISC-архитектур? 10. Что собой представляет набор команд VLIW? 11. Перечислите основные наборы команд, классифицируемые по месту хранения операндов. 12. Что собой представляет система команд на базе аккумуляторов? 13. Перечислите основные достоинства и недостатки системы команд с использованием РОНов. 14. Приведите примеры машин с архитектурами CISC, RISC, VLIW, а также машин, использующих систему команд на базе стека, аккумуляторов и РОНов. 15. Дайте определение понятию «формат команды». 16. Какие факторы следует учитывать при разработке системы команд? 17. По какому соотношению можно оценить общую длину команды? 18. Сколько и какие форматы команд используются в ЭВМ? 19. Какие факторы учитываются при выборе формата команды? 20. Что такое «способ адресации»? 21. Перечислите основные способы адресации. Отметьте их достоинства и недостатки. 22. Почему в ЭВМ необходима система прерываний? Какие недостатки заложены в модели фон Неймана? 23. Какие характеристики системы прерываний Вы знаете? 24. Перечислите последовательность основных действий системы при возникновении запроса прерывания. 25. В какие моменты времени можно прервать выполняющуюся программу? 26. Чем отличаются приоритеты запросов от приоритетов программ, и как они определяются? 27. Для чего применяется таблица векторов прерываний? 28. Как организуется возврат из обработчика прерывания к выполнению прерванной программы? 29. Что такое насыщение системы прерываний? |