Купить готовые проекты домов в стиле фахверк Индивидуальный дом.
Термином “периферийное устройство” (ПУ) будем называть устройства самой разнообразной природы, которые являются внешними по отношению к вычислительному ядру (процессор + память) и которые по скорости своей работы не согласованы с процессором. Таким естественным образом согласована по скорости работы с процессором основная память. Для лучшего согласования используются дополнительные структурные элементы, такие, как КЭШ-память, дополнительные локальные шины для доступа к памяти и др. (см. более подробно в предыдущих разделах). Как правило, периферийные устройства "работают" медленнее процессора, т.е. передают или принимают данные медленнее, чем это в состоянии делать процессор, обмениваясь по магистрали (например, с памятью). Но, с точки зрения передачи информации по магистрали в рамках упрощенной схемы ЦВМ, периферийное устройство, подключенное к магистрали ОЗУ, мало отличается от памяти.
Приведем два примера простых периферийных устройств персонального компьютера.
1. Таймер. Его основная функция — обеспечить программе возможность, читая содержимое таймера, получать информацию о истекшем времени, подобно тому, как человек получает ее, поглядывая на часы. Таймер в том или ином виде реализован практически в любой вычислительной системе.
Основной элемент таймера — счетчик, на счетный вход которого постоянно поступает последовательность импульсов от генератора стабильной частоты. Вследствие этого, содержимое счетчика таймера постоянно изменяется во времени. Программа может прочитать содержимое счетчика таймера (скопировать это значение в переменную).
Таймер персонального IBM PC-совместимого компьютера содержит три почти одинаковых канала. Счетчик каждого канала имеет 16 двоичных разрядов. Таким образом, программа может считать из канала таймера значение.
2. Последовательный (коммуникационный) интерфейс (иначе называемый COM-портом). Это периферийное устройство на самом деле включает два отдельных независимых узла: передатчик и приемник. Байт, записанный программой в регистр данных передатчика, немедленно после записи начинает бит за битом передаваться через последовательный интерфейс.
OSC: Генератор. Высокочастотные импульсы с периодом 70 нс(14.31818 МГц).
CLOCK: Системная частота (от процессора).
RESET DRV: Этот сигнал используется для сброса или инициализации системной логики при включении питания или при низком уровне напряжения на линии. Он синхронизирован с задним фронтом CLOCK и имеет активный высокий уровень (от процессора ).
SA0-SA19: Биты адреса с 0 по 19. Эти линии используются для адресации памяти и устройств ввода/вывода в системе. 20 адресных линий позволяют адресовать до 1 Мбайта памяти. SA0 — это младший значащий разряд, а SA19 — старший значащий разряд. Сигналы генерируются либо процессором или устройством ПДП. Они имеют активный высокий уровень. (от процессора ).
SD0-SD15: Биты данных с 0 по 15. Эти сигналы служат для передачи данных между процессором, памятью и внешними устройствами. D0 — это младший разряд, а D15- старший. Они имеют активный высокий уровень (двунаправлен).
BALE:Разрешение селекции адреса. Этот сигнал вырабатывается контроллером шины 82288 и используется на системной плате для защелкивания верного значения адреса от процессора. Он доступен на канале ввода/вывода как индикатор того, что значение адреса на магистрали верное (если используется вместе с AEN). Адрес защелкивается по заднему фронту сигнала (двунаправлен).
I/O CH CK: Проверка канала. Этот сигнал обеспечивает процессор информацией об ошибках четности памяти или внешних устройств в канале. Когда этот сигнал переходит в низкое состояние, регистрируется ошибка четности (в процессор).
I/O CHRDY: Готовность канала. Этот сигнал, обычно высокий, — переводится в низкое состояние памятью или внешним устройством для продления цикла обращения. Он дает возможность с минимальными затратами присоединять к системе устройства с низким быстродействием. Любое медленное устройство, используя этот сигнал, должно держать его в низком состоянии до тех пор, пока оно не проведет операцию распознавания адреса и не выполнит команду чтения или записи. Однако этот сигнал не должен оставаться в низком состоянии дольше 10 циклов синхронизации системы. Цикл обращения к памяти или внешнему уст-ройству увеличивается на целое число циклов синхронизации (в процессор).
IRQ3- IRQ15: Запрос на прерывание 3-15. Эти сигналы используются для передачи сообщения процессору о том, что устройство требует обслуживания. Они имеют разный приоритет. IRQ3 — с наивысшим приоритетом, а IRQ15 — с низшим. Запрос на прерывание вырабатывается при переходе сигнала из низкого состояния в высокое и удержании его до распознавания процессором (в процессор ).
IOR: Команда чтения из устройства. Данный сигнал указывает внешнему устройству на необходимость выставить свои данные на шину данных. Он может вырабатываться процессором или устройством ПДП. Активный уровень сигнала — низкий (от процессора ).
IOW: Команда записи в устройство. Этот сигнал сообщает устройству о необходимости ввода данных с магистрали. Он может вырабатываться как процессором, так и внешним устройством. Активный уровень сигнала — низкий (от процессора ).
SMEMR: Команда чтения памяти из пространства 1 Мбайт. Этот сигнал указывает памяти, что она должна выставить свои данные на шину. Он может вырабатываться как процессором, так и устройством ПДП. Активный уровень сигнала — низкий (от процессора ).
SMEMW: Команда записи в память из пространства 1 Мбайт. Данный сигнал указывает памяти на необходимость прочитать данные, выставленные на шину данных. Он может вырабатываться как процессором, так и устройством ПДП . Активный уровень сигнала -низкий (от процессора ).
MEMR : Команда чтения памяти: Этот сигнал указывает памяти, что она должна выставить свои данные на шину. Он может вырабатываться как процессором, так и устройством ПДП. Активный уровень сигнала — низкий (от процессора ).
MEMW: Команда записи в память. Данный сигнал указывает памяти на необходимость прочитать данные, выставленные на шину данных. Он может вырабатываться как процессором, так и устройством ПДП. Активный уровень сигнала — низкий (от процессора ).
DRQ0-DRQ3 DRQ5-DRQ7: Запрос ПДП 0-7. Данные сигналы являются асинхронными запросами канала периферийными устройствами для выполнения операций ПДП. Они имеют различный приоритет. DRQ7 — низший, а DRQ0 — высший. Запрос генерируется переводом соответствующего сигнала в активное (высокое) состояние. Сигнал должен удерживаться в высоком состоянии до тех пор, пока не станет активной соответствующая линия DACK (в процессор).
DACK0 — DACK7: Подтверждение ПДП 0-7. Эти сигналы используются для ответа на соответствующие запросы ПДП (0-7). Они имеют низкий активный уровень (от процессора).
AEN: Разрешение адреса. Данный сигнал используется для отключения процессора и других устройств от канала для проведения цикла ПДП. Когда этот сигнал активен (высокий), контроллер ПДП получает шину адреса, шину данных, а также линии чтения и записи (от процессора).
T/C: Счетчик завершения. На этой линии появляется импульс, когда достигнуто состояние счетчика завершения какого-либо устройства ПДП (от процессора).
REFRESH: Запрос на регенерацию динамической памяти (от процессора).
LA17-LA23: Незащелкиваемые адресные линии А17-А23 (двунаправлен).
SBHE: Показывает что старший байт данных находится на старшей шине данных SD8-SD15 (двунаправлен).
0WS: Сигнал показывает процессору что текущий цикл шины может быть выполнен без дополнительных тактов ожидания (в процессор).
MASTER: Сигнал перехвата управления внешним устройством системной магистрали (в процессор).
MEM CS16: Сигнал, подтверждающий то, что процессор может работать с этой памятью 16-разрядными словами без побайтовой распаковки (в процессор).
IO CS16: Аналогично, только с устройствами ввода/вывода (в процессор).
Помимо описанных сигналов, в канале ввода/вывода имеется ряд линий питания для устройств, подключенных к каналу.
Существует много ситуаций, когда требуется синхронизация выполнения программы с внешним событием. Такие ситуации возникают, прежде всего, при обмене данными с периферийными устройствами, в частности, с устройствами ввода-вывода.
!Примеры:
• Прежде, чем прочитать принятый байт из регистра данных COM- порта, программа должна убедиться, что процесс приема байта завершился. • При выводе данных на принтер программа печати должна проверить, что предыдущая порция данных напечатана (печать происходит довольно долго) и принтер способен принять новую порцию. • При считывании данных с диска сектор аппаратно (гораздо медленнее, чем способен оттуда читать процессор) читается в буфер контроллера, программа должна "узнать", что буфер заполнен, прежде чем читать оттуда.В многозадачной операционной среде одна из выполняемых программ может ожидать данных, подготавливаемых другой программой. В этом случае требуется синхронизация продолжения первой программы с завершением второй. Хотя обе программы работают на одном процессоре под одной ОС, они могут ничего не "знать" друг о друге. В этом случае событие, состоящее в завершении программы, ничем не отличается для программы1 от внешнего события.
Возможны другие (обратные) ситуации, когда наоборот, при наступлении события нельзя продолжать выполнение текущей программы.
!Примеры: • Произошло деление на нуль, и следующую операцию, которая должна использовать результат деления, выполнить невозможно. •Пользователь нажал Ctrl-Break, и выполнять программу дальше не следует.Общим в приведенных примерах является то, что в определенные моменты программа должна прореагировать на некоторое событие, причем, во всех приведенных примерах реакция есть передача управления по условию наступления внешнего события.
Рассмотрим далее, каким образом программа может "узнать" о наступлении события.
Один из возможных подходов к обслуживанию устройств — создание системной очереди на обслуживание. Этот подход предполагает некую очередь, в которую «выстраиваются» запросы на обслуживание от устройств. Микропроцессор периодически просматривает эту очередь и выполняет обслуживание запросов в ней. Этот вариант, хотя и лучше предыдущего, но тоже не оптимальный. В современных микропроцессорах, каковыми являются микропроцессоры фирмы Intel, принят подход, основанный на понятии прерывания. Прерывание — инициируемый определенным образом процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возобновлением выполнения прерванной программы. Что дает использование механизма прерываний? Он позволяет обеспечить наиболее эффективное управление не только внешними устройствами, но, как мы увидим далее, и программами. Нажимая клавишу на клавиатуре, вы фактически инициируете посредством прерывания немедленный вызов программы, которая распознает нажатую клавишу, заносит ее код в буфер клавиатуры, откуда он в дальнейшем считывается некоторой другой программой или операционной системой. На время такой обработки микропроцессор прекращает выполнение некоторой программы и переключается на так называемую процедуру обработки прерывания. После того как данная процедура выполнит необходимые действия, прерванная программа продолжит выполнение с точки, где было приостановлено ее выполнение. Некоторые операционные системы используют механизм прерываний не только для обслуживания внешних устройств, но и для предоставления своих «услуг». Так, хорошо известная и до сих пор достаточно широко используемая операционная система MS-DOS взаимодействует с системными и прикладными программами преимущественно через систему прерываний.
Исходя из вышеприведенных рассуждений, можно сказать, что прерывания могут быть внешними и внутренними.
Внешние прерывания вызываются внешними по отношению к микропроцессору событиями. На рис. ниже схематически изображена подсистема прерываний компьютера на базе микропроцессора Intel.
На рисунке видно, что у микропроцессора есть два физических контакта — INTR и NMI. На них и формируются внешние по отношению к микропроцессору сигналы, возрастающие фронты которых извещают микропроцессор о том, что некоторое внешнее устройство просит уделить ему внимание. Вход INTR (INTerrupt Request) предназначен для фиксации запросов от различных периферийных устройств, например таких, как системные часы, клавиатура, жесткий диск и т. д. Вход NMI (NonMaskable Interrupt) — немаскируемое прерывание. Этот вход используют для того, чтобы сообщить микропроцессору о некотором событии, требующем безотлагательной обработки, или катастрофической ошибке. Внешние прерывания относятся, естественно, к непланируемым прерываниям. Внутренние прерывания возникают внутри микропроцессора во время вычислительного процесса. К их возбуждению приводит одна из двух причин:
Далее мы рассмотрим особенности обработки прерываний. Как уже отмечалось, микропроцессоры Intel имеют два режима работы — реальный и защищенный. В этих режимах обработка прерываний осуществляется принципиально разными методами. Поэтому на данном уроке мы дадим характеристику реального режима и рассмотрим обработку прерываний в этом режиме. На следующем уроке будет рассмотрен защищенный режим работы микропроцессора, и на последнем уроке мы рассмотрим обработку прерываний в этом режиме. Для глубокого понимания процессов, происходящих в компьютере при осуществлении прерывания, необходимо узнать о том, какие ресурсы компьютера при этом задействуются, каковы их характеристики и принципы функционирования.
В общем случае система прерываний — это совокупность программных и аппаратных средств, реализующих механизм прерываний.
К аппаратным средствам системы прерываний относятся:
К программным средствам системы прерываний реального режима относятся:
Большая популярность применения этой микросхемы в качестве диспетчера аппаратных прерываний в компьютерах на базе микропроцессоров Intel объясняется наличием большого количества различных режимов ее работы, что позволяет сделать подсистему прерываний достаточно гибкой и эффективной. Действительно, если посмотреть на развитие аппаратной части компьютеров, начиная, например, с i8088/8086, то видно, что менялись самые разные компоненты, но подсистема прерываний, основанная на микросхеме i8259А, так и осталась неизменной. Программирование контроллера прерываний осуществляется через адресное пространство ввода-вывода посредством двух 8-битовых портов с адресами 20h и 21h. Управление контроллером осуществляется путем посылки в определенной последовательности в эти порты специальных приказов двух типов: Как вы уже, наверное, успели понять, процесс программирования контроллера жестко регламентирован. Поэтому рассмотрим вначале формат приказов управления, а затем их практическое применение.
В процессе загрузки компьютера и в дальнейшем во время работы контроллер прерываний настраивается на работу в одном из четырех режимов: