Ноутбуки   
   Софт   
   Компьютеры   
   Компьютерные фирмы   
  Меню сайта

BIOS

SSD-накопители

Акустика для ПК

Видеокарты

Видеокарты - История

Джойстики, клавиатуры и мыши

Дигитайзеры

Жесткие диски

Жесткие диски - история

Звуковые карты

Именитые люди компьютерной индустрии

История компьютеров

Карманные компьютеры

Компьютер десктоп - готовая сборка

Компьютерные фирмы

Компьютеры в теории и практике

Копировальные аппараты

Корпуса, вентиляторы, блоки питания

Маршрутизаторы, коммутаторы, хабы

Материнские платы

Модемы

Модули памяти

Мониторы

Мониторы и видеокарты - история

Новости

Ноутбуки и субноутбуки

Оборудование беспроводной связи, bluetooth, wi-fi

Оптические накопители CD, DVD, Blueray

Оргтехника

Память - история

Плоттеры

Принтеры

Процессоры

Процессоры - история

Сетевые карты

Сетевые фильтры, ИБП

Сети

Сканеры

Сменные жесткие диски

Советские ПК

ТВ-тюнеры

Типы компьютеров

Устройства архивации данных и стримеры

Факс

Флоппи-дисководы

Флэшки и всяко-разно

Шины и чипсеты - история




Главная страница Прайс-лист Интернет-магазин

На что необходимо обратить внимание - прерывания

Компьютер должен обладать способностью реагировать на события, происходящие вне его микропроцессора, например, чтобы воспринимать информацию, вводимую с клавиатуры. Существует два способа организации такой реакции.Один способ состоит в постоянном ожидании события. Такой способ называется "сканированием" или "опросом" и такой опрос может занимать большую часть времени компьютера. Другой способ позволяет компьютеру спокойно выполнять свою работу, пока не произойдет событие, требующее его внимания. Такой подход называется использованием "прерываний". использование прерываний позволяет наиболее эффективно организовать работу компьютера, поскольку время центрального процессора не расходится вхолостую на ожидание.
Какие примеры прерываний можно было бы привести? Например, прерывание возникает, когда Вы нажимаете клавишу на клавиатуре. Другое прерывание вырабатывает таймер, встроенный в IBM/PC. Таймер прерывает работу микропроцессора 8088 восемнадцать раз в секунду. Операционная система ведет отсчет времени дня просто подсчитывая эти прерывания таймера; время дня можно вычислить по количеству прерываний таймера после последней полуночи. Еще один вид прерываний формирует контроллер гибких дисков, сообщая процессору, что очередная дисковая операция наконец завершилась. Поскольку эти операции значительно медленнее чем работа самого микропроцессора, выгода состоит в том, что процессор может не ждать завершения дисковой операции и продолжать вычисления до тех пор, пока контроллер выработает прерывание, указывающее что операция завершена.
Основная идея прерываний заключается в том, что все требующее внимания процессора, должно сообщать ему о себе в форме прерывания. Использование прерываний дает огромные преимущества. Если ничто не требует внимания процессора, - а так обстоит дело большую часть времени, - то процессор не тратит времени на проверку наступления событий, требующих его вмешательства. С другой стороны, если возникает событие, требующее внимания немедленно, оно немедленно и будет обслужено, поскольку прерывания обычно обслуживаются сразу же после их возникновения.
Иногда бывает необходимо, чтобы работа процессора не прерывалась, например, при выполнении какой-либо критичной операции. Для этого у микропроцессора 8088 имеется специальная команда, которая позволяет отложить обслуживание прерываний, запоминая их, и парная ей команда, восстанавливающая нормальный режим обслуживания прерываний. Когда прерывания запрещаются запрос прерываний не теряется - он запоминается и будет обслуживаться, как только будут разрешены прерывания.
Обычно прерывания не запрещаются на сколько-нибуть продолжительное время. Прерывания допустимо запрещать лишь на очень короткие промежутки времени, необходимые для выполнения некоторых внутренних операций процессора, состоящих из небольшого числа команд. Типичным примером таких операций, которые не могут быть прерваны на полпути, может служить загрузка нового набора значений в регистры сегментов. Поскольку эти регистры необходимы для правильной работы любой программы, нарушение согласованности загрузки в них значений может привести к полной неразберихе, поэтому необходимо запретить прерывания на время загрузки в них новых адресов.
Чтобы привести небольшой пример того, к чему может привести запрет прерываний, рассмотрим две программы, названные BEEP и WARBLE. Если у Вас есть пакет программ, прилагающийся к этой книге, Вы найдете в нем обе эти программы, готовые к использованию. С помощью макроассемблера можно получить эти программы из ассемблерного листинга 3.2, приведенного в конце главы. Обе программы: BEEP и WARSLE, генерируют звуки с помощью динамика IBM/PC. (О том как генерируются звуки будет рассказано в главе 11.) Каждая из программ генерирует чистый непрерывный звук в одной тональности, но программа WARBLE не запрещает прерывания. Поэтому она прерывается таймером восемнадцать раз в секунду и хотя прерывания обслуживаются очень быстро, звук получается вибрирующим. Программа BEEP запрещает прерывания и дает непрерывный звук. Запустите обе программы и Вы почувствуете результат запрета прерываний.
Механизм прерывания работает следующим образом: каждому из основных типов прерываний присвоен свой номер. Например, прерывание таймера имеет номер 8, гибкие диски, используют номер 14. В самом начале оперативной памяти IBM/PC хранится таблица с адресами программ, которые должны вызываться при возникновении различных прерываний. Эти адреса должны быть полными сегментированными адресами, так что они занимают по два слова или по четыре байта каждый. Эти адреса иногда называются векторами прерываний. Прерывание с номером 0 имеет вектор, хранящийся в ячейке с нулевым адресом, прерывание ! имеет свой вектор в ячейке 4 и так далее. Когда происходит прерывание номер "X", вектор, хранящийся по адресу 4X, загружается в регистры адреса программы, т.е., регистры CS и IP,и компьютер начинает выполнять программу обслуживания прерывания, которая размещается по этому адресу.
Когда обработка прерывания заканчивается, программа обработки возвращает управление программе, которая выполнялась в момент возникновения прерывания, с помощью специальной команды IRET или "возврат из прерывания". Чтобы такой возврат мог быть выполнен, необходимо сохранить в стеке текущие адреса программы до загрузки в регистры CS и IP вектора прерывания.
Концепция прерывания была разработана для практического решения проблемы взаимодействия компьютера с внешним миром. Однако, тем не менее вскоре оказалось, что прерывания не менее полезны для организации внутренней работы компьютера. Это привело к разработке трех типов прерываний, которые получили названия аппаратных, логических и программных. Между ними нет принципиальной разницы, однако их использование разделит их на три отдельных категории.
Аппаратные прерывания мы уже рассмотрели - они вырабатываются устройствами, требующими внимания процессора. В IBM/PC таких прерываний на удивление мало. Во-первых, имеется так называемое немаскируемое прерывание, используемое для сообщения об отказе питания, оно имеет номер 2. Далее, прерывание 8 используется таймером, номер 9 - клавиатурой и 14 - контролером гибких дисков, всего четыре аппаратных прерывания. Имеется также семь зарезервированных номеров прерываний, 6, 7, с 10 по 13 и 15, которые могут быть использованы в дальнейшем, если возникнет необходимость в дополнительных аппаратных прерываниях. Два из этих семи прерываний уже нашли свое назначение, прерывание 12 зарезервировано для адаптера связи, а прерывание 15 - для интерфейса устройства печати.
Логические прерывания формируются самим процессором 8088, когда он встречает какое-либо необычное условие. Таких прерываний предусмотрено четыре. Прерывание 0 возникает при попытке деления на ноль. Прерывание 1 используется для управления пошаговым режимом работы микропроцессора, при котором команды выполняются по одной. Это прерывание выставляется отладчиками для пошагового выполнения программ. Прерывание 3 вырабатывается командой установки "контрольных точек", которая также используется при отладке. Прерывание 4 формируется при возникновении условия переполнения, например, если результат арифметической операции не помещается в регистр. Таким образом, четыре логических прерывания распадаются на две пары: одна для арифметических операций (деление на ноль и переполнение) и вторая для отладки программ (шаговый режим и контрольные точки).
Наиболее интересны программные прерывания. Если программа должна воспользоваться услугами другой программы, она должна передать управление этой процедуре. Обычно это делается с помощью команды CALL. Для вызова процедуры программа должна знать ее адрес, а вызываемая процедура может не знать адреса вызывающей программы, поскольку механизм вызова автоматически генерирует адрес возврата, который будет использован вызываемой программой после завершения ее выполнения. Образно говоря, для перехода к подпрограмме и возврата из нее достаточно купить билет в один конец - обратный билет предоставляется бесплатно. Идея организации программных прерываний должна позволять свободный переход и в прямом и в обратном направлении, то есть иметь возможность вызвать подпрограмму и получить управление обратно после ее завершения, так чтобы ни одна из сторон не могла не знать о местонахождении (адресе) другой.
Программные прерывания обеспечивают такую возможность путем выработки прерывания самой программой. Например, если программе необходимо вычислить время дня, ей совершенно не требуется знать адрес программы подсчета времени - достаточно знать только, что программа подсчета времени дня запускается программным прерыванием 26.
Программные прерывания используются для вызова всех служебных функций, представляемых обычным пользователям. Эти функции включают все процедуры системы BIOS и ПЗУ и служебные процедуры ДОС. Программные прерывания используются вместо непосредственных адресов по двум причинам. Наиболее важная причина состоит в обеспечении возможности изменения служебных процедур, вызываемых с помощью прерываний. Изменение процедуры обычно приводит к изменению ее размера и размещения в памяти. Если процедура вызывается с помощью прерывания, то использующие ее программы не требуется изменять, когда изменилась процедура.
Другая причина использования программных прерываний для вызова процедур связана с возможностью их замены. Рассмотрим пример. Как Вы узнаете из главы 8, служебные процедуры для обслуживания дисплея выдают звуковой сигнал с помощью динамика IBM/PC, каждый раз когда выдается код CHR$(7). Предположим, что Вам необходимо подавить выдачу звукового сигнала. Для этого можно написать программу, которая будет проверять какие символы выдаются на экран и при появлении кода CHR$(7) заменяет его пробелом. После окончания проверки эта программа должна передавать управление обычной процедуре обслуживания дисплея.Фактически, нужно сделать небольшое добавление перед стандартной процедурой обслуживания дисплея. Чтобы задействовать эту программу необходимо заменить вектор прерывания дисплея (прерывание 16) адресом Вашей программы.
Программные прерывания очень важны для работы IBM/PC. Большая часть этой книги будет посвящена их более подробному описанию. В главе 4 описываются прерывания системы BIOS в ПЗУ. Чтобы Вы могли извлечь максимальную пользу из этих системных функций, пакет программ, прилагаемый к данной книге, содержит полный набор интерфейсных процедур, как ассемблерных, позволяющих осуществлять доступ к служебным процедурам по прерыванию из любых языков программирования (включая Бейсик и Паскаль), так и вспомогательных процедур на Паскале, существенно облегчающих использование ассемблерных процедур.
Прежде чем завершить рассмотрение прерываний, необходимо упомянуть еще об одном необычном применении таблицы векторов прерываний. Таблица векторов прерываний, располагающаяся в самом начале оперативной памяти, предназначенная для хранения полных сегментированных адресов программ, которые должны обслуживать соответствующие прерывания. Однако, в IBM/PC использование таблицы векторов несколько шире. Хотя считается, что таблица должна хранить только адреса программ, разработчики IBM/PC сочли ее очень удобным местом для хранения адресов трех элементов, которые вовсе не являются программами. Это адреса очень важных системных данных. Идея заключается в том, чтобы использовать таблицу векторов прерываний в качестве унифицированного хранилища важных сегментированных адресов - в первую очередь, конечно, адресов программ, но, если необходимо, то и данных. Таким образом, три номера прерываний, 29, 30 и 31 не используются и соответствующие им вектора в таблице обнуляются, чтобы подготовить место для хранения адресов трех важных таблиц данных. Естественно, что эти номера прерываний не могут использоваться: если программа запросит прерывание с номерами 29, 30 или 31, то управление будет передано в одну из таблиц данных, которая начнет выполняться как программа.
В главе 6 мы более подробно рассмотрим ПЗУ и установим, что это за таблица. Затем мы рассмотрим их по одной, в главах 7, 8, 9.


ASCII-коды, американский стандартный код для обмена информацией

Аппаратное и программное обеспечение

Аппаратные прерывания, шина данных

Архитектура компьютера, как работает компьютер

Байты

Биты и числа

Двоичная система счисления

Для чего нужны операционные системы

Микропроцессор - центральный узел персонального компьютера

На что необходимо обратить внимание - прерывания

Организация памяти IBM PC

Память, часть 1 - что это такое и как осуществляется чтение из памяти

Память, часть 2 - что такое адрес

ПЗУ первой персоналки от IBM

Порт

Сверхоперативная память - регистры

СТЕК




Немного рекламы:









































































Реклама и информация:













Счётчик Rambler's Top100