Главная » Просмотр файлов » 8_Система прерываний

8_Система прерываний (975805), страница 3

Файл №975805 8_Система прерываний (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования) 3 страница8_Система прерываний (975805) страница 32019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Те программы, которые допускают такой "принудительный" повторный вход всвоё начало (не путать это с рекурсивным вызовом!), называются повторно-входимыми или "по-иностранному"реентерабельными. Для реентерабельных программ при каждом входе в их начало должна резервироватьсяновая область памяти под хранение контекста этой программы при её прерывании.

Программы обработки прерываний для младших моделей нашего семейства могли и не быть реентерабельными, что порождало определённые проблемы, которые мы здесь обсуждать не будем.3Если прерванных (готовых к продолжению своего счёта) программ больше одной, то часто может понадобиться произвести возврат не в последнюю по времени прерванную программу, а в какую-нибудь другую изэтих программ. Поэтому после окончания своей работы процедура-обработчик прерывания обычно передаётуправление специальной системной программе – диспетчеру, и уже программа-диспетчер определяет, котораяиз прерванных программ должна быть продолжена. Обычно каждой выполняемой программе присваиваетсячисловой приоритет, и диспетчер продолжает выполнение готовой к счёту программы с наибольшим приоритетом.6Из рассмотренной выше схемы механизма обработки прерываний можно сделать один важныйвывод.

Для "обычной" программы прерывание проходит незамеченным, если только эта программаспециально не следит за показанием встроенных в компьютер часов (в последнем случае она можетзаметить, что физическое время её счёта "почему-то" увеличилось). Иногда для подчёркивания этогофакта говорят, что механизм прерываний прозрачен для выполняемой программы обычного пользователя.В Таблице 8.1 изображено начало вектора прерываний для компьютера младшей модели изучаемой нами архитектуры.Таблица 8.1. Начало вектора прерыванийНомерN=0N=1N=2N=3N=4N=5N=6. . .Описание событияОшибка в команде деленияУстановлен флаг TF=1Немаскируемое внешнее прерываниеВыполнена команда intВыполнена команда into и OF=1...Команда с плохим кодом операцииПродолжим теперь изучение переходов, вызванных специальными командами прерываний, выполнение каждой такой команды в нашей архитектуре всегда вызывает прерывание (исключениемявляется команда into , которая вызывает прерывание не всегда, эту команду мы рассмотрим далее).

Каждая команда прерывания реализует дальний прямой двойной косвенный переход (какуже упоминалось ранее, косвенный переход двойной, так как в самой команде указывается не адреспамяти, где хранится место перехода, а только заданный по умолчанию номер в векторе прерываний,и указанный адрес памяти вычисляется по этому номеру).Сначала рассмотрим команды прерывания, о которых упоминается в Таблице 8.1. Команда intявляется самой короткой (длиной в один байт) командой, которая всегда вызывает прерывание с номером N=3. В основном эта команда используется при работе отладчика – специальной программы,облегчающей программисту разработку новых программ. Отладчик, в частности, может ставить впрограммный код отлаживаемой программы так называемые контрольные точки – это те места, вкоторых отлаживаемая программа должна передать управление программе-отладчику.

Для такой передачи хорошо подходит короткая команда int , если программа-отладчик реализована в виде обработчика прерывания с номером N=3 (так как эта команда самая короткая по длине, то её можновременно подставить на место любой машинной команды в отлаживаемой программе).Команда into реализует условное прерывание: при выполнении этой команды прерываниепроисходит только в том случае, если флаг OF=1, иначе продолжается последовательное выполнение программы.

Основное назначение команды into – эффективно реализовать надёжное программирование при обработке целых знаковых чисел. Как мы знаем, при выполнении операцийсложения и вычитания со знаковыми числами возможна ошибка, при этом флаг переполнения OF устанавливается в единицу, но выполнение программы продолжается. Кроме того, вспомним, что флагпереполнения устанавливается в единицу и при операциях умножения, если значащие биты результата попадают в старшую часть произведения.При надёжном программировании проверку флага переполнения необходимо ставить после каждой такой команды. Для такой проверки хорошо подходит команда into , так как это самая короткая (однобайтная) команда условного перехода по значению OF=1. При этом, правда, обработкуаварийной ситуации должна производить процедура-обработчик прерывания с номером N=4.Рассмотрим в качестве примера простейшую реализацию такой процедуры-обработчика прерывания от команды into .

Для простоты эта процедура-обработчик будет фрагментом нашей программы и располагаться в её сегменте кода. При возникновении ошибки будет просто выдаватьсяаварийная диагностика, и продолжаться выполнение нашей программы (естественно, с неверным результатом). Заметим, что наш обработчик прерывания не является процедурой в смысле языка Ассемблер, и тем более не выполняет стандартных соглашений о связях.

Тем не менее, следует понять,7что необходимо соблюдать одно условие: если некоторая программа меняет вектор прерываний(например, размещая там адрес своей процедуры-обработчика), то перед окончанием счёта такаяпрограмма должна восстановить прежний вид этого вектора прерываний. Так мы и сделали в приведённой ниже программе.include io.asmdata segmentAdw?Olddw?; для сохранения адреса старойdw?; процедуры-обработчика intoDiagn db'Ошибка – большое значение!$'data endsstack segment stackdw32 dup (?)stack endscode segmentassume cs:code, ds:data, ss:stackstart:movax,datamovds,ax; инициализация процедуры-обработчика intomovax,0moves,ax; es - на вектор прерыванийAddr_into equ word ptr es:[4*4]; сохранения адреса старой процедуры intomovax,Addr_intomovOld,axmovax,Addr_into+2movOld+2,ax;; занесение нового адреса процедуры intocli; Закрыть внешние прерыванияmovAddr_into,offset Error; Начало проmovAddr_into+2,code; цедуры-обработчикаsti; Открыть прерывания; собственно начало программыinint Amovax,Aaddax,A; Возможно переполнениеintoimul A; Возможны значащие биты в DXintomovA,axoutint X; восстановление старого адреса обработчика intoVoz: cli; Закрыть прерыванияmovax,OldmovAddr_into,axmovax,Old+2movAddr_into+2,axsti; Открыть прерыванияfinish; Наша процедуры-обработчикаError:; --- Минимальная программная реакция --push ds; Сохранение нужных регистровpush dxsti; Открыть прерывания; --- Полная программная реакция --movdx,datamovds,dx8movdx,offset Diagnoutstrnewlinepopdx; Восстановление регистровpopdsiret ; Возврат из прерыванияcode endsend startПриведённая программа снабжена достаточным количеством комментариев, так что Вы должныпонять логику её работы.

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

Мы позаботились о том, чтобы привыполнении каждой критической секции работа не была прервана. Для этого в начале каждой критической секции стоит команда запрета прерывания от внешних устройств cli , а в конце секции –команда открытия таких прерываний sti . Разумеется, внутри критических секций не должно бытькоманд, которые могут сами вызвать прерывания программы.После выдачи диагностики об ошибке наша процедура-обработчик могла бы не продолжать выполнение программы, а, например, завершать выполнение этой программы.

Для этого вместо предложенияiret ; Возврат из прерываниянадо поставить два предложенияadd SP,3*2; Очистка стека от IP, CS и FLAGSjmp VozИ, наконец, рассмотрим команду языка нашей машины, которая всегда вызывает прерывание сномером N, заданным в качестве её операнда:int op1Здесь op1=N имеет формат i8. По своей сути это команда дальнего абсолютного двойного косвенного перехода, которая выполняется почти так же, как команда дальнего безусловного переходаjmp dword ptr [4*N] . Пожалуй, единственным отличием здесь является то, что команде intдля доступа к памяти не требуется сегментный регистр данных, так как она всегда обращается вфиксированный сегмент (вектор прерывания), расположенный в самом начале оперативной памяти.Заметим, что с помощью команды int можно вызвать прерывание с любым номером, напримерпрерывание, соответствующее делению на ноль или плохому коду операции.

Более того, прерыванияс номерами, большими 3110, в нашей архитектуре можно вызвать, только выполняя командуint N с соответствующим параметром-номером прерывания. Используя эти команды, легко отлаживать процедуры-обработчики прерываний, но основное назначение таких команд другое.Дело в том, что в большинстве программ необходимо выполнять некоторые широко распространённые действия (обмен данными с внешними устройствами, выполнение определённых стандартных операций и многое другое). Естественно желание реализовать такие широко распространённыедля большинства программ действия в виде некоторого общедоступного набора процедур, чтобы нереализовывать эти действия в каждой программе, а просто вызывать для этого необходимые стандартные процедуры.

Характеристики

Тип файла
PDF-файл
Размер
377,66 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6521
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее