Это самая полная возможная схема адресации, в которую входят все случаи, рассмотренные ранее, как частные. Смещение может быть байтом или двойным словом. Если ESP или ЕВР используются в роли базового регистра, селектор сегмента операнда берется по умолчанию из регистра SS, во всех остальных случаях -из DS.
Примечания:
Базовая адресация применяется для работы со строками или записями, при этом в базовый регистр заносится начало структуры или записи, а смещение задает начало некоторого поля записи или структуры (регистр BP используется по умолчанию для доступа к параметрам процедур через кадр стека). Индексная адресация для доступа к элементам однородных (обычно одномерных) массивов, смещение задает начало элемента этого массива. Базово-индексная адресация используется при работе с элементами полей записи и для работы с двумерными массивами.
Начиная с процессоров ix386, появились так называемые расширенные регистры EAX, EBX и т.д. Их длина стала равной 32 битам и между ними нет жесткого закрепления по назначению (кроме EPB и EDX). Кроме того, начиная с процессоров ix386, в адресных выражениях кроме смещения можно использовать масштабирование:
[EAX]*m+смещение m=1,2,4,8
Индексированная адресация mov di,ind
mov al,vec2[di]
mov cx,vec2[di]
Адресация с базированием и индексированием
mov bx,3
mov al,matr[bx][di]
mov cx,matr[bx][di]
mov ax,matr[bx*4][di]
19. Стековые команды. Команды процессора. Call и RET.
Часто в ходе выполнения процессором какой-то последовательности основных действий возникает необходимость переключиться на выполнение другой последовательности действий, а выполнив её снова вернуться к продолжению основной последовательности действий. Успешная реализация такого рода переключений предполагает наличие возможности сохранения в памяти состояния регистров процессора на момент использования этих регистров в действиях, на которые выполнено переключение. Сохранение необходимо для того, чтобы сначала вернуть сохранённое состояние регистров назад в процессор, а затем только вернуться к продолжению основных действий.
|
Часто в ходе выполнения процессором какой-то основной программы возникает необходимость переключаться на выполнение разных подпрограмм, а выполнив их снова возвращаться к продолжению основной программы (см. пример на рис.8.1). Успешная реализация такого рода переключений предполагает наличие возможности сохранения в памяти состояния регистров процессора на момент использования этих регистров в подпрограммах.
Сохранение необходимо для того, чтобы сначала вернуть сохранённое состояние регистров назад в процессор, а только затем вернуться к продолжению основных действий.
Эффективными такие действия могут быть только в том случае, если можно будет быстро сохранять в памяти и возвращать назад состояния регистров. Это возможно если организовать взаимодействие с памятью не обычным образом, как это делается в командах пересылок, по принципу стека.
Стеком называется структура данных, в которой новый элемент всегда записывается в её начало (вершину) и очередной читаемый элемент также всегда выбирается из её начала. Примером стека может служить магазин пистолета.
Структура данных стекового типа организуется в оперативной памяти. Начало области стека (вершина стека) определяется через адрес, который процессор хранит всегда в своём регистре SP, который поэтому называется указателем стека. Механизм взаимодействия процессора со стеком предполагает автоматическое изменение адреса в SP при каждом очередном обращении процессора к стеку: при записи в стек очередного байта происходит автоматический декремент указателя стека, а при чтении из стека очередного байта происходит автоматический инкремент указателя стека. За счёт того, что адрес памяти при стековых операциях формировать не приходится (он всегда имеется в регистре SP) время обращения к памяти сильно сокращается по сравнению с обычными операциями.
|
Для организации стековых операций в системе команд процессора 8080 имеются команды
· инициализации стека,
· записи в стек,
· чтения стека,
· обмена стека с регистровой парой HL.
Инициализация стека заключается в исходной установке его вершины, то есть в загрузке адреса в регистр указателя стека SP. Она может быть выполнена одной из двух команд. Либо при помощи команды двухбайтной пересылки LXI SP,d16, представленной в группе команд пересылок. В этой команде вершина стека определяется непосредственно числом d16, которое является её адресом. Другой способ инициализации стека обеспечивается командой SPHL, которая загружает указатель стека содержимым регистровой пары HL:
(SP)(HL)
Команды записи в стек – PUSH B, PUSH D, PUSH H, PUSH PSW. Они обеспечивают запись в стек последовательно двух байт из выбираемых командами регистровых пар.
Одной из пар в данном случае может быть пара, именуемая в мнемонике PSW (Processor Status Word) и состоящая из аккумулятора A (в качестве младшего регистра в паре) и регистра признаков F. Общая схема выполнения команд записи из регистровой пары rp в стек: stack(rp). При выполнении команд происходят последовательно следующие операции:
|
1. Декремент регистра SP для продвижения по стеку вперёд: (SP)(SP)–1
2. Запись в стек байта старшего регистра: M(SP)старший регистр
3. Декремент регистра SP для продвижения по стеку вперёд: (SP)(SP)–1
4. Запись в стек байта младшего регистра: M(SP)младший регистр
В результате после выполнения команды адрес в указателе стека уменьшается на 2, и вершина стека сдвигается в сторону младших адресов.
Команды чтения стека – POP B, POP D, POP H, POP PSW. Они обеспечивают возврат из стека в выбираемую командами регистровую пару того, что туда отправлялось командами записи. При выполнении команд происходят последовательно следующие операции:
1. Чтение байта из стека в младший регистр: M(SP)® младший регистр
2. Инкремент регистра для продвижения по стеку назад: SP (SP)(SP)+1
3. Чтение байта из стека в старший регистр: M(SP)® старший регистр
4. Инкремент регистра для продвижения по стеку назад: (SP)(SP)+1
В результате после выполнения команды адрес в указателе стека увеличивается на 2, и вершина стека сдвигается в сторону старших адресов.
Команда XTHL обеспечивает обмен двухбайтными операндами. Первый операнд читается из вершины стека, а второй операнд берётся из регистровой пары HL:(HL)«stack. В результате данной операции содержимое регистра SP остаётся без изменений. По своему формату команда является однобайтной. Поэтому фаза выборки команды займёт всего один машинный цикл. Зато для фазы выполнения потребуется четыре машинных цикла: сначала – на два чтения из стека, затем на две записи в стек. И в целом, данная команда оказывается самой продолжительной по времени среди всех возможных команд. На её выполнение процессор затрачивает 18 машинных тактов.
Далее показан пример, иллюстрирующий применение команд управления стеком для организации переключений между основной программой и подпрограммой TIX.
Пример 1.50
Метка Мнемокод Комментарий
;******************** Основная программа
LXI SP,1FFFh; Установка вершины стека
…………………………….
LXI B,03E8h; Определение задержки – 1с (3E8h=1000мс)
CALL TIX; Вызов подпрограммы временной задержки
MOV B,A; продолжение основной программы
…………………………….
;
;******************** Подпрограмма временной задержки
; Вход: BC – интервал временной задержки в мс
TIX: PUSH B; сохранение в стеке (BC)
TI2: PUSH PSW; сохранение в стеке (A)&(F)
PUSH D;сохранение в стеке (DE)
; ******************** Организация цикла программной паузы
XRA A
TI1: MVI D,80
TI0: DCR D
JNZ TI0
DCX B; BC=BC–1
CMP B
JNZ TI1
;*********************
POP D; чтение из стека в (DE)
POP PSW; чтение из стека в (A)&(F)
POP B; чтение из стека в (BC)
RET;возврат из подпрограммы
Команда вызова процедуры − CALL
Команда вызова процедуры − CALL (call a procedure - вызвать процедуру) при исполнении выполняет две функции:
· сохраняет в стеке по адресу SS:SP содержимое указателя команд IP (адрес возврата), при коротком вызове и содержимое CS, IP (по адресам SS:SP, SS:SP-2) при длинном (межсегментном) вызове;
· загружает в IP новый адрес команды, соответствующий вызываемой ближней процедуре, или загружает в CS, IP новый адрес команды, соответствующий вызываемой дальней процедуре (находящейся в другом сегменте). Команда CALL имеет следующий формат:
CALL имя,
где «имя » – имя вызываемой процедуры.
При трансляции ассемблер присваивает метке имя 16- разрядный адрес, а команда CALL записывает этот адрес в указатель команд – IP.
Команда программного прерывания – INT
Команда INT инициирует в процессоре процедуру прерывания, в результате которой управление передается программе обработки прерывания с номером n. Этот номер указан в качестве операнда команды INT. В зависимости от источника, прерывания разделяются на аппаратные и программные, но процедуры обработки прерываний выполняются по одному алгоритму. Микропроцессор 8086 обрабатывает три различные команды прерывания - две команды вызова и одну команду возврата. Команда INT (interrupt - прерывать) имеет следующий формат:
INT тип_прерывания,
где тип_ прерывания – номер, идентифицирующий один из 256 различных векторов, находящихся в памяти (вектор - это четырехбайтная область памяти). Следовательно, каждому из 256 прерываний соответствует один вектор, где хранятся IP и CS программы обработки прерывания. При исполнении команды INT микропроцессор производит следующие действия:
1. Помещает в стек содержимое регистра флагов.
2. Помещает в стек значение регистра CS.
3. Помещает в стек значение регистра IP.
4. Обнуляет флаг трассировки TF и флаг разрешения прерываний IF для исключения пошагового режима исполнения команд и блокировки других маскируемых прерываний.
5. Вычисляет адрес вектора прерывания, для чего умножает тип_ прерывания на 4.
6. Обращается в память по вычисленному адресу и загружает в регистр CS второе слово вектора прерывания.
7. Увеличивает адрес на 2 и загружает из памяти в регистр IP первое слово вектора прерывания.
8. Устанавливает флаги IF и TF.
Итак, после исполнения команды INT в стеке окажутся значения регистра флагов и регистров CS и IP, флаги TF и IF будут равны 0, а пара регистров CS:IP будет указывать на начальный адрес программы обработки прерывания.
Все 256 векторов прерывания размещаются в области памяти с младшими адресами. Так как каждый из них имеет длину 4 байта, то они занимают первые 1К байтов, т.е. область памяти с абсолютными адресами от 0до 3FFH.
Например, команда INT 21Н заставит микропроцессор 8086 вычислить адрес вектора 54Н (4×21Н). Процессор обращается по этим адресам в память и читает из ячеек 54Н и 56Н, соответственно, в IP и CS, адреса программы обработки этого прерывания. Из 256 типов прерываний фирма Intel зарезервировала первые 5 (от 0 до 4) для внутренних прерываний. Вызванная программа анализирует содержимое регистров Al, AH, DX, определяет вид вызываемой функции и осуществляет передачу управления этой функции. В IBM PC многие другие типы прерываний зарезервированы для нужд основной системы ввода-вывода (BIOS), а также для операционной системы DOS.
Команда RET
Команда RET (return from procedure - возвратиться из процедуры) заставляет микропроцессор возвратиться из процедуры в программу, вызвавшую эту процедуру, делая это "откатом" всего, что сделала команда CALL.
Формат команды: RET
Команда RET обязательно должна быть последней командой процедуры, исполняемой микропроцессором. (Это не значит, что команда RET должна стоять в конце процедуры, она исполняется последней).
Команда RET извлекает из стека адрес возврата. Если процедура имеет атрибут NEAR (т.е. находится в том же сегменте команд, что и команда CALL), то команда RET извлекает из стека одно слово и загружает его в указатель команд IP. Если процедура имеет атрибут FAR (т.е. находится в другом сегменте команд), то команда RET извлекает из стека два слова: сначала смещение адреса для загрузки в указатель команд IP, а затем адрес сегмента для загрузки в регистр CS.
Рассмотрим пример.
Для вызова процедуры MY_PROC с атрибутом NEAR из некоторого места программы необходимо выполнить следующую последовательность команд (в левом столбце указаны виртуальные смещения адресов команд):
04F0 CALL MY PROC; Вызвать процедуру.
04F3 М2: Mov AX,BX; Вернуться сюда из процедуры.
04F5...; Здесь могут быть записаны
...; команды основной
...; программы.
proc MY PROC; Начало процедуры.
0602 Mov CL,6; Команды
...; процедуры
...
0622 Ret; Вернуться в основную программу (в адрес 04F5h).
0624 My proc Endp; Конец процедуры.
При исполнении команды CALL микропроцессор помещает в стек смещение адреса метки М2 (04F3H), затем загружает смещение адреса процедуры MY_PROC (0500H) в указатель команд IP. Так как в псевдооператоре PROC атрибут дистанции не указан, то процедура MY_PROC по умолчанию имеет атрибут NEAR. Содержимое регистра IP изменилось, следовательно, микропроцессор продолжит исполнение с той команды, которая имеет это новое смещение адреса. В нашем примере такой командой будет MOV CL,6.
Когда микропроцессор обнаруживает команду RET, то он извлекает адрес возврата из стека и помещает его в указатель команд IP. Это заставляет его возобновить исполнение программы с команды, имеющей метку М2.
Команда JMP
Команда JMP (jump unconditionally − перейти безусловно) -безусловный переход без сохранения информации о точке возврата. Эта команда заставляет микропроцессор извлечь новую команду из адреса определенного операндом (имя) команды JMP. Формат команды:
JMP имя
Операнд имя подчиняется тем же правилам, что и операнд команды CALL. Иначе говоря, он может иметь атрибут NEAR или FAR, быть прямым или косвенным.
По умолчанию команда JMP занимает три байта, то есть метка имя имеет атрибут NEAR, но пять байтов, если она имеет атрибут FAR. Если адрес метки находится не далее минус 128 или плюс 127 байтов от адреса команды JMP, то можно сделать команду JMP двухбайтовой, указав, что ее операнд имеет тип SHORT (short — короткий).
Например, команда JMP SHORT М4 займет два байта. Обычно команда JMP используется для обхода группы команд, которым передается управление из другой части программы.
20. Система ввода-вывода. Адресное пространство ввода вывода. Подключение устройств к пространствам памяти и ввода- вывода. Адресация внешних устройств.
Вводом/выводом (ВВ) называется передача данных между ядром ЭВМ, включающим в себя микропроцессор и основную память, и внешними устройствами (ВУ). Это единственное средство взаимодействия ЭВМ с "внешним миром", и архитектура ВВ (режимы работы, форматы команд, особенности прерываний, скорость обмена и др.) непосредственно влияет на эффективность всей системы. За время эволюции ЭВМ подсистема ВВ претерпела наибольшие изменения благодаря расширению сферы применения ЭВМ и появлению новых внешних устройств. Особенно важную роль средства ВВ играют в управляющих ЭВМ. Разработка аппаратных средств и программного обеспечения ВВ является наиболее сложным этапом проектирования новых систем на базе ЭВМ, а возможности ВВ серийных машин представляют собой один из важных параметров, определяющих выбор машины для конкретного применения.
21. Программная модель внешнего устройства
Подключение внешних устройств к системной шине осуществляется посредством электронных схем, называемых контроллерами ВВ (интерфейсами ВВ). Они согласуют уровни электрических сигналов, а также преобразуют машинные данные в формат, необходимый устройству, и наоборот. Обычно контроллеры ВВ конструктивно оформляются вместе с процессором в виде интерфейсных плат.
В процессе ввода/вывода передается информация двух видов: управляющие данные (слова) и собственно данные, или данные-сообщения. Управляющие данные от процессора, называемые также командными словами или приказами, инициируют действия, не связанные непосредственно с передачей данных, например запуск устройства, запрещение прерываний и т.п. Управляющие данные от внешних устройств называются словами состояния; они содержат информацию об определенных признаках, например о готовности устройства к передаче данных, о наличии ошибок при обмене и т.п. Состояние обычно представляется в декодированной форме - один бит для каждого признака.
Регистр, содержащий группу бит, к которой процессор обращается в операциях ВВ, образует порт ВВ. Таким образом, наиболее общая программная модель внешнего устройства, которое может выполнять ввод и вывод, содержит четыре регистра ВВ: регистр выходных данных (выходной порт), регистр входных данных (входной порт), регистр управления и регистр состояния (рис. 3.1). Каждый из этих регистров должен иметь однозначный адрес, который идентифицируется дешифратором адреса. В зависимости от особенностей устройства общая модель конкретизируется, например, отдельные регистры состояния и управления объединяются в один регистр, в устройстве ввода (вывода) имеется только регистр входных (выходных) данных, для ввода и вывода используется двунаправленный порт.
22. Команды процессора ввода-вывода, формат.
Непосредственные действия, связанные с вводом/выводом, реализуются одним из двух способов, различающихся адресацией регистров ВВ.
Интерфейс с изолированными шинами характеризуется раздельной адресацией памяти и внешних устройств при обмене информацией. Изолированный ВВ предполагает наличие специальных команд ввода/вывода, общий формат которых показан на рис. При выполнении команды ввода IN содержимое адресуемого входного регистра PORT передается во внутренний регистр REG процессора, а при выполнении команды OUT содержимое регистра REG передается в выходной порт PORT. В процессоре могут быть и другие команды, относящиеся к ВВ и связанные с проверкой и модификацией содержимого регистра управления и состояния.
Нетрудно заметить, что в этом способе адресное пространство портов ввода и вывода изолировано от адресного пространства памяти, т.е. в ЭВМ один и тот же адрес могут иметь порт ВВ и ячейка памяти. Разделение адресных пространств осуществляется с помощью управляющих сигналов, относящихся к системам ВВ и памяти (MEMRD# - считывание данных из памяти, MEMWR# - запись данных в память, IORD# - чтение порта ВВ, IOWR# - запись в порт ВВ) (# - активный низкий уровень сигналов).
В ЭВМ, рассчитанной на изолированный ВВ, нетрудно перейти к ВВ, отображенному на память. Если, например, адресное пространство памяти составляет 64 Кбайт, а для программного обеспечения достаточно 32 Кбайт, то область адресов от 0 до 32 К-1 используется для памяти, от 32 К до 64 К-1 - для ввода/вывода. При этом признаком, дифференцирующим обращения к памяти и портам ВВ, может быть старший бит адреса.
Таким образом, интерфейс с общими шинами (ввод/вывод с отображением на память) имеет организацию, при которой часть общего адресного пространства отводится для внешних устройств, регистры которых адресуются так же, как и ячейки памяти. В этом случае для адресации портов ВВ используются полные адресные сигналы: READ - чтение, WRITE - запись.
В операционных системах ЭВМ имеется набор подпрограмм (драйверов ВВ), управляющих операциями ВВ стандартных внешних устройств. Благодаря им пользователь может не знать многих особенностей ВУ и интерфейсов ВВ, а применять четкие программные протоколы.
23. Система прерываний. Аппаратная организация прерываний. 24. Состав и логика работы контроллера прерываний. 25. Маскирование прерываний.
Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся программе обработки прерывания, которая реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.
Таким образом, система прерываний позволяет повысить эффективность использования процессора за счет освобождения его от функций слежения за готовностью периферийных устройств к обмену данными. В зависимости от источника возникновения сигнала прерывания делятся на:
─ асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши;
─ внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;
─ программные (частный случай внутреннего прерывания) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания как правило используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.
Схему передачи управления при прерывании можно отобразить следующим образом.
1. при поступлении прерывания производится идентификация устройства которое его запросило;
2. запоминается информация о состоянии процессора;
3. выполняется инициализация процессора для выполнения программы обработки прерывания;
4. производится запуск и исполнение программы обработки прерывания;
5. восстанавливается состояние процессора и возобновляется работа прерванной программы.
Процесс сохранения текущего состояния на момент прерывания и его последующее восстановление называется контекстным переключением. Под состоянием процессора понимается содержимое счетчика (указателя) команд и всех его регистров на момент прерывания.
Данная схема является упрощенной, так как не рассматривает возможность появления одновременно нескольких прерываний, или появления при обработке одного прерывания следующего.
Существует большое количество классификаций прерываний.
В зависимости от возможности запрета внешние прерывания делятся на:
─ маскируемые — прерывания, которые процессор либо выполняет немедленно, либо игнорирует. Поведение процессора регулируется флагом IF в регистре флагов 0 – запрещены, 1 – разрешены (В некоторых процессорах, наряду с возможностью общего маскирования обеспечено программное маскирование некоторых типов прерываний, т.е. процессор может в определенные моменты времени запрещать прерывания от второстепенных устройств и работать только с рядом основных);
─ немаскируемые (англ. Non maskable interrupt, NMI) — обрабатываются всегда, независимо от запретов на другие прерывания. Например это сигналы об ошибках.
Для маскируемых и немаскируемых прерываний обычно используют различные входные сигналы и соответствующие им входы. Приоритет немаскированных прерываний всегда выше.
При поступлении прерывания оценивается его приоритет. Если приоритет выполняемой программы выше, чем у прерывания, то обработка прерывания будет отложена до окончания выполнения программы (выполняемой программой может быть и обработка другого прерывания). Также при поступлении одновременно нескольких прерываний на обработку должно быть отправлено прерывание с наибольшим приоритетом. Таким образом, необходимо более подробно рассмотреть вопрос оценки приоритета прерываний.
Приоритеты могут быть фиксированными и динамически перестраиваемыми.
Простейший способ задания фиксированных приоритетов заключается в выбираемом разработчиком порядке присоединения линий сигналов запросов к входам системы прерывания. Сами запросы фиксируются в регистре запросов прерываний в строго определенных разрядах. В системах с фиксированным приоритетом при выборе запроса для обработки процессор проверяет (программно или аппаратно) состояние регистра прерываний. Поиск источника запроса прерывания прекращается при обнаружении самого старшего единичного разряда регистра прерывания. Приоритет обслуживаемого запроса определяется его местом в последовательной цепочке. Более быстродействующим периферийным устройством обычно назначают более высокий приоритет. В подобных системах приоритет устройства является жестко фиксированным и изменить его можно только новым соединением линий запросов на входах системы прерываний.
В системах с динамически перестраиваемыми приоритетами последние могут программно переназначаться, при этом наиболее широко используемым является способ кольцевого (кругового) приоритета. В системах с кольцевым приоритетом выбор прерывания для обработки также осуществляется по результатам последовательного опроса регистра прерываний. Однако такой опрос начинается с опроса устройства, следующего по приоритету за только что обслуженным. После проверки последнего разряда регистра запросов прерываний следующим опрашивается самый старший разряд регистра. Кольцевой приоритет рациональнее фиксированного. При наличии частых запросов прерываний он предотвращает блокировку запросов от периферийных устройств с низким уровнем приоритета и не позволяет быстрым периферийным устройством монополизировать СШ для реализации собственных обменов.
Непроизводительные потери времени, затрачиваемые на последовательный поиск источника запроса, являются существенным недостатком метода линейного опроса. Указанного недостатка лишены векторные системы прерывания. Векторные системы прерывания наряду с функцией формирования адреса обработчика поступившего запроса обеспечивают выбор наиболее приоритетного прерывания. В большинстве случаев векторная система прерываний реализуется в виде специализированной СБИС —программируемого контроллера прерываний (ПКП), содержащего логику для назначения приоритетов поступающим запросам. В англоязычной литературе ПКП обозначается PIC (Programmable Interrupt Controller). Рассмотрим функциональную схему контроллера прерываний.
В ответ на запрос прерывания от ПУ контроллер прерываний формирует сигнал запрос прерывания INT, поступающий на вход INTR МП. Реагируя на этот сигнал, МП выдает сигнал подтверждения прерывания INTA (INTerrupt Acknowledge), который поступает в ПКП и используется в нем для считывания вектора прерывания поступившего запроса. Приняв сигнал INTA, контроллер прерываний выставляет на системную шину данных вектор или код прерывания, который считывается процессором. С помощью вектора прерывания процессор определяет адрес подпрограммы обслуживания прерывания. Формирование векторов прерывания и выявление запроса с наивысшим приоритетом осуществляется внутренними схемами ПКП.
Важной функцией приоритетной обработки является организация управления при поступлении запроса прерывания в момент, когда обслуживается предыдущий запрос прерывания. Различают одноуровневые и многоуровневые системы прерываний. В одноуровневых обслуживание нового прерывания возможно только после завершения обработки текущего. Приоритет запросов прерываний в одноуровневых системах иногда называют относительным приоритетом. Если в момент обслуживания такого запроса приходит запрос с более высоким приоритетом, то обслуживаемое прерывание не прерывается и после его окончания выбирается запрос с наивысшим приоритетом из числа поступивших. Для характеристики прерываний в многоуровневых системах используют понятие абсолютного приоритета. В таких системах запросы с более высоким приоритетом могут прерывать обслуживание текущего прерывания с меньшим приоритетом, т. е. допускается прерывание прерывания.
В качестве примера рассмотрим организацию прерываний в микропроцессорной системе на базе процессора х86. Прерывания в такой системе обрабатываются с помощью ПКП, реализованного фирмой Intel в виде СБИС 8259А.
ПКП обеспечивает развязку между внешними источниками прерываний и процессором. Подобная схема применяется в ВМ различных архитектур. На схеме показаны периферийные устройства, подключенные к линиям запроса прерывания IRQ (interrupt request) системной шины ISA. Сигналы прерываний от периферийных устройств, передаваемые по этим линиям, поступают на входы IR контроллера PIC. В IBM PC- совместимых ПК каждое периферийное устройство подключено к своей индивидуальной линии IRQ, и для входа в прерывание периферийное устройство только выставляет запрос. Недостатком подобной организации является трудность подключения большого числа периферийных устройств, поскольку из-за ограниченного числа линий IRQ для дополнительных периферийных устройств свободных линий может не оказаться, а подключение нескольких периферийных устройств к одной линии IRQ недопустимо. Данный недостаток решается каскадным подключением нескольких контроллеров прерываний.
Вектор прерывания — закреплённый за устройством номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний (англ. Interrupt Descriptor Table (IDT)). Местоположение таблицы зависит от типа и режима работы процессора.
В реальном режиме таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний. В защищённом режиме адрес в физической памяти и размер таблицы прерываний определяется 48-битным регистром IDTR.
26. Каналы ввода-вывода. Контроллер прямого доступа к памяти.
Прямой доступ к памяти (англ. direct memory access, DMA) — режим обмена данными между устройствами компьютера или же между устройством и основной памятью, в котором центральный процессор (ЦП) не участвует. Так как данные не пересылаются в ЦП и обратно, скорость передачи увеличивается.
Если требуется заполнить ячейки памяти, расположенные по подряд идущим адресам, используется «пакетный» (англ. burst) режим работы шины:
- размер данных записывается в регистр контроллера DMA;
- первый цикл используется для передачи адреса первой ячейки;
- последующие циклы используются для пересылки данных указанного размера.
Аналогичная оптимизация работы ЦП с памятью крайне затруднена.
В оригинальной архитектуре IBM PC (шина ISA) DMA был возможен лишь при наличии аппаратного контроллера DMA (микросхема Intel 8237).
Контроллер DMA может получать доступ к системной шине независимо от ЦП и имеет несколько регистров. Регистры контроллера DMA доступны ЦП для чтения и записи и используются для задания:
- номера порта, который должен быть использован для передачи данных;
- вида операции (чтение или запись);
- единицы переноса (побайтно или пословно);
- размера данных, которые следует перенести, в байтах.
Рассмотрим процесс чтения данных с устройства. ЦП записывает значения в регистры контроллера DMA, отправляет устройству (например, диску) команду на чтение данных. Устройство читает данные (например, с диска) и записывает в свою внутренную память (буфер). Контроллер DMA устанавливает на адресную шину адрес памяти ПК, отправляет устройству запрос на чтение данных из внутренней памяти (буфера) устройства. Устройство получает запрос и при этом даже не знает, пришёл ли запрос от ЦП или от контроллера DMA. Устройство пересылает очередное слово из своей внутренней памяти (буфера) в оперативную память ПК по адресу, находящемуся на адресной шине. Затем устройство посылает контроллеру DMA сигнал, сообщающий об окончании записи. Контроллер DMA увеличивает адрес памяти ПК и выставляет его на адресную шину, уменьшает значение своего счётчика байтов, снова отправляет запрос на чтение данных из внутренней памяти (буфера) устройства. Цикл повторяется, пока значение счётчика не станет равно нулю. После окончания цикла устройство инициирует прерывание процессора, сообщающее о завершении переноса данных.
Контроллер DMA, способный выполнять несколько операций параллельно, называется многоканальным.