11.3. Приоритеты прерываний
Одновременно может возникать несколько запросов на прерывание, поэтому микропроцессор должен обслуживать их в соответствии с приоритетом. Сначала обслуживаются прерывания с высоким приоритетом, а затем – с более низким. Максимальный приоритет соответствует уровню 0 и убывает с возрастанием номера.
Высший приоритет имеют исключения деления, точки останова и переполнения и программные прерывания. Они взаимно исключают друг друга, т.е. могут произойти при выполнении только определённых инструкций микропроцессора. Поэтому ситуации, когда необходимо обслужить одновременно несколько прерываний этих видов, возникнуть не может. Затем по приоритету следует немаскируемое внешнее прерывание, и потом маскируемые внешние прерывания. Самый низкий приоритет имеет трассировочное прерывание.
11.4. Контроллер прерываний 8259
В IBM PC совместимых устройствах используется микросхема программируемого котроллера прерываний Intel 8259 (отечественный аналог КР580ВН59 или КР1810ВН59А) для обслуживания запросов прерываний от различных устройств. Контроллер обеспечивает восемь векторов.
Запрос на прерывание обозначается как IRQ (Interrupt Request) с соответствующим порядковым номером. Для IBM PC XT существует 8 уровней приоритетов, а для IBM PC AT и последующих серий – 16. Обращения к соответствующим уровням обозначаются сокращениями от IRQ0 до IRQ7 (или от IRQ0 до IRQ15), что означает запрос на прерывание.
Микросхемы контроллера прерываний можно объединять (каскадировать) для увеличения количества уровней приоритетов. При этом общее число уровней прерываний будет достигать 64. Запросы на прерывание 0-7 соответствуют векторам прерываний от 8H до 0FH, запросы на прерывания 8-15 – векторами от 70H до 77H. В табл. 92 приведены назначения этих прерываний.
Табл. 92. Аппаратные прерывания в порядке приоритета.
Номер | IRQN | Описание прерывания |
8 | Прерывание таймера, возникает с частотой 18.2 Гц. | |
9 | IRQ1 | Прерывание от клавиатуры. Генерируется при нажатии и отпускании клавиши. Используется для чтения данных от клавиатуры. |
A | IRQ2 | Каскадирование аппаратных прерываний. |
70 | IRQ8 | Прерывание от часов реального времени. |
71 | IRQ9 | Прерывание от контроллера видеоадаптера. |
72 | IRQ10 | Зарезервировано. |
73 | IRQ11 | Зарезервировано. |
74 | IRQ12 | Зарезервировано. |
75 | IRQ13 | Прерывание от математического сопроцессора. |
76 | IRQ14 | Прерывание от контроллера жесткого диска. |
77 | IRQ15 | Зарезервировано. |
B | Прерывание асинхронного порта COM2. | |
C | IRQ4 | Прерывание асинхронного порта COM1. |
D | IRQ5 | Прерывание от контроллера жесткого диска. |
E | IRQ6 | Прерывание контроллера флоппи-диска по завершении операции. |
F | IRQ7 | Прерывание принтера. Генерируется принтером, когда он готов к выполнению очередной операции. |
Микросхема 8259 имеет три однобайтовых регистра, которые управляют 8 линиями аппаратных прерываний (рис. 42). Регистр запроса на прерывание IRR (Interrupt Request Register) устанавливает соответствующий бит, когда линия прерывания сигнализирует о запросе. Затем проверяется, не обрабатывается ли другое прерывание. Для этого контроллер запрашивает информацию от регистра обслуживания ISR (Interrupt Service Register). Регистр использует адреса портов 20h и A0h для первого и второго контроллера 8259 соответственно.
Перед вызовом прерывания проверяется регистр маски прерываний (Interrupt Mask Register, IMR), чтобы узнать, разрешено ли в данный момент прерывание данного уровня. Проверка связана с тем, что некоторые программы нежелательно прерывать, и они могут запретить аппаратные прерывания. Запрещение всех аппаратных прерываний необходимо при выполнении критических участков программного кода, а также при изменении вектора прерывания, чтобы избежать выполнения прерывания, когда вектор изменен только наполовину.
Рис. 42. Схема обработки аппаратного прерывания.
Регистр IMR определен за адресами 21h или A1h и предназначен только для записи. Если бит в этом порту установлен в 1, то прерывание с соответствующим номером будет запрещено. Для запрета определенных аппаратных прерываний следует установить биты регистра IMR, соответствующие номерам прерываний, выбранным для маскирования.
По завершении подпрограммы обработки прерывания разряд ISR должен быть установлен в нулевое состояние, соответствующий последнему обслуженному запросу с тем, чтобы была разрешена обработка прерываний с более низкими приоритетами, чем только что обработанное. Для этого в регистр ISR должен быть передан код 20h.
Регистр ISR позволяет получить содержимое регистров ISR и IRR. Код команды чтения регистра ISR равен 0Ah, регистра IRR – 0Bh. После выполнения команд содержимое регистров ISR и IRR доступно из портов 20h и A0h соответственно. Для получения содержимого регистра IMR необходимо выполнить чтение портов с адресами 21h или A1h.
studfile.net
Проектирование МПС
Приоритеты прерываний
Прерывания по несуществующему коду операций и ловушкам не различаются по приоритетам, они идут для обслуживания непосредственно в контроллер прерываний. Контроллер прерываний выбирает соответствующую ячейку вектора в памяти специального назначения. Вектор содержит начальный адрес подпрограммы обработки прерывания.
Приоритет поступившего прерывания относительно всех других отложенных запросов прерывания определяет приоритетный шифратор. В таблице 9.1 приведены приоритеты прерываний по умолчанию (15 — самый высокий и 1 — самый низкий).
Немаскируемые прерывания (NMI) имеют самый высокий приоритет относительно всех располагаемых по приоритетам прерываний. Если NMI отложено, приоритетный шифратор выбирает его как самый высокий приоритетный запрос и контроллер прерываний выбирает соответствующую ячейку вектора в памяти специального назначения.
Любой запрос прерывания PTS имеет более высокий приоритет, чем все маскируемые стандартные запросы прерывания. Если никакой запрос NMI не отложен, приоритетный шифратор определяет, что самый высокий приоритет имеют запросы PTS и контроллер прерываний выбирает соответствующую ячейку вектора PTS в памяти специального назначения. Вектор содержит начальный адрес соответствующего управляющего блока PTS (PTSCB).
Если никакие запросы NMI или PTS не отложены, приоритетный шифратор определяет самый высокий приоритет стандартным запросам прерывания и контроллер прерываний выбирает соответствующую ячейку вектора в памяти специального назначения. Вектор содержит начальный адрес соответствующей подпрограммы обработки прерывания.
Изменение приоритетов прерываний
Программное обеспечение может изменять приоритеты по умолчанию для маскируемых прерываний, управляя регистрами маски прерываний (INT_MASK и INT_MASK1, см. Приложение). Например, Вы можете определить тип прерывания, проверить, есть ли оно вообще, можете прервать подпрограмму обработки прерывания или цикл PTS.
Таблица 9.1
8XC196KC/KD, источники прерываний, номера векторов прерываний и приоритеты
Номер прерывания | Вектор прерывания | Источник (источники) | Номер вектора прерывания | Номер PTS вектора | Приоритет |
Special | Unimplemented Optcode | Unimplemented Optcode | 2012H | — | — |
Special | Software Trap | TRAP Instruction | 2010H | — | — |
INT15 | NMI (2) | NMI | 203EH | — | 15 |
INT14 | HSI FIFO Full | HSI FIFO Full | 803CH | 805CH | 14 |
INT13 | EXTINT1(2) | P2.2 | 803AH | 805AH | 13 |
INT12 | Timer 2 Overlow | Timer 2 Overlow | 8038H | 8058H | 12 |
INT11 | Timer 2 Capture (2) | Timer 2 Capture | 8036H | 8056H | 11 |
INT10 | HSI FIFO 4 | HSI FIFO Fourth Entry | 8034H | 8054H | 10 |
INT09 | Receive | PI Flag (3) | 8032H | 8052H | 9 |
INT08 | Transmit | TI Flag (3) | 8030H | 8050H | 8 |
INT07 | EXTINT (2) | P2.2 or P0.7 | 800EH | 804EH | 7 |
INT06 | Serial Port | RI Flag and TI Flag (4) | 800CH | 804CH | 6 |
INT05 | Software Timer | Software Timer 0-3 Timer 2 Reset | 800AH | 804AH | 5 |
INT04 | HSI.0 Pin (2) | HSI.0 | 8008H | 8048H | 4 |
INT03 | High Speed Outputs | HSO.0-HSO.5 | 8006H | 8046H | 3 |
INT02 | HSI Data Avaitable | HSI FIFO Full or HSI Holding reg. Loaded | 8004H | 8044H | 2 |
INT01 | A/D Conversion Complete | A/D Conversion Complete | 8002H | 8042H | 1 |
INT00 | Timer Overflow | Timer 1 or Timer 2 | 8000H | 8040H | 0 |
Каждое следующее маскируемое прерывание может быть обслужено PTS. Любое прерывание PTS имеет приоритет выше всех других маскируемых прерываний. |
Следующий код показывает один из способов запрета всех прерываний, за исключением прерывания EXTINT (приоритет 7) из подпрограммы обработки RI- прерывания (приоритет 9).
SERIAL_RI_ISR:
pusha | ; Сохранить PSW, INT_MASK, INT_MASK1 и WSR |
di | ; Отключить все прерывания |
ldb int_mask1, #00100000B | ; Разрешить только прерывание EXTINT |
ei | ; Разрешить обслуживание прерываний |
… | ; Подпрограмма обслуживания прерывания по приему |
… | ; (RI) |
… | ; |
popa | ; Восстановить PSW, INT_MASK, INT_MASK1 и WSR |
ret |   |
Обратите внимание, что ячейка 8032H в таблице векторов прерываний должна загружаться значением метки SERIAL_RI_ISR раньше, чем придет запрос прерывания по приему RI (Receive Interrupt) и, кроме того, для выполнения этой подпрограммы прерывание должно быть разрешено.
Программы обработки прерываний
Все подпрограммы обслуживания прерываний 8XC196KC/KD обрабатываются следующим образом.
1. После того, как аппаратные средства обнаружат и определят приоритет запроса прерывания, они генерируют и выполняют специальный вызов по прерыванию. Вызов обслуживания прерывания помещает счетчик программ в стек и затем загружает его содержимым вектора, соответствующего самому высокому приоритету, задерживая немаскированные прерывания. Аппаратные средства не позволят выполнить другой вызов по прерыванию, пока не выполнится первая команда подпрограммы обработки текущего прерывания.
2. Команда PUSHA сохраняет содержимое PSW, INT_MASK, INT_MASK1 и регистра выбора окна (WSR) в стеке и затем очищает PSW, INT_MASK и INT_MASK1.
Кроме арифметических флагов PSW содержит бит глобального разрешения прерываний (I) и бит разрешения PTS (PSE). Очищая PSW, INT_MASK и INT_MASK1 регистр, команда PUSHA маскирует все маскируемые прерывания, отключает стандартное обслуживание прерываний и PTS.
Команда PUSHA также запрещает вызовы по прерыванию, пока не выполнится следующая команда .
3. Команда LDB INT_MASK1, #xxxxxxxxB допускает те прерывания, которые могут прервать текущую подпрограмму обработки прерываний. В примере, приведенном выше, только EXTINT может прервать подпрограмму обработки прерывания по приему.
Разрешая или запрещая обслуживание прерываний, программное обеспечение устанавливает собственное обслуживание приоритетов прерываний.
4. Команда EI повторно разрешает обработку прерывания и запрещает вызовы по прерыванию, пока не выполнится следующая команда.
5. Фактически подпрограмма обработки прерывания выполняется внутри приоритетной структуры, установленной программным обеспечением.
6. В конце обслуживающей подпрограммы команда POPA восстанавливает первоначальное содержание PSW, INT_MASK, INT_MASK1 и WSR регистров. Любые изменения, сделанные в этих регистрах в течение подпрограммы обработки прерывания, не сохраняются. Так как вызовы по прерыванию не могут происходить сразу после команды POPA, последняя команда (RET) будет выполнена раньше, чем придет другой вызов по прерыванию. После своего выполнения команда POPA будет повторно допускать отложенное прерывание. Если контроллер прерывания обслуживал отложенное прерывание перед выполнением команды RET, то адрес возврата к коду, который выполнялся, когда произошло первоначальное прерывание, будет сохранен в стеке. Это не представляет проблему для потока программы, зато может приводить к переполнению стека, если прерывания происходят с высокой частотой.
Обратите внимание, что «преамбула» и код завершения для подпрограммы не сохраняют и не восстанавливают регистров оперативной памяти. Подпрограмма обработки прерывания должна сама определить собственный частный набор регистров из нижнего регистрового файла. Доступность 232 байтов оперативной памяти в нижнем регистровом файле позволяет делать это совершенно свободно. Кроме того, оперативная память доступна в верхнем регистровом файле через работу с вертикальными окнами.
Распознование прерываний
Пять внешних источников могут прерывать работу 8XC196KC/KD. Детектор перехода производит выборку входов прерывания в течение фазы 1 (CLKOUT низкого уровня) и защелкивает прерывание, когда происходит переход от низкого уровня сигнала к высокому. Для того, чтобы гарантировать распознавание, вход прерывания должен удерживаться на высоком уровне сигнала дольше, чем одно временное состояние. Если ширина импульса — точно одно временное состояние или меньше, существует статистическая возможность того, что прерывание может быть пропущено.
Так как прерывания запускаются фронтом сигнала, то если вход удерживается в высоком состоянии, генерируется только одно прерывание (если бы устройство использовало переключаемые уровнем, а не фронтом входы, то генерировались бы многократные прерывания).
Обратите внимание: в то время, когда входной вывод удерживается в высоком состоянии, логика обнаружения прерывания может сгенерировать прерывание, если произойдет мгновенный отрицательный импульс. По этой причине входы прерывания, когда они не активны, должны находиться в низком состоянии.
<<< Содержание >>>
dfe.petrsu.ru
Уровень прерывания приоритета — Interrupt priority level
Уровень приоритета прерывания ( IPL ) является частью текущей системы прерывания состояния, которое не указывает на запросы прерываний , которые в настоящее время будут приняты. IPL может быть указан в аппаратных средств с помощью регистров в программируемом контроллере прерываний , или в программном обеспечении с помощью битовой маски или целого значения и исходного кода потоков
обзор
Целое на основе IPL может быть как один бит, только с двумя значениями: (включено все прерывания) 0 или 1 (все прерывания отключены), как и в технологии MOS 6502 . Тем не менее, некоторые архитектуры допускают более широкий диапазон значений, где каждое значение позволяет запросы прерываний , которые указывают на более высокий уровень, в то время как те , блокируя из того же или более низком уровне.
Назначение различных приоритетов прерываний запросов может быть полезным в попытке сбалансировать пропускную способность системы по сравнению с прерыванием латентности : некоторые виды прерываний должны быть направлены ответы более быстро , чем другие, но объем обработки не может быть большим, так что имеет смысл назначить более высокий приоритет для такого рода прерывания.
Контроль уровня прерываний также используется для синхронизации доступа проводить структуры данных. Таким образом, обработчик прерываний планировщика уровня 3 будет временно поднять IPL 7 до обращения каких — либо фактических структур данных планировщика, затем поясница до 3 до фактического переключения процесса контексты. Тем не менее, это было не разрешено для обработчика прерываний , чтобы понизить IPL ниже той , при которой он был введен, так как сделать это может разрушить целостность системы синхронизации.
Конечно, многопроцессорные системы добавить свои собственные осложнения, которые не рассматриваются здесь.
Независимо от того, какие аппаратные средства могут поддерживать типичные UNIX системы -типа использовать лишь два уровня: минимальный (все прерывания отключены) и максимальное (включено все прерывания).
OpenVMS использовании IPL
В качестве примера одного из более сложных систем IPL-обработки когда — либо развернутых, то VAX компьютер и связанный с VMS операционной системы поддерживает 32 уровней приоритета, от 0 до 31. Приоритеты 16 и выше, запросы от внешних аппаратных средств, в то время как значения ниже 16 для программных прерываний (используется внутри операционной системы планировать свою деятельность). Не все значения фактически используются, но вот некоторые из наиболее важных из них:
- Уровень 37 предназначен для «силового обанкротиться» прерывания.
- уровень 24 для прерывания тактового сигнала. Обратите внимание, что это более высокий приоритет, чем прерываний ввода / вывода.
- Уровни 20-28 используются для устройств ввода / вывода.
- Уровни 8-11 используются для вилочных прерываний . Когда водитель получает прерывание устройства (приоритет 20-23), предполагается сделать как можно меньше , насколько это возможно обработку при такой высокой приоритетности; вместо этого, если какие — либо трудоемкие операции должны быть сделаны, они должны быть отсрочена путем запроса прерывания программного обеспечения в диапазоне 8-11; когда это прерывание срабатывает, дальнейшая обработка будет возобновлена. Подобно этому являются «нижние половинки» и их преемники в Linux ядре.
- Уровень 69 используется для синхронизации доступа к структурам данных процесса планировщика.
- Уровень 4 используется для задач , которые-I / O постобработки, окончательного завершения QIO запроса , включая возврат результаты в процесс применения.
- Уровень 3 используется для прерывания процесса реструктуризации. Любой код , выполняемый на более высоких уровнях прерывания не могут предположить , что существует контекст текущего процесса (поскольку Перепланирование процесса может быть в процессе). В частности, ошибки страниц не допускаются на этом или более высоких уровнях.
- Уровень 2 используется для синхронизации доступа к-в процессе структур данных. Каждый раз , когда ядро нуждается в доступе к контексту процесса, он посылает этот процесс в специальном ядре AST , который выполняется в контексте процесса в IPL 2.
- Уровень 0 нормальный уровень для выполнения без прерывания коды, в том числе обычного кода приложения.
Альфа — аппаратный содержит встроенную поддержку использования IPL. Когда OpenVMS был перенесен на Itanium в 1895 году, схема IPL была смоделирована с использованием функций , предоставляемых аппаратными средствами Itanium.
Смотрите также
<img src=»//en.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1×1″ alt=»» title=»»>ru.qwertyu.wiki
Приоритет — прерывание — Большая Энциклопедия Нефти и Газа, статья, страница 1
Приоритет — прерывание
Cтраница 1
Приоритеты прерываний назначаются следующим образом. Все множество сигналов прерывания разделяется на классы, каждый из которых соответствует одной причине прерывания. [1]
Приоритет прерываний от ввода-вывода определяется типом канала и его адресом. Приоритет прерываний от ВУ в пределах — одного канала определяется причинами прерывания, порядком подключения ВУ к интерфейсу и порядком, в котором ВУ отвечает каналу при запросах на прерывание. [2]
Схема приоритета прерываний совместно с РПП обеспечивает учет приоритетов по всем группам источников прерываний. В первую очередь выявляется наличие запроса на прерывание по контролю машины. Далее просмотр содержимого РЗП производится в порядке условных номеров приоритетов, начиная с программных прерываний. Это производится для того, чтобы при наличии нескольких запросов на различные прерывания в конечном итоге первой производилась обработка наиболее важных запросов, начиная с вводо-выводных прерываний, как это уже отмечалось выше. В регистре приоритетов прерываний имеется 5 разрядов — по одному на каждую группу запросов; это сделано вследствие того, что при обращении к супервизору для нового и старого ССП отводятся не те ячейки, что в случае программных прерываний. [4]
Схема приоритетов прерываний может быть задана процессором программным путем. Но в принципе высший уровень приоритета задается для любого из входов запросов, можно также установить циклическое переключение приоритетов ( последний обслуженный запрос получает низший приоритет), обеспечивая тем самым всем запросам равные приоритеты. Если во время обработки прерывания с меньшим уровнем приоритета приходит более приоритетный запрос, то процессор переходит на программу обработки более приоритетного запроса, а после ее выполнения возвращается к программе обработки менее приоритетного запроса. Отметим, что немаскируемое прерывание NMI имеет приоритет выше любого другого аппаратного прерывания. [5]
Используется структура гибкого приоритета прерываний. Уровень 0 — дамый низкий, а уровни 1 и 2 маскируются. Уровень 3 является высшим и не маскируется. Биты маски прерываний в регистре статуса ( SR) показывают текущий уровень приоритета прерываний в процессоре. Прерывания, имеющие уровень приоритета меньше текущего, не учитываются при арбитраже. Уровень приоритета 3 всегда вызывает прерывание процессора. [7]
В большинстве компьютеров приоритеты прерываний упорядочены. [8]
Отражают текущий уровень приоритета прерываний ( IPL) ядра. Прервать процесс работы ядра могут только немаскируемые прерывания или прерывания с IPL больше чем текущее значение маски прерывания. Текущий IPL ядра может меняться программно. В начале процедуры обслуживания прерывания ( ISR), SR ( включая биты маски прерываний) заносится в программный стек, биты маски прерываний меняются на IPL обслуживаемого прерывания. Биты сбрасываются во время сброса. [9]
Почти все шифраторы приоритетов прерываний являются программируемыми. Посредством загрузки управляющего слова в регистр состояния модуля шифратора приоритетов осуществляется управление характеристиками и функциями модуля. Таким образом, характеристики и функции рассматриваемого устройства могут оперативно изменяться программным путем во время функционирования системы. [11]
В многоуровневой системе прерываний приоритет прерывания определяет, может ли программа обработки прерывания одного уровня быть прервана запросом на прерывание другого уровня. Обычно в системах прерывания каждая линия прерывания имеет определенный приоритет. [12]
В DSP56002 регистр уровней приоритета прерываний расширен: добавлены биты 16 — TIL1 и 17 — TIL0, которые задают уровень приоритета прерываний от таймера. Источники прерываний и их уровни приоритета указаны в табл. 2.9. Каждый источник прерываний имеет свой вектор для вызова процедуры обработки прерывания, расположенной в младших 64 словах памяти программ. При переходе к обработке исключений текущая инструкция выполняется, если только выбранное слово не является первым словом двухсловной инструкции, иначе выполнение инструкции прерывается. [14]
Страницы: 1 2 3 4 5
www.ngpedia.ru
2.3 Режим прерывания
|
Рис. 2.8 Виды режимов прерываний |
При функционировании МПС могут возникнуть ситуации, требующие прекращения выполнения текущей программы и перехода к некоторой подпрограмме, обеспечивающей необходимую реакцию системы на сложившиеся обстоятельства. Такие ситуации называются прерываниями или исключениями в зависимости от причин. Прерываниями называются ситуации, возникающие при поступлении соответствующих команд или запросов от внешних источников для соответствующих вариантов происхождения событий.
Исключения – нештатные ситуации (ошибки), возникающие при работе процессора.
Программные прерывания – прерывания, возникающие по ходу выполнения программы. Причины: недопустимый код, обращение по адресу отсутствующего устройства.
Исключения – возникают по причине: деления на ноль, переполнения разрядной сетки, особые ситуации в ходе обработки данных.
Аппаратные прерывания – прерывания, формируемые некоторыми внешними источниками запроса, возникающими при появлении внешнего сигнала запроса аппаратуры: клавиша, выключатель.
Маскируемые прерывания – прерывания, возникающие, когда процессор может проигнорировать специальные команды
Радиальные – радиальная структура – источник запроса прерывания
Векторные – цепочечная структура – источник запроса прерывания.
При появлении сигнала запроса прерывания процессор вначале сопоставляет приоритет текущего участка программы с приоритетом устройства прерывания. Процессор анализирует состояние бита управления прерыванием, который задает либо запрет всех прерываний, либо разрешение. Бит задается программно и может размещаться в триггере или регистре признаков (флаговый регистр). Если прерывания запрещены, то процессор не реагирует на сигнал запроса.
Если прерывания разрешены, процессор завершает выполнение текущей команды, после этого в стеке автоматически сохраняется адрес точки возврата и слово состояния процессора. При таком механизме вся группа устройств однородна.
Адрес точки возврата – адрес следующей по порядку команды.
Процессор выставляет сигнал разрешения прерывания. Если линия одна (цепочечная структура), то сигнал по этой линии распространяется последовательно. Если устройство выставило сигнал запроса прерывания, то устройство блокирует сигнал разрешения, снимает сигнал запроса прерывания.
Процессор одновременно с сигналом разрешения активирует сигнал чтения и устройство прерывания выставляет на младшие разряды ШД адрес вектора прерывания.
Вектор прерываний – начальный адрес подпрограммы обслуживания конкретного прерывания. Разрядность вектора совпадет с разрядностью ША. Т.к. адрес вектора прерывания формируется аппаратно, он должен иметь минимальную разрядность, на вектор прерывания это не распространяется.
Устройство прерываний позволяет обратиться к адресам в начале адресного пространства и выставляет адрес вектора прерывания. Процессор его считывает и выставляет на ША, тем самым обращаясь к ячейке памяти, лежащей в начале области адресов. Из этой ячейки процессор считывает вектор прерывания и загружает его в программный счетчик. Из последующей ячейки памяти процессор считывает новое слово состояние процессора и загружает в регистр состояния.
Возвращение к основной программы происходит по специальной команде, которой завершается подпрограмма обслуживания прерывания. Сохранение в стеке в начале подпрограммы и восстановление в конце подпрограммы содержимого РОНов возлагается на пользователя.
Одной из разновидностей программно-управляемого обмена данными с ВУ в микропроцессоре является обмен с прерыванием программы, отличающийся от асинхронного программно-управляемого обмена тем, что переход к выполнению команд, физически реализующих обмен данными, осуществляется с помощью специальных аппаратных средств. Команды обмена данными в этом случае выделяют в отдельный программный модуль — подпрограмму обработки прерывания. Задачей аппаратных средств обработки прерывания в микропроцессоре как раз и является приостановка выполнения одной программы (ее еще называют основной программой) и передача управления подпрограмме обработки прерывания. Действия, выполняемые при этом процессором, как правило, те же, что и при обращении к подпрограмме. Только при обращении к подпрограмме они инициируются командой, а при обработке прерывания — управляющим сигналом от ВУ, который называют «Запрос на прерывание» или «Требование прерывания».
Эта важная особенность обмена с прерыванием программы позволяет организовать обмен данными с ВУ в произвольные моменты времени, не зависящие от программы, выполняемой в микропроцессоре. Таким образом, появляется возможность обмена данными с ВУ в реальном масштабе времени, определяемом внешней по отношению к микропроцессору средой. Обмен с прерыванием программы существенным образом экономит время процессора, затрачиваемое на обмен. Это происходит за счет того, что исчезает необходимость в организации программных циклов ожидания готовности ВУ, на выполнение которых тратится значительное время, особенно при обмене с медленными ВУ.
Прерывание программы по требованию ВУ не должно оказывать на прерванную программу никакого влияния, кроме увеличения времени ее выполнения за счет приостановки на время выполнения подпрограммы обработки прерывания. Поскольку для выполнения подпрограммы обработки прерывания используются различные регистры процессора (счетчик команд, регистр состояния и т.д.), то информацию, содержащуюся в них в момент прерывания, необходимо сохранить для последующего возврата в прерванную программу.
Обычно задача сохранения содержимого счетчика команд и регистра состояния процессора возлагается на аппаратные средства обработки прерывания. Сохранение содержимого других регистров процессора, используемых в подпрограмме обработки прерывания, производится непосредственно в подпрограмме. Отсюда следует достаточно очевидный факт: чем больший объем информации о прерванной программе сохраняется программным путем, тем больше время реакции микропроцессора на сигнал прерывания, и наоборот. Предпочтительными с точки зрения повышения производительности микропроцессора (сокращения времени выполнения подпрограмм обработки, а, следовательно, и основной программы) являются уменьшение числа команд, обеспечивающих сохранение информации о прерванной программе, и реализация этих функций аппаратными средствами.
Формирование сигналов прерываний — запросов ВУ на обслуживание происходит в контроллерах соответствующих ВУ. В простейших случаях в качестве сигнала прерывания может использоваться сигнал «Готовность ВУ», поступающий из контроллера ВУ в системный интерфейс микропроцессора. Однако такое простое решение обладает существенным недостатком — процессор не имеет возможности управлять прерываниями, т. е. разрешать или запрещать их для отдельных ВУ. В результате организация обмена данными в режиме прерывания с несколькими ВУ существенно усложняется.
Рис. 2.9 Фрагмент блок-схемы контроллера ВУ с разрядом «Разрешение прерывания» в регистре состояния и управления |
Для решения этой проблемы регистр состояния и управления контроллера ВУ (рис. 2.9) дополняют еще одним разрядом — «Разрешение прерывания». Запись 1 или 0 в разряд «Разрешение прерывания» производится программным путем по одной из линий шины данных системного интерфейса. Управляющий сигнал системного интерфейса «Запрос на прерывание» формируется с помощью схемы совпадения только при наличии единиц в разрядах «Готовность ВУ» и «Разрешение прерывания» регистра состояния и управления контроллера.
Аналогичным путем решается проблемам управления прерываниями в микропроцессоре в целом. Для этого в регистре состояния процессора выделяется разряд, содержимое которого определяет, разрешены или запрещены прерывания от внешних устройств. Значение этого разряда может устанавливаться программным путем.
В микропроцессоре обычно используется одноуровневая система прерываний, т. е. сигналы «Запрос на прерывание» от всех ВУ поступают на один вход процессора. Поэтому возникает проблема идентификации ВУ, запросившего обслуживание, и реализации заданной очередности (приоритета) обслуживания ВУ при одновременном поступлении нескольких сигналов прерывания. Существуют два основных способа идентификации ВУ, запросивших обслуживания:
— программный опрос регистров состояния (разряд «Готовность ВУ») контроллеров всех ВУ;
— использование векторов прерывания.
Организация прерываний с программным опросом готовности предполагает наличие в памяти микропроцессора единой подпрограммы обслуживания прерываний от всех внешних устройств. Структура такой подпрограммы приведена на рис. 2.9.
Рис. 2.9 Структура единой программы обработки прерываний и ее связь с основной программой |
Обслуживание ВУ с помощью единой подпрограммы обработки прерываний производится следующим образом. В конце последнего машинного цикла выполнения очередной команды основной программы процессор проверяет наличие требования прерывания от ВУ. Если сигнал прерывания есть и в процессоре прерывание разрешено, то процессор переключается на выполнение подпрограммы обработки прерываний.
После сохранения содержимого регистров процессора, используемых в подпрограмме, начинается последовательный опрос регистров состояния контроллеров всех ВУ, работающих в режиме прерывания. Как только подпрограмма обнаружит готовое к обмену ВУ, сразу выполняются действия по его обслуживанию. Завершается подпрограмма обработки прерывания после опроса готовности всех ВУ и восстановления содержимого регистров процессора.
Приоритет ВУ в микропроцессоре с программным опросом готовности внешнего устройства однозначно определяется порядком их опроса в подпрограмме обработки прерываний. Чем раньше в подпрограмме опрашивается готовность ВУ, тем меньше время реакции на его запрос и выше приоритет. Необходимость проверки готовности всех внешних устройств существенно увеличивает время обслуживания тех ВУ, которые опрашиваются последними. Это является основным недостатком рассматриваемого способа организации прерываний. Поэтому обслуживание прерываний с опросом готовности ВУ используется только в тех случаях, когда отсутствуют жесткие требования на время обработки сигналов прерывания внешних устройств.
Организация системы прерываний в микропроцессоре с использованием векторов прерываний позволяет устранить указанный недостаток. При такой организации системы прерываний ВУ, запросившее обслуживания, само идентифицирует себя с помощью вектора прерывания — адреса ячейки основной памяти микропроцессора, в которой хранится либо первая команда подпрограммы обслуживания прерывания данного ВУ, либо адрес начала такой подпрограммы. Таким образом, процессор, получив вектор прерывания, сразу переключается на выполнение требуемой подпрограммы обработки прерывания. В микропроцессоре с векторной системой прерывания каждое ВУ должно иметь собственную подпрограмму обработки прерывания.
Различают векторные системы с интерфейсным и внеинтерфейсным вектором. В первом случае вектор прерывания (или его адрес) формирует контроллер ВУ, запросившего обслуживания, во втором — контроллер прерываний, общий для всех устройств, работающих в режиме прерываний (IBM-совместимые персональные компьютеры).
Рассмотрим организацию векторной системы с интерфейсным вектором. Вектор прерывания (или его адрес) выдается контроллером не одновременно с запросом на прерывание, а только по разрешению процессора, как это реализовано в схеме на рис. 2.11. Это делается для того, чтобы исключить одновременную выдачу векторов прерывания от нескольких ВУ. В ответ на сигнал контроллера ВУ «Запрос на прерывание» процессор формирует управляющий сигнал «Предоставление прерывания (вход)», который разрешает контроллеру ВУ, запросившему обслуживание, выдачу вектора прерывания в шину адреса системного интерфейса. Для этого в контроллере используются регистр вектора прерывания и схема совпадения И3. Регистр вектора прерывания обычно реализуется с помощью перемычек или переключателей, что позволяет пользователю устанавливать для конкретных ВУ требуемые значения векторов прерывания.
|
Рис. 2.11 Формирование векторов прерывания в контроллере ВУ |
Управляющий сигнал «Предоставление прерывания (выход)» формируется в контроллере ВУ с помощью схемы совпадения И2. Этот сигнал используется для организации последовательного аппаратного опроса готовности ВУ и реализации тем самым требуемых приоритетов ВУ. Процессор при поступлении в него по общей линии системного интерфейса «Запрос на прерывание» сигнала прерывания формирует управляющий сигнал «Предоставление прерывания (вх.)», который поступает сначала в контроллер ВУ с наивысшим приоритетом (рис. 2.12). Если это устройство не требовало обслуживания, то его контроллер пропускает сигнал «Предоставление прерывания» на следующий контроллер, иначе дальнейшее распространение сигнала прекращается и контроллер выдает вектор прерывания на адресно-информационную шину.
|
Рис. 2.12 Реализация приоритетов ВУ в микроЭВМ с векторной системой прерываний с интерфейсным вектором (ППР (вх.) — «Предоставление прерывания (входной)»; ППР (вых.) – «Предоставление прерывания (выходной)») |
Аппаратный опрос готовности ВУ производится гораздо быстрее, нежели программный. Но если обслуживания запросили одновременно два или более ВУ, обслуживание менее приоритетных ВУ будет отложено на время обслуживания более приоритетных, как и в системе прерывания с программным опросом.
Рассмотренная векторная система прерываний практически полностью соответствует системе прерываний, реализованной в микроЭВМ «Электроника-60». Восьмиразрядный вектор прерывания в «Электронике-60» указывает одну из ячеек памяти с адресами от 0 до (376)8, в которой размещается адрес начала подпрограммы обработки прерывания. В следующей за указанной вектором прерывания ячейке памяти хранится новое содержимое регистра состояния процессора, загружаемое в него при переключении на подпрограмму обработки прерывания. Один из бит нового содержимого регистра состояния процессора запрещает или разрешает прерывания от других ВУ, что позволяет ВУ с более высоким приоритетом прерывать подпрограммы обслуживания ВУ с меньшим приоритетом и наоборот.
Векторная система с внеинтерфейсным вектором прерывания используется в IBM-совместимых персональных компьютерах. В этих компьютерах контроллеры внешних устройств не имеют регистров для хранения векторов прерывания, а для идентификации устройств, запросивших обслуживания, используется общий для всех ВУ контроллер прерываний. Ниже приведен пример контроллера прерываний INTEL 8259A.
БИС программируемого контроллера прерываний (ПКП) представляет собой устройство, реализующее до восьми уровней запросов на прерывания с возможностью программного маскирования и изменения порядка обслуживания прерываний. За счет каскадного включения БИС ПКП число уровней прерывания может быть расширено до 64 (в архитектуре персонального компьютера IBM PC AT — 16).
Структурная схема ПКП приведена на рисунке 2.13.
|
Рис. 2.13 Контроллер прерываний Intel 8259A |
В состав БИС входят:
RGI — регистр запретов прерываний; хранит все уровни, на которые поступают запросы IRQx;
PRB — схема принятия решений по приоритетам; схема идентифицирует приоритет запросов и выбирает запрос с наивысшим приоритетом;
ISR — регистр обслуживаемых прерываний; сохраняет уровни запросов прерываний, находящиеся на обслуживании ПКП;
RGM — регистр маскирования прерываний; обеспечивает запрещение одной или нескольких линий запросов прерывания;
BD — буфер данных; предназначен для сопряжения ПКП с системной шиной данных;
RWCU — блок управления записью/чтением; принимает управляющие сигналы от микропроцессора и задает режим функционирования ПКП;
CMP — схема каскадного буфера-компаратора; используется для включения в систему нескольких ПКП;
CU — схема управления; вырабатывает сигналы прерывания и формирует трехбайтовую команду CALL для выдачи на шину данных.
Установка ПКП в исходное состояние и «настройка» его на определенный режим обслуживания прерываний происходит с помощью двух типов команд: команд инициализации (ICW) и команд управления операциями (OCW).
Программируемый контроллер прерываний (ПКП) имеет 16 входов запросов прерываний (IRQ 0 — IRQ 15). Контроллер состоит из двух каскадно включенных контроллеров — выход INTR (запрос на прерывание) второго контроллера подключен ко входу IRQ 2 первого контроллера. В качестве примера отметим, что к линии IRQ 0 подключен системный таймер, к линии IRQ 1 — клавиатура, к линии IRQ 8 — часы реального времени и т.д.
Упрощенная схема взаимодействия контроллера прерываний с процессором и контроллером шины имеет следующий вид (рис. 2.14).
|
Рис. 2.14 Упрощенная схема взаимодействия контроллера прерываний с процессором и контроллером шины в IBM-совместимых персональных компьютерах класса AT |
Эта схема функционирует следующим образом. Пусть в некоторый момент времени контроллер клавиатуры с помощью единичного сигнала по линии IRQ 1 известил контроллер прерываний о своей готовности к обмену. В ответ на запрос контроллер прерываний генерирует сигнал INTR (запрос на прерывание) и посылает его на соответствующий вход процессора. Процессор, если маскируемые прерывания разрешены (т.е. установлен флаг прерываний IF в регистре флагов процессора), посылает на контроллер шины сигналы R# — чтение, C# — управление и IO# — ввод/вывод, определяющие тип цикла шины. Контроллер шины, в свою очередь, генерирует два сигнала подтверждения прерывания INTA# и направляет их на контроллер прерываний. По второму импульсу контроллер прерываний выставляет на шину данных восьмибитный номер вектора прерывания, соответствующий данной линии IRQ.
В режиме реального адреса («реальном» режиме) векторы прерываний хранятся в таблице векторов прерываний, которая находится в первом килобайте оперативной памяти. Под каждый вектор отведено 4 байта (2 байта под адрес сегмента и 2 байта под смещение), т.е. в таблице может содержаться 256 векторов. Адрес вектора в таблице — номер вектора * 4.
Далее процессор считывает номер вектора прерывания. Сохраняет в стеке содержимое регистра флагов, сбрасывает флаг прерываний IF и помещает в стек адрес возврата в прерванную программу (регистры CS и IP). После этого процессор извлекает из таблицы векторов прерываний адрес подпрограммы обработки прерываний для данного устройства и приступает к ее выполнению.
Процедура обработки аппаратного прерывания должна завершаться командой конца прерывания EOI (End of Interruption), посылаемой контроллеру прерываний. Для этого необходимо записать байт 20h в порт 20h (для первого контроллера) и в порт A0h (для второго).
В IBM PC/XT/AT используется режим прерываний с фиксированными приоритетами. Высшим приоритетом обладает запрос по линии IRQ 0, низшим — IRQ 7. Так как второй контроллер подключен к линии IRQ 2 первого контроллера, то приоритеты линий IRQ в порядке убывания приоритета располагаются следующим образом: IRQ 0, IRQ 1, IRQ 8 — IRQ 15, IRQ 3 — IRQ 7. Если запрос на обслуживание посылают одновременно два устройства с разными приоритетами, то контроллер обслуживает запрос с большим приоритетом, а запрос с меньшим приоритетом блокирует. Блокировка сохраняется до получения команды EOI.
studfile.net