Разделы сайта
Выбор редакции:
- Правила проведения гемостазиограммы во время беременности
- Гемостаз - процесс, останавливающий кровотечение
- Можно ли вечером делать тест на беременность
- Инструкция к различным типам тестов на беременность
- Оксандролон анавар – анаболический стероид, курс для женщин и мужчин, побочные эффекты
- Что поможет при болях во время месячных
- Количественный иммунохроматографический экспресс-тест для обнаружения скрытой крови в фекалиях
- Как родить самого красивого ребенка: научное обоснование
- Трехфазный график базальной температуры
- Любовный тест для девочек
Реклама
Назначение и типы прерываний. Аппаратное прерывание |
Прерывания являются основной движущей силой любой операционной системы. Отключите систему прерываний - и «жизнь» в операционной системе немедленно остановится. Периодические прерывания от таймера вызывают смену процессов в мультипрограммной ОС, а прерывания от устройств ввода-вывода управляют потоками данных, которыми вычислительная система обменивается с внешним миром. Как верно было замечено: «Прерывания названы так весьма удачно, поскольку они прерывают нормальную работу системы». Другими словами, система прерываний переводит процессор на выполнение потока команд, отличного от того, который выполнялся до сих пор, с последующим возвратом к исходному коду. Из сказанного можно сделать вывод о том, что механизм прерываний очень похож на механизм выполнения процедур. Это на самом деле так, хотя между этими механизмами имеется важное отличие. Переключение по прерыванию отличается от переключения, которое происходит по команде безусловного или условного перехода, предусмотренной программистом в потоке команд приложения. Переход по команде происходит в заранее определенных программистом точках программы в зависимости от исходных данных, обрабатываемых программой. Прерывание же происходит в произвольной точке потока команд программы, которую программист не может прогнозировать. Прерывание возникает либо в зависимости от внешних по отношению к процессу выполнения программы событий, либо при появлении непредвиденных аварийных ситуаций в процессе выполнения данной программы. Сходство же прерываний с процедурами состоит в том, что в обоих случаях выполняется некоторая подпрограмма, обрабатывающая специальную ситуацию, а затем продолжается выполнение основной ветви программы. В зависимости от источника прерывания делятся на три больших класса: · внешние; · внутренние; · программные. Внешние прерывания могут возникать в результате действий пользователя или оператора за терминалом, или же в результате поступления сигналов от аппаратных устройств - сигналов завершения операций ввода-вывода, вырабатываемых контроллерами внешних устройств компьютера, такими как принтер или накопитель на жестких дисках, или же сигналов от датчиков управляемых компьютером технических объектов. Внешние прерывания называют также аппаратными, отражая тот факт, что прерывание возникает вследствие подачи некоторой аппаратурой (например, контроллером принтера) электрического сигнала, который передается (возможно, проходя через другие блоки компьютера, например контроллер прерываний) на специальный вход прерывания процессора. Данный класс прерываний является асинхронным по отношению к потоку инструкций прерываемой программы. Аппаратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций, при этом система после обработки прерывания продолжает выполнение процесса, уже начиная со следующей инструкции. Внутренние прерывания, называемые также исключениями (exeption), происходят синхронно выполнению программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы. Примерами исключений являются деление на нуль, ошибки защиты памяти, обращения по несуществующему адресу, попытка выполнить привилегированную инструкцию в пользовательском режиме и т. п. Исключения возникают непосредственно в ходе выполнения тактов команды («внутри» выполнения). Программные прерывания отличаются от предыдущих двух классов тем, что они по своей сути не являются «истинными» прерываниями. Программное прерывание возникает при выполнении особой команды процессора, .выполнение которой имитирует прерывание, то есть переход на новую последовательность инструкций. Причины использования программных прерываний вместо обычных инструкций вызова процедур будут изложены ниже, после рассмотрения механизма прерываний. Прерываниям приписывается приоритет, с помощью которого они ранжируются по степени важности и срочности. О прерываниях, имеющих одинаковое значение приоритета, говорят, что они относятся к одному уровню приоритета прерываний. Прерывания обычно обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению разделяемыми ресурсами вычислительной системы - принтером, диском, таймером, процессором и т. п. Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний (Interrupt Servie Routine, ISR). Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения - специальными модулями ядра, а программные прерывания - процедурами ОС, обслуживающими системные вызовы. Кроме этих модулей в операционной системе может находиться так называемый диспетчер прерываний, который координирует работу отдельных обработчиков прерываний. Различают два вида прерываний аппаратные прерывания и программные прерывания. Аппаратное прерывание это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить данное устройство. Программное прерывание создается программами BIOS или DOS для вызова сервисных подпрограмм. Программное прерывание вырабатывается специальной микросхемой контроллером прерываний, который посылает сигнал процессору на приостановку выполнения текущей программы и переход к выполнению программы прерывания. Команды прерывания позволяют вызывать процедуры обслуживания прерываний из программ так же как это сделало бы устройство. Программные прерывания имитируют действие аппаратных прерываний. INT (тип прерывания) Команда INT (прерывание) инициирует выполнение процедуры обработки прерывания, определенного в операнде "тип прерывания". Эта команда сохраняет в стеке регистр флагов, очищает флаги TF и IF для запрещения пошагового выполнения и маскируемых прерываний. Флаги сохраняются в том же формате, что и в команде PUSHF. Затем в стеке сохраняется текущее содержимое регистра сегмента кода CS, вычисляется адрес вектора прерывания путем умножения "типа прерывания" на четыре, и второе слово этого вектора помещается в регистр сегмента кода CS. Далее в стеке сохраняется текущее содержимое счетчика команд IP, и в этот регистр записывается первое слово вычисленного вектора прерывания. Рисунок 15 Вызов обработчика прерывания INTO Команда INTO (прерывание при переполнении) генерирует программное прерывание, если установлен флаг переполнения (OF), в противном случае управление передается следующей команде. Вектор прерывания INTO расположен по адресу 10h. Действие этой команды аналогично действию команды INT. IRET Команда IRET (возврат из прерывания) возвращает управление в точку, откуда прерывание было вызвано, заполняя из стека регистры IP, CS и регистр флагов. Команда IRET используется для выхода из процедур обработки как программных, так и аппаратных прерываний. При написании программ для 16-разрядного режима можно использовать прерывание int 21 h , предназначенное для вызова функций DOS . Существует около 90 различных функций. Номер функции предварительно помещается в регистр AH . Каждая функция использует входные параметры, передающиеся через регистры, которые должны быть проинициализированы перед вызовом прерывания int 21 h . Рассмотрим несколько групп функций DOS : функции ввода, функции вывода, функции даты и времени.
Рассмотрим некоторые функции DOS , которые используются для вывода символьной информации на экран. Далее указывается номер функции и описание функции с примером использования. Средства DOS позволяют выводить на экран только черно-белый текст, возможности позиционирования текста на экране ограничиваются использованием символов возврата каретки (0 Dh ) и перевода строки (0 Ah ). Вывод символа (02 h ) Функция посылает символ на стандартное устройство вывода. В регистр DL помещается выводимый символ. Регистр AL модифицируется системой DOS . Если в процессе вывода символа на экран с клавиатуры поступает код < CTRL >- C Пример. mov AH , 2 h ;Выбор функции 2 mov DL ,* ;Отображаемый символ Прямой вывод (06 h ) Функция может читать из стандартного входного устройства или выводить на стандартное устройство, при этом исключает стандартная реакция системы на ввод < CTRL >- C . В случае вывода код ASCII передаваемого символа засылается в регистр DL , при вводе DL = FFh . Пример. mov DL ,* ;Отображаемый символ int 21 h ;Вызов DOS для исполнения Вывод строки (09 h ) Функция передает строку символов на стандартное устройство вывода. В регистр DX помещается смещение строки. Строка должна оканчиваться символом доллара ($). Управляющие символы (табуляция, возврат каретки) распознаются системой DOS . Если в процессе вывода сообщения на экран с клавиатуры поступает код < CTRL >- C , срабатывает стандартная процедура обработки этого прерывания и вывод прекращается (как и программа в целом) Пример. mov AH , 9 h ;Выбор функции 9 mov DX,offset string ; Адрес строки int 21h ; Вызов DOS DATA string DB Строка 1,0dh,0Ah,$
Рассмотрим некоторые функции DOS , которые используются для ввода символьной информации с клавиатуры. Далее указывается номер функции и описание функции с примером использования. Фильтрующий ввод с дублированием на экране (01 h ) Функция ожидает, пока символ будет считан с устройства ввода, посылает символ на стандартный выход (дисплей) и сохраняет его в регистре AL . Если символ уже находится в буфере клавиатуры, то оно сразу пересылается в регистр AL . Пользователь может прекратить ввод нажатием комбинации клавиш CTRL + Break . Пример. mov AH , 1 h ;Выбор функции 1 int 21h ; Вызов DOS mov char , AL ;Сохранение символа Прямой ввод без ожидания (06 h ) Функция не ожидает поступления очередного символа, а сама обращается в стандартному входному буферу за следующим символом. Комбинация клавиш CTRL + Break неактивна. Перед вызовом прерывания в регистр DL необходимо поместить значение 0 FFh . Если обнаружен символ во входном буфере, то он перемещается в регистр AL и флаг ZF сбрасывается. Если символ не обнаружен, то ZF =1. Пример. mov AH , 6 h ;Выбор функции 6 mov DL, 0FFh int 21h ; Вызов DOS Прямой ввод с неактивной CTRL + Break (07 h ) CTRL + Break неактивна. Регистр AL содержит вводимый символ. Пример. mov AH , 7 h ;Выбор функции 7 int 21h ; Вызов DOS Прямой ввод с активной CTRL + Break (08 h ) Функция ожидает нефильтрованный символ со стандартного входа без эхо-символа. Комбинация клавиш CTRL + Break активна. Регистр AL содержит вводимый символ. Буферизованный ввод (0А h ) Функция 0А h считывает строку символов размером до 255 символов со стандартного входа и сохраняет ее в буфере. Клавиша < BackSpace > может использоваться для стирания символов и возврата курсора. Пользователь может прервать ввод нажатием клавиши < Enter >. Все вводимые символы отображаются на экране. Не пропускаются нажатие клавиш, которые не создают символы ASCII . Байт со смещением 0 содержит максимальное число символов, которое можно ввести, включая клавишу < Enter >. В байте со смещением 1 сохраняется количество введенных символов. Сами символы будут размещены в буфере со смещением 2. Пример . DATA keyboard LABEL BYTE maxkeys DB 32 charsinput DB ? buffer DB 32 dup (0) CODE mov DX,offset keyboard mov AH , 0 Ah ;Выбор ввода с консоли int 21h ; Вызов DOS Получение статуса ввода (0В h ) Функция 0В h проверяет стандартный буфер ввода на наличие в нем символов. Если есть символ, то регистр AL =0 FFh , в противном случае AL =0. Пример. mov AH , 0В h ;Проверка статуса ввода int 21h ; Вызов DOS Чтение из файла или входного устройства (3 Fh ) Функция может использоваться для чтения строки символов из файла или входного устройства. Регистр DX содержит смещение входного буфера, размер которого больше или равен значению величины, помещенной в регистр СХ. Регистр ВХ определяет стандартное входное устройство или индекс файла. Для стандартной клавиатуры значение регистра ВХ=0. В регистре СХ находится значение максимального количества байтов для чтения. В регистре АХ возвращается число реально считанных символов. Функция может считывать символы и прекращает работу при нажатии клавиши < Enter >. Пример . DATA buffer DB 127 dup (0) CODE mov AH , 3 Fh ;Чтение из файла/консоли mov BX,0 mov CX,127 mov DX,offset buffer int 21h ; Вызов DOS Клавиши, не имеющие соответствующего кода ASCII , называются управляющими клавишами. В их число входят клавиши перемещения курсора, клавиши < PgUp >, < PgDown >, < Home >, < End > и другие. При нажатии управляющей клавиши первым символом, помещаемым во входной буфер, будет 00 h . Чтобы получить скан-код нажатой клавиши, необходимо получить из буфера еще один символ. Пример 1. mov AH , 07 h ;Функция ввода с консоли int 21h ; Вызов DOS, AL=0 int 21 h ; AL содержит скан-код mov scan, AL Пример 2. Ожидание ввода пробела loop 1: mov ah ,7 ; нефильтр. ввод без эха int 21h cmp al," " ; Пробел ? jnz loop 1 ; Нет!
Рассмотрим функции DOS для работы с датами и временем. Получение даты (2А h ) Функция возвращает текущую системную дату, помещая год в регистр СХ, а номер месяца в регистр DH . Номер дня помещается в регистр DL , а день недели в регистр AL . Для дней недели используются числовые обозначения: 0 воскресенье, 1 понедельник и т.д. Пример. mov AH , 2А h int 21h mov year, CX mov month, DH mov day, DL mov dayofweek , AL Установка даты (2В h ) Функция устанавливает текущую системную дату, используя те же регистры, что и для функции 2 Ah AL FFh Пример. mov AH , 2В h mov CX, year mov DH, month mov DL, day mov AL, dayofweek int 21h cmp AL, 0 jne baddate Получение времени (2С h ) Функция возвращает текущее системное время, помещая часы в регистр CH , минуты в регистр CL , секунды в DH и сотые доли секунд в DL . Пример. mov AH , 2С h int 21h mov hours, CH mov minutes, CL mov seconds, DH Установка времени (2 Dh ) Функция устанавливает текущее системное время, используя те же регистры, что и для функции 2С h . Функция возвращает значение 0 в регистр AL , если изменение прошло успешно, или значение 0 FFh , если данные не были изменены. Пример. mov AH , 2 Dh mov CH, hours mov CL, minutes mov DH, seconds int 21h cmp AL, 0 jne badtime
Арифметические команды могут обрабатывать четыре типа чисел беззнаковые двоичные, знаковые двоичные, беззнаковые упакованные десятичные и беззнаковые неупакованные десятичные. Двоичные числа могут быть 8- и 16-разрядными. Десятичные упакованные числа содержат в байте две цифры, неупакованные одну. Упакованные десятичные числа содержат в каждом байте две десятичных (0 9) цифры. В старшем полубайте содержится старшая значащая цифра, в младшем младшая. Каждая десятичная цифра представляется в двоичном (или, что то же самое, в шестнадцатеричном) коде. Диапазон представления упакованных десятичных чисел в байте 0 99. Сложение и вычитание упакованных десятичных чисел осуществляется в два этапа. Сначала байты складываются или вычитаются как беззнаковые двоичные числа, а затем соответствующая команда коррекции приводит результат к виду правильного упакованного десятичного числа. Команды коррекции для умножения и деления упакованных десятичных чисел отсутствуют. Неупакованные десятичные числа содержат в байте одну десятичную цифру в младших четырех разрядах. Старшие четыре разряда должны быть нулями. Ниже приведена арифметическая интерпретация 8-разрядных двоичных чисел. Таблица 10
Неупакованное десятичное число легко может быть преобразовано в ASCII-представление соответствующей цифры. Для этого в старший байт неупакованного десятичного числа следует поместить значение 3. Рассмотрим команды для работы с этими форматами чисел. ААА Команда ААА (коррекция сложения неупакованных десятичных чисел) приводит содержимое регистра AL к виду правильного неупакованного десятичного числа, старший полубайт при этом обнуляется. Команда ААА изменяет значение флагов FC и AC; содержимое флагов OF, PF, SF и ZF после выполнения команды ААА неопределено. Пример. mov AX , 0605 h add AL, 09h ;AХ=060Eh aaa ;AX=0704h Команда DAA (десятичная коррекция сложения) приводит содержимое регистра AL к виду правильного упакованного десятичного числа после предшествующей команды сложения. Команда DAA изменяет значение флагов AF, CF, PF, SF и ZF; содержимое флага OF после выполнения команды DAA не определено. Пример. mov AL , 87 h ;упакованное десятичное 87 add AL, 04h ;AL=88h daa ;AX=91h Команда AAS (коррекция вычитания неупакованных десятичных чисел) корректирует результат предшествующего вычитания двух правильных неупакованных десятичных чисел. Операндом назначения в команде вычитания должен быть регистр AL. Команда AAS приводит значение в AL к виду правильного неупакованного десятичного числа; старший полубайт при этом обнуляется. AAS воздействует на флаги AF и CF; Значение флагов OF, PF, SF и ZF после выполнения команды AAS не определено. Команда DAS (десятичная коррекция вычитания) корректирует результат предшествующего вычитания двух правильных неупакованных десятичных чисел. Операндом назначения в команде вычитания должен быть регистр AL. Команда DAS приводит значение в AL к виду двух правильных упакованных десятичных чисел. Команда DAS воздействует на флаги AF и CF. Значение флагов OF, PF, SF и ZF после выполнения команды DAS не определено. ААМ Команда ААМ (коррекция умножения неупакованных десятичных чисел) приводит результат предшествующего умножения к двум правильным неупакованным десятичным цифрам. Для получения правильного результата после выполнения коррекции старшие полубайты умножаемых операндов должны быть нулевыми, а младшие должны быть правильными двоично-десятичными цифрами. Команда ААМ воздействует на флаги PF, SF и ZF. Содержимое флагов AF, CF и OF после выполнения команды ААМ неопределено. Команда AAD (коррекция деления неупакованных десятичных чисел) модифицирует содержимое регистра AL перед выполнение деления так, чтобы при выполнении деления в частном получилось правильное неупакованное десятичное число. Для получения правильного результата после выполнения деления содержимое регистра AH должно быть нулевым. Команда ААD воздействует на флаги PF, SF и ZF. Содержимое флагов AF, CF и OF после выполнения команды ААD неопределено. Пример 1. Вывод неупакованного десятичного числа на экран mov AX , 0605 h ;неупакованное десятичное 65 add AL, 09h ;AХ=060Eh aaa ;AX=0704h or AX, 3030h mov DL , AH ;Отображаемый символ push AX mov AH , 6 h ;Выбор функции 6 int 21 h ;Вызов DOS для исполнения pop AX mov DL , AL ;Отображаемый символ mov AH , 6 h ;Выбор функции 6 int 21 h ;Вызов DOS для исполнения Пример 2. Вывод упакованного десятичного числа на экран mov AL , 65 h ;упакованное десятичное 65 add AL, 09h ; daa ;AL=74h push AX sar AL, 4 or AL,30h mov DL , AL ;Отображаемый символ mov AH , 6 h ;Выбор функции 6 int 21 h ;Вызов DOS для исполнения pop AX and AL,04h or AL , 30 h mov DL , AL ;Отображаемый символ mov AH , 6 h ;Выбор функции 6 int 21 h ;Вызов DOS для исполнения
mov AX,3 int 21h mov BX,AX iret Вызывающая программа Память Обработчик прерывания Для обработки событий, происходящих асинхронно по отношению к выполнению программы, лучше всего подходит механизм прерываний. Прерывание можно рассматривать как некоторое особое событие в системе, требующее моментальной реакции. Например, хорошо спроектированные системы повышенной надежности используют прерывание по аварии в питающей сети для выполнения процедур записи содержимого регистров и оперативной памяти на магнитный носитель с тем, чтобы после восстановления питания можно было продолжить работу с того же места. Кажется очевидным, что возможны самые разнообразные прерывания по самым различным причинам. Поэтому прерывание рассматривается не просто как таковое: с ним связывают число, называемое номером типа прерывания или просто номером прерывания. С каждым номером прерывания связывается то или иное событие. Система умеет распознавать, какое прерывание, с каким номером оно произошло, и запускает соответствующую этому номеру процедуру. Программы могут сами вызывать прерывания с заданным номером. Для этого они используют команду INT. Это так называемые программные прерывания. Программные прерывания не являются асинхронными, так как вызываются из программы (а она-то знает, когда она вызывает прерывание!). Программные прерывания удобно использовать для организации доступа к отдельным, общим для всех программ модулям. Например, программные модули операционной системы доступны прикладным программам именно через прерывания, и нет необходимости при вызове этих модулей знать их текущий адрес в памяти. Прикладные программы могут сами устанавливать свои обработчики прерываний для их последующего использования другими программами. Для этого встраиваемые обработчики прерываний должны быть резидентными в памяти. Мы научимся создавать свои программы обработки прерываний и будем говорить об этом при обсуждении резидентных программ. Аппаратные прерывания вызываются физическими устройствами и приходят асинхронно. Эти прерывания информируют систему о событиях, связанных с работой устройств, например о том, что наконец-то завершилась печать символа на принтере и неплохо было бы выдать следующий символ, или о том, что требуемый сектор диска уже прочитан, его содержимое доступно программе. Использование прерываний при работе с медленными внешними устройствами позволяют совместить ввод/вывод с обработкой данных в центральном процессоре и в результате повышает общую производительность системы. Некоторые прерывания (первые пять в порядке номеров) зарезервированы для использования самим центральным процессором на случай каких-либо особых событий вроде попытки деления на ноль, переполнения и т.п. Иногда желательно сделать систему нечувствительной ко всем или отдельным прерываниям. Для этого используют так называемое маскирование прерываний, о котором мы еще будем подробно говорить. Но некоторые прерывания замаскировать нельзя, это немаскируемые прерывания. Заметим еще, что обработчики прерываний могут сами вызывать программные прерывания, например, для получения доступа к сервису BIOS или DOS (сервис BIOS также доступен через механизм программных прерываний). Составление собственных программ обработки прерываний и замена стандартных обработчиков DOS и BIOS является ответственной и сложной работой. Необходимо учитывать все тонкости работы аппаратуры и взаимодействия программного и аппаратного обеспечения. При отладке возможно разрушение операционной системы с непредсказуемыми последствиями, поэтому надо очень внимательно следить за тем, что делает Ваша программа. 4.2. Таблица векторов прерыванийДля того чтобы связать адрес обработчика прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов - FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором - адрес сегмента обработчика прерывания. Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 - 0000:0004 и т.д. Для программиста, использующего язык Си, таблицу можно описать следующим образом: void (* interrupt_table)();Инициализация таблицы происходит частично BIOSпосле тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке DOS. DOS может переключить на себя некоторые прерывания BIOS. Займемся теперь содержимым таблицы векторов прерываний. Приведем назначение некоторых наиболее важных векторов:
IRQ0 - IRQ15 - это аппаратные прерывания, о них будет рассказано позже. 4.3. Маскирование прерыванийЧасто при выполнении критических участков программ, для того чтобы гарантировать выполнение определенной последовательности команд целиком, приходится запрещать прерывания. Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором. Если вы используете запрет прерываний с помощью команды CLI, следите за тем, чтобы прерывания не отключались на длительный период времени, так как это может привести к нежелательным последствиям. Например, будут отставать часы. Если вам надо запретить не все прерывания, а только некоторые, например, от клавиатуры, то для этого надо воспользоваться услугами контроллера прерываний. Подробно об этом немного ниже, сейчас отметим только, что выдачей в этот контроллер определенной управляющей информации можно замаскировать прерывания от отдельных устройств. 4.4. Изменение таблицы векторов прерыванийВашей программе может потребоваться организовать обработку некоторых прерываний. Для этого программа должна переназначить вектор на свой обработчик. Это можно сделать, изменив содержимое соответствующего элемента таблицы векторов прерываний. Очень важно не забыть перед завершением работы восстановить содержимое измененных векторов в таблице прерываний, т.к. после завершения работы программы память, которая была ей распределена, считается свободной и может быть использована для загрузки другой программы. Если вы забыли восстановить вектор и пришло прерывание, то система может разрушиться - вектор теперь указывает на область, которая может содержать что угодно. Поэтому последовательность действий для нерезидентных программ, желающих обрабатывать прерывания, должна быть такой:
Кроме того, операция изменения вектора прерывания должна быть непрерывной в том смысле, что во время изменения не должно произойти прерывание с номером, для которого производится замена программы обработки. Если вы, например, запишете новое значение смещения, а сегментный адрес обновить не успеете, то по какому адресу будет передано управление в случае прерывания и что при этом произойдет? Об этом можно только догадываться. Для облегчения работы по замене прерывания DOS предоставляет в Ваше распоряжение специальные функции для чтения элемента таблицы векторов прерывания и для записи в нее нового адреса. Если вы будете использовать эти функции, DOS гарантирует, что операция по замене вектора будет выполнена правильно. Вам не надо заботиться о непрерывности процесса замены вектора прерывания. Для чтения вектора используйте функцию 35h прерывания 21h. Перед ее вызовом регистр AL должен содержать номер вектора в таблице. После выполнения функции в регистрах ES:BX будет искомый адрес обработчика прерывания. Функция 25h прерывания 21h устанавливает для вектора с номером, находящимся в AL, обработчик прерывания DS:DX. Разумеется, вы можете непосредственно обращаться к таблице векторов прерываний, но тогда при записи необходимо замаскировать прерывания командой CLI, не забыв разрешить их после записи командой STI. Для пользователей языка Си библиотека Quick C содержит функции _dos_getvec(), _dos_setvect(). Первая функция получает адрес из таблицы векторов прерываний, вторая устанавливает новый адрес. Если вам надо добавить какие-либо собственные действия к тем, что выполняет стандартный обработчик прерывания, то можно организовать цепочку прерываний. Для организации цепочки прерываний вы записываете в векторную таблицу адрес своего обработчика, не забыв сохранить прежнее содержимое таблицы. Ваш обработчик получает управление по прерыванию, выполняет какие-либо действия, затем передает управление стандартному обработчику. Можно сделать и по-другому: ваш обработчик вызывает стандартный обработчик как подпрограмму, после возврата из стандартного обработчика выполняет дополнительные действия. То есть вы можете вставить дополнительную обработку как до вызова стандартного обработчика, так и после его вызова. В библиотеке Quick C имеется функция для организации цепочки прерываний - _chain_intr(). Рассмотрим более подробно возможности библиотеки интегрированной среды Quick C, предназначенные для работы с прерываниями. Модификатор interrupt (_interrupt для Quick C 2.5 и C 6.0) описывает функцию, которая является обработчиком прерывания. Такая функция завершается командой возврата из обработки прерывания IRET, и для нее автоматически генерируются команды сохранения регистров на входе и их восстановления при выходе из обработчика прерывания. Пример использования модификатора для описания функции обработки прерывания: void interrupt far int_funct(void) { // Тело обработчика прерывания }Функция обработки прерывания должна быть FAR-функцией, т.к. таблица векторов прерываний содержит полные адреса в виде сегмент:смещение. Ключевое слово interrupt используется также для описания переменных, предназначенных для хранения векторов прерываний: void (_interrupt _far *oldvect)(void);Модификаторы _interrupt и _far для Quick C 2.5 и C 6.0 являются синонимами соответственно interrupt и far. Какие требования предъявляются к программе обработки прерывания? Если прерывания происходят часто, то их обработка может сильно замедлить работу прикладной программы. Поэтому обработчик прерывания должен быть короткой, быстро работающей программой, которая выполняет только самые необходимые действия. Например, считать очередной символ из порта принтера и поместить его в буфер, увеличить значение какого-либо глобального счетчика прерываний и т.п. Для установки своего обработчика прерываний используйте функцию _dos_setvec. Эта функция имеет два параметра - номер прерывания и указатель на новую функцию обработки прерывания. Например: _dos_setvect(0x16, my_key_intr);В этом примере для клавиатурного прерывания с номером 16h устанавливается новый обработчик прерывания my_key_intr. Если вам надо узнать адрес старого обработчика прерывания по его номеру, лучше всего воспользоваться функцией _dos_getvect, которая принимает в качесте параметра номер прерывания и возвращает указатель на соответствующий этому номеру в таблице векторов прерываний обработчик. Например: old_vector = _dos_getvect(0x16);Для организации цепочки прерываний используйте функцию _chain_intr. В качестве параметра эта функция принимает адрес старого обработчика прерываний. Следующий простой пример иллюстрирует применение всех трех функций, предназначенных для работы с прерываниями. Эта программа встраивает собственный обработчик прерывания таймера, который будет вызываться примерно 18,2 раза в секунду. Встраиваемый обработчик прерывания считает тики таймера и, если значение счетчика кратно 20, на динамик компьютера выдается звуковой сигнал. В конце работы новая программа обработки прерывания таймера вызывает старый обработчик с помощью функции _chain_intr. После установки нового обработчика прерывания таймера основная программа ждет нажатия на клавиатуре любой клавиши, затем она восстанавливает старое содержимое вектора прерывания. #include4.5. Особенности обработки аппаратных прерыванийАппаратные прерывания вырабатываются устройствами компьютера, когда возникает необходимость их обслуживания. Например, по прерыванию таймера соответствующий обработчик прерывания увеличивает содержимое ячеек памяти, используемых для хранения времени. В отличие от программных прерываний, вызываемых запланировано самой прикладной программой, аппаратные прерывания всегда происходят асинхронно по отношению к выполняющимся программам. Кроме того, может возникнуть одновременно сразу несколько прерываний! Для того, чтобы система "не растерялась", решая какое прерывание обслуживать в первую очередь, существует специальная схема приоритетов. Каждому прерыванию назначается свой уникальный приоритет. Если происходит одновременно несколько прерываний, то система отдает предпочтение самому высокоприоритетному, откладывая на время обработку остальных прерываний. Система приоритетов реализована на двух микросхемах Intel 8259 (для машин класса XT - на одной такой микросхеме). Каждая микросхема обслуживает до восьми приоритетов. Микросхемы можно объединять (каскадировать) для увеличения количества уровней приоритетов в системе. Уровни приоритетов обозначаются сокращенно IRQ0 - IRQ15 (для машин класса XT существуют только уровни IRQ0 - IRQ7). Для машин XT приоритеты линейно зависели от номера уровня прерывания. IRQ0 соответствовало самому высокому приоритету, за ним шли IRQ1, IRQ2, IRQ3 и так далее. Уровень IRQ2 в машинах класса XT был зарезервирован для дальнейшего расширения системы и, начиная с машин класса AT, IRQ2 стал использоваться для каскадирования контроллеров прерывания 8259. Добавленные приоритетные уровни IRQ8 - IRQ15 в этих машинах располагаются по приоритету между IRQ1 и IRQ3. Приведем таблицу аппаратных прерываний, расположенных в порядке приоритета:
Из таблицы видно, что самый высокий приоритет у прерываний от интервального таймера, затем идет прерывание от клавиатуры. Для управления схемами приоритетов необходимо знать внутреннее устройство контроллера прерываний 8259. Поступающие прерывания запоминаются в регистре запроса на прерывание IRR. Каждый бит из восьми в этом регистре соответствует прерыванию. После проверки на обработку в настоящий момент другого прерывания запрашивается информация из регистра обслуживания ISR. Перед выдачей запроса на прерывание в процессор проверяется содержимое восьмибитового регистра маски прерываний IMR. Если прерывание данного уровня не замаскировано, то выдается запрос на прерывание. Наиболее интересными с точки зрения программирования контроллера прерываний являются регистры маски прерываний IMR и управляющий регистр прерываний. В машинах класса XT регистр маски прерываний имеет адрес 21h, управляющий регистр прерываний - 20h. Для машин AT первый контроллер 8259 имеет такие же адреса, что и в машинах XT, регистр маски прерываний второго контроллера имеет адрес A1h, управляющий регистр прерываний - A0h. Разряды регистра маски прерываний соответствуют номерам IRQ. Для того чтобы замаскировать аппаратное прерывание какого-либо уровня, надо заслать в регистр маски байт, в котором бит, соответствующий этому уровню, установлен в 1. Например, для маскирования прерываний от НГМД в порт 21h надо заслать двоичное число 01000000. Приведем пример программы, маскирующей прерывание от флоппи-диска: #includeЭта программа есть на дискете, прилагающейся к книге. Запустите ее (с жесткого диска) и попробуйте поработать, например, с дисководом А:. У вас ничего не получится! Чтобы "оживить" флоппи-диски, запустите программу, которая размаскирует все прерывания (в том числе и от флоппи): #includeЗаметьте, что мы только что замаскировали прерывание именно от флоппи-диска, все остальные устройства продолжали нормально работать. Если бы мы выдали машинную команду CLI, то отключились бы все аппаратные прерывания. Это привело бы, например, к тому, что клавиатура была бы заблокирована. Еще одно замечание, касающееся обработки аппаратных прерываний. Если вы полностью заменяете стандартный обработчик аппаратного прерывания, не забудьте в конце программы выдать байт 20h в порт с адресом 20h (A0h для второго контроллера 8259). Эти действия необходимы для очистки регистра обслуживания прерывания ISR. При этом разрешается обработка прерываний с более низким приоритетом чем то, которое только что обрабатывалось. Если вы обрабатываете прерывание 1Ch, то добавка в конце программы не нужна, так как это прерывание является расширением другого прерывания (прерывания таймера). Перед тем, как завершить изучение прерываний, зададимся вопросом - можно ли замаскировать немаскируемое прерывание? Оказывается можно! Конечно, если сигнал прерывания пришел на вход немаскируемого прерывания процессора, ничего сделать нельзя - прерывание произойдет неизбежно. Но в компьютерах XT и AT предусмотрены схемы, блокирующие вход немаскируемого прерывания процессора NMI. Для XT маскированием немаскируемого прерывания управляет порт с адресом 0A0h. Если записать в него 0, немаскируемое прерывание будет запрещено, если 80h - разрешено. Аналогично для AT маскированием немаскируемого прерывания управляет бит 7 порта 70h. Запись байта 0ADh в порт 70h запретит немаскируемое прерывание, а байта 2Dh - разрешит прохождение прерывания. Заметим, что мы не запрещаем немаскируемое прерывание "внутри" процессора - это невозможно по определению, мы "не пускаем" сигнал прерывания на вход NMI. Аборт – это искусственное прерывание беременности с помощью применения фармакологических препаратов или хирургического вмешательства. Согласно законодательству Российской Федерации прерывание гестации по желанию женщины проводится до 12 недели беременности включительно . О том, как происходит процедура медикаментозного прерывания беременности (медикаментозный аборт), а так же как действует медикаментозное прерывание беременности вы узнаете в данной статье. Вконтакте Прежде чем сделать медикаментозный аборт, необходимо тщательно изучить информацию о том, как происходит медаборт, о его достоинствах и недостатках и многом другом. Медикаментозный аборт является наиболее безопасным и щадящим методом прерывания беременности. Он не требует нахождения женщины в стационаре. При этом во время данной манипуляции не происходит хирургического вмешательства, что исключает риски перфорации матки и развития кровотечения. Медицинский аборт в России проводят, как правило, до 42-49 дня с начала последней менструации, при этом он наиболее эффективен до 4-6 недели, так как плод в этот период еще не прикрепился к стенке матки. Очень важно знать, как делается медикаментозный аборт. Как правило выделяют, 1-ый или 2 этапы медикаментозного аборта. Но как вызвать аборт? ![]() Больно ли делать медикаментозное прерывание беременности?Процесс медикаментозного аборта является наименее болезненным и травматичным методом прерывания гестации. Как правило, проявляются такие ощущения медикаментозного аборта как тошнота и диспепсические явления как реакция на медикамент. Не менее важно знать как действует медикаментозный аборт. Следует отметить, что действие синтетического гормонального препарата по симтоматике схоже с нарушением самочувствия при менструации:
Пронзительная боль внизу живота, которую сопровождает сильное кровотечение, не является нормой при медикаментозном аборте и требует срочного обращения за медицинской помощью.
Но как подготовиться к медикаментозному прерыванию беременности? Для проведения фармакологического аборта женщина может обратиться в любую лицензированную медицинскую клинику. Гинеколог должен провести осмотр, провести ультразвуковую диагностику и установить срок беременности. Необходимо обратить внимание на то, какие анализы нужны для медикаментозного аборта (медикаментозного прерывания беременности). Подготовка к медикаментозному прерыванию беременности включает сдачу следующих анализов:
Данные исследования, как правило, проводятся экспресс-методом и позволяют получить результаты в день обращения. При этом в каждой клинике список анализов может варьироваться. В государственных клиниках, как правило, в список обязательных анализов входит цервикальный мазок на наличие инфекций мочеполовой системы и исследование крови на ВИЧ и сифилис. Кроме того, женщине, имеющей хронические заболевания, врач может назначить дополнительные обследования. Очень часто девушек волнует вопрос «можно ли есть перед медикаментозным прерыванием беременности?» В данном случае врачи рекомендуют в день проведения аборта ограничить прием пищи минимум за 2 часа до процедуры, так как препарат может вызывать побочные эффекты в виде диспепсических явлений. Можно выпить чашку теплого сладкого чая. О том, как должен проходить медикаментозный аборт постараемся раскрыть далее в статье. Очень часто девушек, желающих сделать фармакологический аборт, интересует один вопрос «как делают медикаментозное прерывание беременности»? Постараемся на него ответить. Процедура проведения фармакологического аборта включает несколько этапов. Рассмотрим подробнее как проходит медикаментозный аборт (медикаментозное прерывание беременности).
Кроме того, государственные клиники и ряд частных предлагают услуги психолога, консультацию которого можно получить как до прерывания гестации, так и после. Для получения положительного результата следует пройти все этапы медикаментозного прерывания беременности . Если после принятия препарата гигиеническая прокладка полностью пропитывается кровью в течение часа – это сигнал о развитии острого кровотечения. Срочно обратитесь за медицинской помощью. Таким образом, мы ответили на вопрос «как проводится медикаментозное прерывание». Однако при проведении данной процедуры необходимо строго следовать инструкции медикаментозного прерывания беременности.
Даже если медикаментозное прерывание беременности в день обращения проводится в один этап, то занимает от 1 до 2 суток. Многое в данном случае зависит от самочувствия женщины после принятия препарата. Если процедура медикаментозного прерывания беременности требует двукратного принятия препарата, то время медикаментозного аборта будет составлятьне менее трех суток. Формально возможно медикаментозное прерывание беременности за один день, если клиника предоставляет услугу экспресс подготовки анализов. Однако для восстановления самочувствия после проведения процедуры женщине требуется минимум 1-2 дня. В государственных клиниках существуют так называемые «часы тишины». То есть после консультации врача женщина предоставляется время на обдумывание и, возможно, изменение своего решения. В случае, когда женщина планирует сделать мед аборт, этот период составляет 48 часов. Хотя медикаментозное прерывание беременности считается наиболее щадящим видом аборта, оно имеет ряд противопоказаний:
Кроме того, у 1% женщин, кто делал медикаментозный аборт (медикаментозное прерывание), имеют место различные осложнения после вмешательства. Именно поэтому, чтобы не допустить развития каких-либо патологий, проведение медикаментозного аборта самостоятельного запрещено. Препарат, провоцирующий вывод плодного яйца из матки, не находится в свободной продаже. Отпуск данного лекарства без рецепта является нарушением закона, так как только врач может точно назначить дозу, основываясь на сроке беременности, состоянии здоровья женщины и наличии противопоказаний. Попытка сделать фармацевтический аборт в домашних условиях может иметь тяжелые последствия:
Попытка самостоятельно сделать медикаментозное прерывание при внематочной беременности может привести к разрыву маточной трубы и развитию обширного внутреннего кровотечения.
Как проводят медикаментозное прерывание беременности в различных учреждениях вы можете узнать по отзывам о данной процедуре. При правильном подходе и должном наблюдении за состоянием беременной, риск осложнений при данной процедуре минимален, а восстановление женщины происходит быстро и без каких-либо последствий для здоровья. Полезное видеоПодробнее о медикаментозном прерывании беременности смотрите в видео ниже: Надеемся, что в нашей статье вы нашли ответ на вопрос о том, сколько длится медикаментозное прерывание беременности, как происходит фарма аборт и многое другое. Удачи! Вконтакте Видите неточности, неполную или неверную информацию? Знаете, как сделать статью лучше? Хотите предложить для публикации фотографии по теме? Пожалуйста, помогите нам сделать сайт лучше! Оставьте сообщение и свои контакты в комментариях - мы свяжемся с Вами и вместе сделаем публикацию лучше! Во время выполнения компьютером текущей программы, внутри компьютера, а также во внешней среде, связанной с ним (клавиатура, дисплей, внешняя память, технологические и научно-исследовательские процессы, управляемые компьютером и т.д.) могут возникать события, требующие немедленной реакции на них с его стороны. Реакция компьютера заключается в том, что он прерывает обработку текущей программы и переходит к выполнению некоторой другой программы (подпрограммы, процедуры), специально предназначенной для выполнения требований, запрашиваемых данным событием. Процесс выполнения такой подпрограммы называется обработкой (обслуживанием) данного прерывания, а сама подпрограмма обслуживания прерывания часто называется обработчиком прерывания. Прерыванием называется процесс, обуславливающий реакцию компьютера на некоторое событие, требующее немедленного его вмешательства. Запрос прерывания – есть сигнал процессору о появлении события, требующего немедленной реакции процессора путем перехода на подпрограмму обслуживания этого события. Системой прерывания называется комплекс аппаратных и программных средств,обеспечивающих выявление запросов прерывания и эффективное их обслуживание. Процесс прерывания схематически иллюстрирован на рис XI.1. Основными функциями системы прерывания являются следующие. 1. Запоминание состояния процессора, которое определяется состоянием его основных регистров на момент прерывания текущей программы. 2. Осуществление передачи управления на процедуру обслуживания прерывания. 3. Восстановление состояния процессора после окончания выполнения процедуры обслуживания прерывания. 4. Передача управления на продолжение выполнения текущей программы. Таким образом, после появления запроса прерывания и возможности осуществления самого процесса прерывания, процессор прерывает выполнение текущей программы, автоматически запоминая в стеке адрес возврата (CS и IP), а также содержимое регистра флагов Flags. В стек может, также, передаваться и сохраняться содержимое тех регистров, которые могут понадобиться при исполнении процедуры обслуживания прерывания и, следовательно, могут быть искажены. Рис.XI.1 Схема процесса прерывания программ. Однако, если содержимое CS, IP (адрес возврата), и Flags записываются в стек автоматически, то для записи в стек содержимого, требующихся при исполнении процедуры обслуживания прерывания регистров, об этом должен позаботиться сам пользователь (процессор ведь не знает, что может потребоваться). Поэтому пользователь должен включить в начале процедуры обслуживания прерывания, команды сохранения в стеке этих регистров, а в конце процедуры – команды восстановления содержимого их, путем считывания из стека. 2. Классификация типов прерывания . Запросы на прерывание могут возникать как внутри самого процессора, так и со стороны внешней среды (периферийных устройств). Поэтому можно выделить сразу же два класса типов прерываний. 1. Внешние прерывания. 2. Внутренние прерывания. Схематически, источники прерываний программ, применительно к процессорам семейства Х86 иллюстрированы на рис.XI.2. Рис.XI.2 Источники прерываний микропроцессоров семейства Х86. Здесь: INTi (Interrupt i ) – i-ый источник (тип) запроса прерывания от внешних устройств; NMI (Nonmaskable Interrupt ) – немаскируемое прерывание, т.е. прерывание, которое нельзя замаскировать; INTR (Interrupt ) – общий запрос на прерывание процессора; INTA (Interrupt Acknowledge ) – подтверждение процессором получения запроса прерывания, и готовность принятия кода типа прерывания. Внешние прерывания Внешние прерывания относят к так называемым аппаратным прерываниям, поскольку они вызываются аппаратурой, находящейся вне пределов самого компьютера. Внешние прерывания подразделяются на: а) маскируемые прерывания, б) немаскируемые прерывания. Маскируемые прерывания. Маскируемыми – называются такие прерывания, запросы которых могут быть выключены из зоны внимания процессора, путем наложения маски на возможные запросы прерываний. Запросы маскируемых прерываний, в отличие от остальных, поступают на систему прерываний процессора через специальное устройство, называемое контроллером прерываний , который в современных процессорах входит в состав микросхемы «южного моста» Chipset, размещаемой на системной плате компьютера. Основные функции контроллера прерываний заключаются в том, что с его помощью можно: Вследствие различной важности устройств, которые могут запрашивать прерывания у компьютера, устанавливать запросам прерывания определенный уровень приоритета , при котором очередность их обработки осуществляется строго в порядке присвоенной им приоритетности. Это дает возможность запросу с большим уровнем приоритета прерывать исполнение процедур обслуживания прерывания от устройств с меньшим уровнем приоритета; - устанавливать определенный порядок обслуживания запросов прерываний одного уровня привилегий, при одновременном их появлении; - дать возможность пользователю, при необходимости, запрещать компьютеру, реагировать на запросы прерывания внешних устройств, как всех одновременно, так и по отдельности для каждого устройства (т.е. выполнять так называемое маскирование запросов прерывания). Запрещение или разрешение индивидуальных запросов прерываний реализуется при помощи использования в контроллерах прерываний кода маски. Маска представляет собой двоичный код, каждый разряд которого соответствует некоторому запросу прерывания. Обычно устройство маскирования делают таким образом, чтобы логическая единица, записанная в разряд маски, запрещала прохождение соответствующего запроса прерывания к процессору, а логический ноль – разрешала. Иллюстрация процесса маскирования запросов прерывания приведена на рис.XI.3. Рис.X.3 Иллюстрация принципа маскирования запросов прерывания. Заметим при этом, что маскируемые прерывания, все вместе одновременно, могут быть запрещены или разрешены, путем установки или сброса флага IF в регистре флагов процессора, подачей соответствующих команд STI или CLI. Немаскируемые прерывания. Запросы немаскируемых прерываний подаются на специально выделенный вход NMI. Они запрещены быть не могут. Источниками запросов таких прерываний являются, например, устройства контроля пропадания напряжения питания или контроля повреждения каких-либо особо важных систем обработки. Все внешние прерывания асинхронны по отношению к работе процессора, так как они могут появиться в любой момент времени. И, поскольку начало передачи управления на подпрограмму обработки прерывания происходит только после окончания исполнения команды, то время реакции , т.е. запаздывания начала обслуживания по отношению к появлению запроса прерывания, может быть, при выполнении, например, команд умножения или деления, достаточно велико. Внутренние прерывания. Внутренние прерывания образуются внутри компьютера по запросам его отдельных функциональных узлов, или как следствие выполнения некоторых специальных команд INT N. Внутренние прерывания замаскированы быть не могут. Код типа прерываний такого рода формируется автоматически при поступлении соответствующего запроса внутреннего прерывания. Внутренние прерывания бывают двух типов: а) особые случаи или исключения; б) программные прерывания . Особые случаи или исключения. Особые случаи или исключения – это прерывания, которые возникают при аномальной ситуации, сложившейся при выполнении конкретной команды и препятствующей нормальному продолжению программы. К прерываниям – особым случаям (исключениям), относятся, например, такие ситуации: Ошибка деления (частный случай – деление на 0); Переполнение разрядной сетки после выполнения очередной команды; Неразрешенный код команды; Пошаговое прерывание, которое включается при установке в состояние 1 флага TF в регистре флагов Flags. При этом после выполнения каждой команды программы, в стеке автоматически запоминается состояние CS, IP, Flags и выводится на экран дисплея состояние всех регистров процессора и части ячеек ОЗУ. После этого процесс выполнения текущей программы останавливается и ожидается следующий запуск программы для выполнения очередного шага; и т.п. Программные прерывания. Под программными прерываниями понимаются прерывания, инициируемые самой выполняемой программой, а именно, командами типа INT N, где N – номер прерывания в некотором заданном диапазоне. Действие этих прерываний весьма похожи на вызов подпрограмм (процедур), за исключением того, что передача управления осуществляется не по адресу, указываемому в команде CALL, а по номеру (типу) прерывания, по которому в таблице векторов прерывания находится адрес передачи управления. Кроме того, при программном прерывании обязательно автоматически запоминается в стеке состояние регистра флагов Flags. Программные прерывания отличаются от других тем, что они задаются заранее и определены в программе, а не являются случайными по отношению к работе компьютера. Они широко используются при вызове системных функций DOS и BIOS. Основные характеристики систем прерывания. К основным характеристикам систем прерывания относятся. а) Общее количество типов запросов прерывания (входов в систему прерывания). б) Время реакции – интервал времени между появлением запроса прерывания и началом выполнения действий по обслуживанию прерывания. в) Издержки прерывания – затраты времени на переключение программ (см. рис.XI.4). Рис.XI.4 Временная диаграмма процесса прерывания программ. Здесь:t р – время реакции, интервал времени, требующийся для окончания текущей команды или такта. Оно зависит как от момента появления запроса прерывания, так и от времени выполнения текущей команды. Сюда же входит время обнаружения запроса прерывания. t з – время запоминания, интервал времени, требующийся для запоминания состояния прерванной программы, т.е. запоминания состояния регистров CS, IP, Flags. Если требуется запомнить в стеке состояние других регистров процессора, это необходимо предусмотреть самим пользователем в начале самой процедуры обработки прерывания. t проц – время выполнения собственнопроцедурыобслуживанияпрерывания. t в – время восстановления состояния прерванной программы, интервал требующийся для выборки из стека и восстановления в исходное состояние регистров CS, IP и Flags. Интервал времени t з + t в = t изд , т.е. время, затрачиваемое на переключение программ, обычно называют издержками прерывания. t обсл – время обслуживания, интервал времени, требующийся для полного обслуживания данного запроса прерывания. г) Глубина прерывания – максимальное число программ, которые могут прерывать друг друга (см. рис.ХI.5). Если после перехода к процедуре обслуживания прерывания и вплоть до ее окончания прием других запросов запрещается, то говорят, что система прерываний имеет глубину прерывания равную 1. Глубина прерывания равна n , если допускается последовательное прерывание до n программ. Последовательность прерывания программ определяется заданными уровнями их приоритетов. Глубина системы прерывания обычно совпадает с числом уровней приоритета в системе прерываний. Рис ХI.5 Иллюстрация работы систем прерывания с различной глубиной прерывания, (во втором случае наивысший приоритет – у запроса прерывания 3, низший – у запроса прерывания 1). д) Насыщение системы прерываний – насыщением системы прерывания называется ситуация, когда запрос прерывания окажется необслуженным к моменту прихода нового запроса от того же источника (этот случай обозначен пунктиром). В этом случае, предыдущий запрос прерывания от того же источника будет утрачен, что недопустимо. Поэтому быстродействие компьютера, характеристики системы прерывания, число источников прерывания и частота возникновения запросов должны быть согласованы таким образом, чтобы насыщение было невозможным. 4. Классификация систем прерывания. Идентификация запросов прерывания (определение источников запросов) в системах прерывания может осуществляться двумя основными способами: способом опроса (Polling) и векторным способом. В связи с этим и системы прерывания могут быть реализованы двух типов: 1. Системы прерывания с опросом источников прерывания (Polling ). Следует, однако, заметить, что в современных компьютерах системы прерывания строятся как комбинированные системы, поскольку они могут работать как в режиме опроса, так и в режиме векторного запроса, причем режим опроса используется сейчас довольно редко. Для упрощения понимания рассмотрим эти режимы по отдельности. Системы прерывания с опросом – поллинг (p olling ). Системы прерывания с опросом характерны тем, что опрос процессором состояний входов запросов прерывания осуществляется в удобное для него время (например, в промежутках между выполнением программ). Отсюда следует, что главным отличием систем прерывания с опросом является то, что инициатива идентификации и обслуживания запросов прерываний от периферийных устройств, принадлежит процессору . Различают две разновидности режима опроса: а) программный поллинг; б) аппаратный поллинг. а) Программный поллинг. При программном поллинге запросы прерывания опрашиваются программно, так же программно определяется порядок их опроса и их обслуживания. Схема алгоритма реализации программного поллинга приведена на рис ХI.6. Появление самих запросов прерывания фиксируется в специальном регистре, так называемом регистре обслуживаемых запросов прерываний , разряды которого часто именуются «флагами», аналогично разрядам регистра Flags процессора. Регистр обслуживаемых запросов прерываний находится в контроллере прерываний, который, в свою очередь, как уже упоминалось выше, в современных процессорах входит в состав «южного» моста Chipset. Приход запроса прерывания устанавливает соответствующий ему бит этого регистра в состояние 1 (устанавливает «флаг» появления запроса). Рис ХI.6 Блок-схема алгоритма реализации программного поллинга. б) Аппаратный поллинг. При аппаратном поллинге, определение порядка обслуживания запросов прерывания осуществляется аппаратным образом. Например, используя схему соединения запрашивающих прерывание устройств в виде гирляндной цепи (рис XI.7). Рис XI.7. Схема реализации аппаратного поллинга. При этом линия сигнала запроса прерывания INTR# является общей для всех устройств, а линия сигнала подтверждения прерывания INTA соединяет устройства таким образом, что сигнал проходит через каждое из них по очереди. Таким образом, когда появляется сигнал запроса прерывания INTR# от одного или нескольких устройств, то генерируемый процессором сигнал подтверждения получения сигнала запроса прерывания и согласия на его обработку INTA, проходит последовательно через все устройства. Первым этот сигнал получает устройство 1. Если обслуживание ему не требуется, он пересылает сигнал устройству 2. Если же устройство 1 запрашивало прерывание и ждет ответа, оно блокирует сигнал INTA и сообщает свой идентификационный код на линии данных. Таким образом, в данной схеме соединения устройств, наивысший приоритет имеет устройство, которое ближе всего расположено к процессору с точки зрения схемы подключения. Векторные системы прерывания. В случае векторных систем прерывания (основных у современных процессоров) инициатива принадлежит устройству, запрашивающему прерывание. Аналогично аппаратному поллингу, при поступлении в систему хотя бы одного запроса, процессору выставляется сигнал общего прерывания – INTR. Однако, процессор, принудительно проверяет состояние этого сигнала в конце каждого машинного цикла исполнения очередной команды. Если INTR=1, и процессору разрешено прерывание (флаг IF=1), он заканчивает выполнение текущей команды и подтверждает прием запрашиваемого прерывания путем подачи на контроллер прерывания сигнал INTA (Interrupt Acknowledge). Получив сигнал INTA, контроллер выдает процессору код типа прерывания (номер прерывания), по которому процессор определяет логический адрес начала процедуры обслуживания прерывания и, который, обычно, называется вектором прерывания (см. рис ХI.8). Поскольку полный логический адрес для процессоров i8086/88, а также для всех последующих моделей процессоров семейств Х86, Pentium и Intel Core в реальном режиме работы состоит из четырех байт (два байта – указатель базового адреса сегмента и два байта – смещение в данном сегменте), то вектора прерываний являются 4-х байтовым двоичным словом. Вектора прерываний в защищенном режиме работы всех современных компьютеров семейств Х86, Pentium, Intel Core 2, 3, 5, 7 имеют размер 8 байт, поскольку они определяют специальные 8-ми байтовые структуры – дескрипторы, из которых находятся начальные физические адреса, соответствующих процедур обслуживания прерываний. И в том и в другом случае всего определено 256 типов прерываний и, следовательно, любое возможное прерывание определяется 8-ми разрядным двоичным кодом типа прерывания. Рис.ХI.8 Принцип организации векторной системы прерываний процессоров Для процессоров i8086/88 и старших моделей семейства Х86, в реальном режиме работы, все возможные вектора прерываний располагаются в первом килобайте адресного пространства компьютеров. Эта таблица векторов прерываний для процессоров i8086/88 приведена на рис ХI.8. Последовательность действий при поступлении запроса прерывания заключается в следующем. 1. Код типа внутреннего прерывания или код типа внешнего маскируемого аппаратного прерывания, суммируемый с константой 8, сдвигаются на 2 разряда влево и определяют адрес вектора прерывания в ОЗУ. Суммирование с константой 8 производится потому, что для всех внешних аппаратных прерываний предусмотрено использование векторов, начиная с восьмого. Вектора, начиная с нулевого до седьмого включительно, зарезервированы под внутренние прерывания. А умножение кода типа прерывания на 4 (его сдвиг на 2 разряда влево) производится потому, что каждый вектор занимает 4 байта адресного пространства и, следовательно, чтобы сформировать адрес n – го вектора прерывания необходимо код n –го типа прерывания умножить на 4. 2. Для того чтобы можно было возвратиться, после выполнения процедуры обслуживания прерывания, к продолжению прерванной программы, в стеке запоминаются: содержимое кодового сегментного регистра CS, указателя инструкций IP, а также содержимое регистра флагов F. 3. Сбрасывается флаг IF в регистре флагов, запрещая этим новое прерывание до конца обслуживания текущего, а в кодовый регистр CS и регистр указателя команд IP передаются значения соответствующего вектора прерывания из таблицы векторов прерываний (в регистр CS – два старших байта, а в регистр IP – два младших байта вектора). 4. По новому значению CS и IP передается управление на процедуру обслуживания прерывания, соответствующую полученному запросу прерывания. 5. После окончания обслуживания прерывания, выбирается из стека запомненная информация, и восстанавливаются прежние состояния кодового сегментного регистра CS, указателя инструкций IP и регистра флагов F. 6. Передается управление по адресу, находящемуся в регистре IP. |
Читайте: |
---|
Новое
- Отсутствие овуляции при регулярных месячных
- Питание семимесячного ребенка
- Беременность после родов при грудном вскармливании – признаки «интересного» положения
- Яичники у женщин расположение
- Инструкция к различным типам тестов на беременность
- Что делать, если ребенок не берет грудь
- Тянет низ живота после овуляции — что это означает
- Как правильно носить женское нижнее белье
- Второй ребенок!? Боюсь, что муж будет любить ребёнка больше меня
- Мамины проблемы при кормлении