Лр-2-ЭВМ и ПУ-2014-шина PCI_(PCI Explorer)

advertisement
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ВОЗДУШНОГО ТРАНСПОРТА
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ГРАЖДАНСКОЙ АВИАЦИИ»
————————————————————————————Кафедра вычислительных машин, комплексов, систем и сетей
Гладышев Ю.С.
МЕТОДИЧЕСКОЕ ПОСОБИЕ
для выполнения лабораторной работы № 2
Шина PCI
по курсу
“ЭВМ и ПУ”
для студентов II курса специальности 22.01 дневного обучения
Москва -2014
2
ББК 6Ф7.3
Г 52
Рецензент канд. техн. наук, доц. Л.А. Вайнейкис
Гладышев Ю.С.
Г 52 Шина PCI: Пособие по выполнению лабораторной работы №2. – М.:
МГТУ ГА, 2014.-24 с.
Данное пособие издаётся в соответствии с рабочей программой
дисциплины «ЭВМ и ПУ» по Учебному плану специальности 230101 для
студентов 2 курса дневного обучения.
Рассмотрено и одобрено на заседаниях кафедры
. .2014 г. и
методического совета . .2014 г.
3
Лабораторная работа № 2
Типовая конфигурация ПК с шиной PCI.
1. Цель работы:
1.1. Определить типовую конфигурацию ПК с шиной PCI. с
помощью программы PCI Explorer.
1.2. Определить поля заголовка конфигурационного пространства
для выбранных устройств.
1.3. Составить схему коммутации запросов прерываний устройств,
подключенных к шине PCI.
2. Теоретические сведения
2.1 Архитектура компьютера с шиной PCI
PCI (Peripheral Component Interconnect) - шина взаимодействия
периферийных компонентов. В современной архитектуре PC, является
системной шиной процессора.
Процессор
Контроллер кешпамяти
Память
Мост (North Bridge)
Шина PCI
Устройство PCI
Функция 0
Устройство PCI
Функция 0
#
#
Функция 7
Функция 7
IDE
Мост (South
Bridge)
USB
Шина ISA
Системный . . . . . .
BIOS
LPTn
Рис. 1. Типовая конфигурация ПК с шиной PCI.
Шина обеспечивает синхронный 32-х или 64-х разрядный обмен
данными. При этом для уменьшения числа контактов (и стоимости)
используется мультиплексирование, то есть адрес и данные передаются по
одним и тем же линиям.
4
Частота работы шины 33Mгц_(PCI v1.0) или 66Mгц_(PCI v2.1)
позволяет обеспечить широкий диапазон пропускных способностей (с
использованием пакетного режима):
132 МВ/сек при 32-bit/33Mгц; 264 MB/сек при 32-bit/66Mгц;
264 MB/сек при 64-bit/33Mгц; 528 МВ/сек при 64-bit/66Mгц.
При этом для работы шины на частоте 66Mгц необходимо, чтобы все
периферийные устройства работали на этой частоте.
К основным характеристикам шины относится:
Полная поддержка multiply bus master (например, несколько
контроллеров жестких дисков могут одновременно работать на шине).
Поддержка межшинных мостов для осуществления режимов
кэширования write-back, write-through и т. д.
Автоматическое конфигурирование карт расширения при
включении питания.
Спецификация шины позволяет комбинировать до восьми
функций на одной карте (например, видео + звук и т.д.).
Шина позволяет устанавливать до 4 слотов расширения,
однако возможно использование моста PCI-PCI для увеличения количества
карт расширения.
PCI-устройства оборудованы таймером, который используется
для определения максимального промежутка времени, в течении которого
устройство может занимать шину.
При разработке шины в ее архитектуру были заложены передовые
технические решения, позволяющие повысить пропускную способность.
Шина поддерживает метод передачи данных, называемый "linear
burst" (метод линейных пакетов). Этот метод предполагает, что пакет
информации считывается (или записывается) "одним куском", то есть
адрес автоматически увеличивается для следующего байта. Естественным
образом при этом увеличивается скорость передачи собственно данных за
счет уменьшения числа передаваемых адресов.
В более поздних версиях была достигнута частота работы шины
533MHz (PCI-X v2.0-2002г), при этом пиковая пропускная способность
составила 4096 Мбайт/с, а частота работы шины (PCI Express v1.0-2002г.)
составила 2.5 GHz.
Спецификация шины PCI определяет три типа ресурсов памяти:
два обычных (диапазон памяти и диапазон ввода/вывода, как их называет
компания Microsoft) и configuration space - "конфигурационное
пространство".
2.2. Конфигурационное пространство шины PCI.
Конфигурационные регистры устройств РСI расположены в
обособленном пространстве адресов (отдельном от пространства адресов
памяти и ввода-вывода, таблица 1).
Таблица 1. Заголовок конфигурационного пространства одной
функции устройства PCI.
5
Байты конфигурационного пространства
3
2
1
0
Device ID
Vendor ID
Status Register
Command Register
Class Code
Revision ID
BIST
Lat Timer
CL Size
Header Type
Base Address 0
Base Address 1
Base Address 2
Base Address 3
Base Address 4
Base Address 5
Card Bus CIS Pointer
Subsystem ID
Subsystem Vendor ID
Expansion ROM Base Address
Зарезервировано
Cap. Pointer
Зарезервировано
Max_Lat
Min_Gnt
Int_Pin
Int_Line
00h
04h
08h
0Ch
10h
14h
18h
1Ch
20h
24h
28h
2Ch
30h
34h
38h
3Ch
40h
Определяется пользователем
FFh
Device ID - идентификационный номер устройства, назначаемый
производителем.
Vendor ID - идентификатор производителя устройства.
Revision ID - версия продукта, назначенная производителем.
Header Type - тип заголовка (биты [6:0]), определяющий формат ячеек в
диапазоне 10-3Fh и несущий признак многофункционального
устройства (если бит 7 установлен)
Class Code - код класса, определяющий основную функцию устройства.
Старший байт (адрес 0Bh) определяет базовый класс. Средний –
подкласс, младший - программный интерфейс
BIST - Built-In Self Test - встроенный тест
Остальные поля заголовка являются
допускающими как запись, так и чтение.
регистрами
устройств,
Регистр команд - Command (R/W) - служит для управления
поведением устройства на шине PCI.
Регистр состояния - Status - служит для определения состояния и
свойств устройства.
6
Регистр Cache L i n e S i z e (CL Size) (RW) - служит для задания
размера строки кэша (0-128, допустимые значения 2n, иные трактуются
как 0). По этому параметру инициатор определяет, какой командой
чтения воспользоваться (обычное чтение, чтение строки или
множественное чтение). Ведомое устройство использует этот параметр
для поддержки пересечения границ строк при пакетных обращениях к
памяти. По сбросу регистр обнуляется.
Регистр Latency Timer (RW) - задает значение таймера,
ограничивающего длину транзакции при снятии сигнала GNT#. Значение
указывается в виде числа тактов шины, часть битов может не допускать
изменения (обычно младшие три бита неизменны, так что таймер
программируется с дискретностью в 8 тактов).
Регистр BIST (RW) служит для управления встроенным
самотестированием (Built-in Self Test).
Регистр Card Bus CIS Pointer (необязательный) содержит
указатель на структуру описателя Card Bus для комбинированного
устройства PCI + Card Bus.
Регистр линии прерывания (Interrupt L i n e r e g i s t e r ) является
регистром «только для записи», который указывает приоритет и вектор
(номер системного прерывания), которые редиректор прерываний должен
присвоить данной функции. В персональных компьютерах Intel x86
значения 0x00-0x0F соответствует IRQ0-IRQ15, в системах с APIC может
иметь и большее значение; 255 - неизвестный вход или не используется).
Регистр вывода прерывания (Interrupt pin register). Является
регистром «только для чтения», который идентифицирует линию
прерывания PCI (INTA#-INTD#), используемую данной функцией
данного PCI устройства, причём: 0 - не используется, 1 - INТА#, 2 - INTB#,
3 - INTC#, 4 - INTD#, 5-FFh - резерв.
Регистр Min_GNT (RO) задает минимальное время, на которое
ведущему устройству должно предоставляться управление шиной из
расчета на частоту 33 МГц, в интервалах по 0,25 мкс.
Регистр Max_Lat (RO) задает максимально допустимую задержку
предоставления ведущему устройству доступа к шине, в интервалах по
0,25 мкс (0 - нет специальных требований).
Регистры Subsystem ID (RO, задается производителем) и Subsystem
Vendor ID (RO, производитель получает в PCI SIG) хранят идентификаторы,
позволяющие точно идентифицировать карты и устройства (в системе могут
быть установлены несколько карт с совпадающими идентификаторами
устройства и производителя Device IDnVendor ID). В поле 2Ch ставится
идентификатор производителя карты PCI (может совпадать со значением в
поле 0, если фирма выпускает и микросхемы, и карты).
Регистр Capabi1ity Pointer (CAP_PTR) содержит указатель на цепочку
блоков регистров свойств функции, представленных в конфигурационных
регистрах. Каждый блок представляет собой набор регистров, начинающийся
с границы двойного слова (в указателе биты [1:0] сброшены). Каждый блок
7
начинается с байта идентификатора типа свойства (CAP_ID, определенный
PCI SIG), за которым следует указатель на следующий блок (нулевой указатель
является признаком конца списка блоков), после чего расположены байты
описаний самих свойств. Через CAP_PTR, например, отыскиваются регистры
управления энергопотреблением (если есть), регистры AGP, некоторые
регистры хост-контроллера USB 2.0 и ряд других.
Регистры Base Address Registers (BAR) описывают области памяти и
портов ввода-вывода. Программными манипуляциями с регистрами можно
определить размеры областей. Для областей памяти и портов описания
различаются:
Регистр Expansion ROM Base Address управляет адресацией ПЗУ
программной поддержки устройства. Размер ПЗУ определяется так же, как и
в регистрах базовых адресов. Обращение к ПЗУ возможно лишь при
разрешенном использовании памяти (бит 1 в регистре команд).
Конфигурационные
регистры
обеспечивают
возможность
автоматической настройки всех устройств шины PCI. К этим регистрам
система обращается на этапе конфигурирования - переучета
обнаруженных устройств, выделения им не перекрывающихся ресурсов
(областей памяти и пространства ввoдa - вывода) и назначения номеров
аппаратных прерываний.
При дальнейшей работе взаимодействие прикладного ПО с
устройствами осуществляется преимущественно путем обращения по
назначенным в процессе конфигурирования адресам памяти и вводавывода. Конфигурационные же регистры в регулярной работе
используются для системных целей: настройки параметров, описывающих
поведение устройства на шине, обработки ошибок, идентификации
источника прерываний.
2.3. Протокол, команды и транзакции шин PC и PCI-XI.
Обращения к регистрам и памяти устройств РСI выполняются
командами шины PCI. Команды может подавать любой инициатор - как
хост (главный мост) по командам центрального процессора, так и рядовое
устройство PCI. Возможность распространения ряда команд зависит от
взаимного расположения инициатора и целевого устройства на ветвях
дерева шин PCI. Однако хост безусловно может подать любую команду
любому устройству PCI. Только хост всегда имеет доступ к
конфигурационным регистрам всех устройств (и мостов), поэтому он и
должен заниматься конфигурированием. После конфигурирования любое
устройство РСI может безусловно обратиться к системной памяти, то есть
реализовать прямой доступ к памяти (DМА).
Обмен информацией по шине PCI и PCI-X организован в виде
транзакций - логически завершенных операций обмена. В типовой
транзакции участвуют два устройства - инициатор обмена (initiator) - он
же ведущее устройство (master) и целевое устройство (target) - оно же
ведомое (slave). Правила взаимодействия этих устройств определяются
8
протоколом шины PCI Устройство может следить за транзакциями на
шине и не являясь их участником (не вводя никаких сигналов); режиму
слежения соответствует термин Snooping. Есть особый тип транзакции
(Special Cycle) - широковещательный, в котором инициатор протокольно
не взаимодействует ни с одним из устройств.
В каждой транзакции выполняется одна команда, как правило,
чтение или запись данных по указанному адресу. Транзакция начинается с
фазы адреса, в которой инициатор задает команду и целевой адрес. Далее
могут следовать фазы данных, в которых одно устройство (источник
данных) помещает данные на шину, а другое (приемник) их считывает.
Транзакции, у которых присутствует множество фаз данных, называются
пакетными. Есть и одиночные транзакции (с одной фазой данных).
Транзакция может завершиться и без фаз данных, если целевое устройство
(или инициатор) не готово к обмену. В шине PCI-X добавлена фаза
атрибутов, в которой передается дополнительная информация о
транзакции.
Команды PCI определяют направление и тип транзакций, а также
адресное пространство, к которому они относятся. Набор команд шины
PCI включает следующие:
• I/O Read, I/O Write - команды чтения и записи ввода/вывода,
служат для обращения к пространству портов;
• Memory Read, Memory Write - команды чтения и записи
памяти, служат для выполнения коротких (как правило, не пакетных)
транзакций. Их прямое назначение - обращение к отображенным на память
устройствам ввода/вывода. Для «настоящей» памяти, допускающей
предвыборки, предназначены команды чтения строк, множественного
чтения и записи с инвалидацией;
• Memory-Read Line - чтение строки памяти, применяется, когда в
транзакции планируется чтение до конца строки кэша. Выделение данного
типа чтения позволяет повысить производительность обмена с памятью;
• Multiple Memory Read - множественное чтение памяти,
используется для транзакций, затрагивающих более одной строки кэшпамяти. Использование данного типа транзакций позволяет контроллеру
памяти выполнять упреждающую выборку строк, что дает
дополнительный выигрыш производительности;
• Memory Write and Invalidate (MVT) - запись с инвалидацией,
применяется к целым строкам кэша, причем все байты во всех фазах
должны быть разрешены.Эта операция заставляет контроллер кэш-памяти
очищать «грязные» строки кэша, соответствующие записываемой области,
без их выгрузки в ОЗУ, что экономит время. Инициатор, вводящий эту
команду, должен знать размер строки кэша в данной системе (для этого у него
есть специальный регистр в конфигурационном пространстве);
• Dual Address Cycle (DAC) - двухадресный цикл, позволяет по 32битной шине обращаться к устройствам с 64-битной адресацией. В этом случае
младшие 32 бита адреса передаются одновременно с данной командой, а далее
9
следует обычный цикл, определяющий команду обмена и несущий старшие 32
бита адреса. Шина PCI допускает 64-битную адресацию как памяти, так и портов
ввода/вывода (последнее для систем на х86 бесполезно, но PCI существует и
на других платформах);
• Configuration
Read,
Configuration
Write
команды
конфигурационного чтения и записи, адресуются к конфигурационному
пространству устройств. Обращение производится только выровненными
двойными словами, биты AD[1:0] используются для идентификации типа цикла
(см. ниже). Для генерации данных команд требуется специальный аппаратнопрограммный механизм;
• Special Cycle - специальный цикл, отличается от всех других тем, что
является широковещательным. Однако ни один агент на него не отвечает, а
главный мост или иное устройство, вводящее этот цикл, всегда завершает его
способом Master Abort (на него требуется 6 тактов шины). Специальный цикл
предназначен для генерации широковещательных сообщений, которые могут
читать любые «за интересованные» агенты шины. Тип сообщения
декодируется содержимым линий AD[15:0]; на линиях AD[31;16] могут
помещаться данные, передаваемые в сообщении. Фаза адреса в этом цикле
обычными устройствами игнорируется, но мосты используют ее информацию
для управления распространением сообщения. Сообщения с кодами 0000h, 000 lh
и 0002h требуются для указания на отключение (сообщение Shutdown), остановку
(сообщение Halt) процессора или специфические функции процессора х86,
связанные с кэшем и трассировкой. Коды 0003h-FFFFh зарезервированы.
Специальный цикл может генерироваться тем же аппаратно-программным
механизмом, что и конфигурационные циклы, но со специфическим значением
адреса;
• Interrupt Acknowledge (INTA) - команда подтверждения
прерывания, предназначена для чтения вектора прерываний. По протоколу она
выглядит как команда чтения, неявно адресованная к системному контроллеру
прерываний. Здесь в фазе адреса по шине AD полезная информация не
передается (ВЕ[3:0]# задают размер вектора), но ее инициатор (главный мост)
должен обеспечить стабильность сигналов и корректность бита четности, В х86архитектуре 8-битный вектор передается в байте 0 по готовности контроллера
прерываний (по сигналу TRDY#). Подтверждение прерываний выполняется за
один цикл (первый холостой цикл, который процессоры х86 делают в дань
совместимости со стариной, мостом подавляется).
Таблица 2. Декодирование команд шин PCI и PCI-X
Код
С/ВЕ PCI Команда
[3:0]
0000
Interrupt
Acknowledge
PCI-X Команда
Длина
Interrupt Acknowledge,
подтверждение прерывания
DWORD
Возможн
ость
расщепле
ния
+
10
Special Cycle,
0001 Special Cycle' специальный
DWORD
широковещательный цикл
0010 I/O Read
I/O Read, чтение ввода/вывода DWORD
+
0011 I/O Write
I/O Write, запись ввода/вывода DWORD
+
0100 Резерв
Резерв
Device ID Message (DIM),
0101 Резерв
посылка сообщения устройству
Пакет
(PCI-X 2.0)
Memory Read DWORD,
0110 Memory Read
DWORD
+
одиночное чтение памяти
0111 Memory Write Memory Write, запись памяти
Пакет
Alias to Memory Read Block,
1000 Резерв
Пакет
+
псевдоним чтения блока памяти
Alias (о Memory Write Block,
1001 Резерв
псевдоним записи блока
Пакет
памяти
Configuration Configuration Read,
1010
DWORD
+
Read
конфигурационное чтение
Configuration Configuration Write,
1011
DWORD
+
Write
конфигурационная запись
Memory Read Split Completion, завершение
1100
Пакет
Multiple
расщепленной транзакции
Dual Address Cycle (DAC),
Dual Address
1101
цикл передачи расширенного
Cycle
адреса памяти
Memory Read Memory Read Block, чтение
1110
Пакет
+
Line
блока памяти
Memory Write Memory Write Block, запись
1111
Пакет
and Invalidate блока памяти
В шине PCI байты шины AD, несущие реальную информацию,
определяются сигналами С/ВЕ[3:0]# в фазах данных (см. приложение 7.1).
Разрешенные байты могут быть разрозненными; возможны фазы данных, в
которых не разрешено ни одного байта.
Для каждого из трех пространств - памяти, портов ввода/вывода и
конфигурационных регистров - адресация различна: в специальных циклах
адрес игнорируется.
2.4. Прерывания PCI: INTx#, PME#, MSI и SERR#
Устройства РСI могут вырабатывать запросы аnnаратных
nрерываний:
обычные маскируемые - для сигнализации событий в
устройстве; эти прерывания могут сигнализироваться как традиционным
способом - по специальным сигнальным линиям, так и передачей
сообщений (MSI);
11
немаскируемые - для сигнализации о серьезных ошибках;
прерывания системного управления (System Management
Interrupt, SMI) - для сигнализации о событиях в системе управления
энергопотреблением и некоторых системных целей (например, эмуляции
работы стандартного контроллера клавиатуры с помощью устройств USB).
Наиболее эффективно возможности шины РСI используются при
применении активных устройств - мастеров шины (РСI Виs Master).
Только эти устройства могут обеспечить скорость передачи данных,
приближающуюся к декларированной пиковой пропускной способности.
Максимальная производительность обменов по шине РСI достигается
только в пакетных транзакциях значительной длины. Транзакции по
инициативе программы, исполняемой на ЦП, проводимые главным
мостом, как правило, являются одиночными (или очень короткими
пакетными). По этой причине программно-управляемый обмен данными с
устройствами РСI по производительности значительно уступает обмену,
выполняемому устройством-мастером. Таким образом, применение
активных устройств дает двойной эффект: разгружает центральный
процессор и обеспечивает лучшее использование пропускной способности
шины.
Вызов процедуры обслуживания прерываний в реальном и
защищенном режимах процессора существенно различается:
в реальном режиме таблица прерываний содержит 4-байтные
дальние указатели (сегмент и смещение) на соответствующие процедуры,
которые вызываются дальним вызовом (Call Far с предварительным
сохранением флагов). Размер (256х4 байт) и положение таблицы
(начинается с адреса 0) фиксированы;
в защищенном режиме (и в его частном случае - режиме V86)
таблица содержит 8-байтные дескрипторы прерываний, которые могут
быть шлюзами прерываний (Interrupt Gate), ловушек (Тгар Gate) или
задач (Task Gate). Размер таблицы может быть уменьшен (максимальный 256х8 байт), положение таблицы может меняться (определяется
содержимым регистра IDTR процессора). Код обработчика прерываний
должен быть не менее привилегированным, чем код прерываемой задачи
(иначе сработает исключение защиты). По этой причине обработчики
прерываний должны работать на уровне ядра ОС (на нулевом уровне
привилегий). Смена уровня привилегии при вызове обработчика приводит
к дополнительным затратам времени на переопределение стека.
Прерывания, вызывающие переключение задач (через Task Gate),
расходуют значительное время на переключение контекста - выгрузку
регистров процессора в сегмент состояния старой задачи и их загрузку из
сегмента состояния новой.
Номера векторов, используемых для аппаратных прерываний в
операционных системах защищенного режима, отличаются от номеров,
используемых в ОС реального режима, чтобы исключить их конфликты с
векторами, используемыми для исключений процессора.
12
На немаскируемое прерывание (NMI - Non-Maskable Interrupt)
процессор реагирует всегда (если обслуживание предыдущего NMI
завершено); этому прерыванию соответствует фиксированный вектор 2.
Немаскируемые прерывания в РС используются для сигнализации о
фатальных аппаратных ошибках. Сигнал на линию NMI приходит от схем
контроля памяти (четности или ЕСС), от линий контроля шины ISA
(IOCHK) и шины РСI (SERR#). Сигнал NMI блокируется до входа
процессора установкой в 1 бита 7 порта 070h, отдельные источники
разрешаются и идентифицируются битами порта 061h:
бит 2 R/W - ERP - разрешение контроля ОЗУ и сигнала SERR#
шины PCI;
бит 3 R/W - ЕIС - разрешение контроля шины ISA;
бит 6 R - IOCHK - ошибка контроля на шине ISA (сигнал
IOCHK#);
бит 7 R - РСК - ошибка четности ОЗУ или сигнал SERR# на шине
PCI.
Реакция процессора на маскируемые прерывания может быть
задержана сбросом его внутреннего флага IF (инструкция CLI запрещает
прерывания, SТI - разрешает). Маскируемые прерывания используются
для сигнализации о событиях в устройствах. По возникновении события,
требующего реакции, адаптер (контроллер) устройства формирует запрос
прерывания, который поступает на вход контроллера прерываний. Задача
контроллера прерываний - довести до процессора запрос прерывания и
сообщить вектор, по которому выбирается программная процедура
обработки прерываний.
Процедура обработки прерывания от устройства должна выполнить
действия по обслуживанию данного устройства, включая сброс его запроса
для обеспечения возможности реакции на следующие события, и послать
команды завершения в контроллер прерываний. Вызывая процедуру
обработки, процессор автоматически сохраняет в стеке значение всех
флагов и сбрасывает флаг IF, что запрещает маскируемые прерывания.
При возврате из этой процедуры (по инструкции IRET) процессор
восстанавливает сохраненные флаги, в том числе и установленный (до
прерывания) IF, что снова разрешает прерывания. Если во время работы
обработчика прерываний требуется реакция на иные прерывания (более
приоритетные), то в обработчике должна присутствовать инструкция SТI.
Особенно это касается длинных обработчиков; здесь инструкция SТI
должна вводиться как можно раньше, сразу после критической (не
допускающей прерываний) секции. Следующие прерывания того же или
более низкого уровня приоритета контроллер прерываний будет
обслуживать только после получения команды завершения прерывания
EOI (End Of Interrupt).
В IBM PC совместимых компьютерах применяются два основных
типа контроллеров прерываний:
13
PIC (Peripheral Interrupt Controller) - периферийный контроллер
прерываний, программно совместимый с «историческим» контроллером
8259А, применявшимся еще в первых моделях IBM РС. Со времен IBM
РС/АТ применяется связка из пары каскадно-соединенных PIC,
позволяющая обслуживать до 15 линий запросов прерываний;
APIC
(Advanced
Peripheral
Interrupt
Controller)
–
усовершенствованный периферийный контроллер прерываний, введенный
для поддержки мультипроцессорных систем в компьютеры на базе
процессоров 4 -5 поколений (486 и Pentium) и используемый поныне для
более
поздних
моделей
процессоров.
Кроме
поддержки
мультипроцессорных конфигураций современный АРIС позволяет
увеличивать число доступных линий прерываний и обрабатывать запросы
прерываний от устройств PCI, посылаемые через механизм сообщений
(MSI). Компьютер, оснащённый контроллером APIC, обязательно имеет
возможность функционировать и в режиме, совместимом со
стандартной связкой пары PIC. Этот режим включается по
аппаратному сбросу (и включению питания), что позволяет использовать
старые ОС и приложения MS DOS, «незнающие» - APIC и
мультипроцессирования.
2.5. Коммутация запросов прерываний
Традиционная схема формирования запросов прерываний с
использованием пары PIC (Peripheral Interrupt Controller) изображена на
рис. 2.
Для устройств РСI выделяется четыре проводных линии запросов
(IRQX, IRQY, IRQZ, IRQW), соединяемых с контактами INTA#, INTB#,
INТC# и INTD# всех слотов РСI с циклическим смещением цепей (см. рис.
3). Соответствие линий INTx# и входов IRQ для устройства любой шины
РСI приведено в табл. 3. Мосты РСI просто электрически соединяют
одноименные линии INTx# своих первичных и вторичных шин.
14
Рис. 2. Коммутация запросов прерываний
В системах с APIC, в которых число входов запросов увеличено до
24, дополнительные 8 входов могут использоваться периферийными
устройствами, установленными на системной плате. На слотах РСI
остаются доступными лишь четыре обычные линии запросов.
Таблица 3. Коммутация запросов прерываний для устройств PCI
Контакт
Вход коммутатора запроса для устройства с номером:
слота
0,4,8,-------- 28 1,5,9, --------- 29 2,6,10--- 30 3,7,11----31
INTA#
IRQW
IRQX
IRQY
IRQZ
INTB#
IRQX
IRQY
IRQZ
IRQW
INTC#
IRQY
IRQZ
IRQW
IRQX
INTD#
IRQZ
IRQW
IRQX
IRQY
Устройство РСI вводит сигнал прерывания низким уровнем
(выходом с открытым коллектором или стоком) на выбранную линию
INTx#. Этот сигнал должен удерживаться до тех пор, пока программный
драйвер, вызванный по прерыванию, не сбросит запрос прерывания,
обратившись по шине к данному устройству. Если после этого контроллер
прерываний снова обнаруживает низкий уровень на линии запроса, это
означает, что запрос на ту же линию ввело другое устройство,
разделяющее данную линию с первым, и оно тоже требует обслуживания.
На входы контроллеров прерываний поступают запросы от
системных устройств (клавиатура, системный таймер, СМОS-таймер,
сопроцессор), периферийных контроллеров системной платы и карт
расширения. Традиционно все линии запросов, не занятые
перечисленными устройствами, присутствуют на всех слотах шины ISA/
15
ElSA. Эти линии обозначаются как IRQx и имеют общепринятое
назначение (табл. 4).
Часть этих линий отдается в распоряжение шины PCI. В табл. 4
отражены и приоритеты прерываний - (запросы расположены в порядке их
убывания). Номера векторов, соответствующих линиям запросов
контроллеров, система приоритетов и некоторые другие параметры
задаются программно при инициализации контроллеров. Эти основные
настройки остаются традиционными для обеспечения совместимости с
программным обеспечением, но различаются для ОС реального и
защищенного режимов. Так, например, в ОС Windows базовые векторы для
ведущего и ведомого контроллеров - 50h и 58h соответственно.
Таблица 4. Аппаратные прерывания в порядке убывания приоритета
Имя
КонтролВектор 2 Вектор 3
Описание
1
(номер )
лер/маска
Контроль канала, четность
NMI
02h
памяти
(в ХТ - сопроцессор)
IRQ0
08h
50h
#1/1 h
Таймер (канал 0 8253/8254)
IRQ1
09h
51h
#1/2h
Клавиатура
IRQ2
0Ah
52h
#1/4h
ХТ - резерв, АТ - недоступно
(подключается каскад IRQ8IRQ15)
IRQ8
70h
58h
#2/1 h
CMOS RТС - часы реального
времени
IRQ9
71h
59h
#2/2h
Резерв
IRQ10
72h
5Ah
#2/4h
Резерв
IRQ11
73h
5Bh
#2/8h
Резерв
IRQ12
74h
5Ch
#2/10h
PS/2-Mouse (резерв)
IRQ13
75h
5Dh
#2/20h
Математический сопроцессор
IRQ14
76h
5Eh
#2/40h
НDС - контроллер НЖМД
IRQ15
77h
5Fh
#2/80h
Резерв
IRQ3
0Bh
52h
#1/4h
СОМ2, СОМ4
IRQ4
0Ch
53h
#1/10h
СОМ1, СОМ3
IRQ5
0Dh
54h
#1/20h
ХТ - НDС, АТ - LPT2, Sound
(резерв)
IRQ6
0Eh
55h
#1/40h
FDC - контроллер НГМД
IRQ7
0Fh
56h
#1/80h
LPT1 - принтер
1
Запросы прерываний 0,1,8 и 13 на шины расширения не выводятся.
2
Указаны номера векторов при работе в реальном режиме процессора.
3
Указаны номера векторов при работе в ОС Windows.
Устройство, подключаемое к PCI и представляющее одну функцию,
должно использовать только линию INTA#.
16
Многофункциональные устройства могут использовать комбинации
из четырёх линий, начиная с INTA#. Единственное ограничение состоит в
том, что каждая из восьми функций (возможных в одном устройстве)
может использовать только одну линию прерывания. Соответственно,
устройство с внутренними восемью функциями может задействовать
имеющиеся линии INTA#, INTB#, INTC#, INTD# следующим образом:
1. Все восемь функций подключены к INTA#.
2. Семь подключены к INTA#, одна к INTB#.
3. Две подключены к INTA#, две к INTB#, две к INTC# и две к INTD#.
4. Четыре подключены к INTA#, четыре к INTB# и т.п.
Спецификация PCI относительно безразлична к приоритетам
прерываний. Приоритет в данном случае зависит от внешнего
контроллера, который переадресует запрос на прерывание PCI устройства
в соответствующую линию системных прерываний.
Например, на персональных компьютерах редиректор (коммутатор
запросов) может преобразовать запрос функциональной единицы PCI по
линиям INTA#-INTD# в запрос по одной из линий IRQ0-IRQ15.
Чтобы можно было это сделать, любая функция внутри PCI
устройства, которая генерирует прерывание, должна задействовать два
конфигурационных регистра (в своём конфигурационном пространстве):
1.
Регистр вывода прерывания (Interrupt pin register). Является
регистром «только для чтения», который идентифицирует линию
прерывания PCI (INTA#-INTD#), используемую данной функцией данного
PCI устройства.
2.
Регистр линии прерывания (Interrupt line register). Является
регистром «только для записи», который указывает приоритет и вектор
(номер системного прерывания), которые редиректор прерываний должен
присвоить данной функции. В персональных компьютерах Intel x86
значения 0x00-0x0F соответствует IRQ0-IRQ15.
Такая схема является достаточно гибкой, поскольку не навязывает
никаких ограничений, обусловленных спецификой механизма прерываний
в системе, конструктору устройств или системы, что делает возможным
использование этой архитектуры в процессорных средах, отличных от Intel
x86.
(Драйвер (или иное ПО), работающий с устройством PCI, определяет
номер входа конmроллера прерывания, доставшийся устройству (точнее,
функции), чтением конфигурационного регистра Interrupt Line. По этому
номеру определяется вектор (см. табл. 4), значение 255 означает, что номер
не назначен. Номер входа каждому устройству заносит тест POST. Для
этого он считывает регистр Interrupt Рin каждой обнаруженной функции
и по номеру устройства определяет, какая из линий INTA#...INTD# (на
входе коммутатора запросов) используется. Заметим, что правила, по
которым на системной плате определяется соответствие между Intеrruрt
Рin и входными линиями коммутатора запросов в зависимости от номера
устройства, строго не регламентированы (деление номера устройства на 4 -
17
это всего лишь рекомендация), но их твердо знает версия BIOS данной
системной платы. К этому моменту тест POST уже определил таблицу
соответствия этих линий номерам входов; пользуясь этой таблицей, он
записывает нужное значение в конфигурационный регистр Intеrruрt Linе.
Определить, есть ли еще претенденты на тот же номер прерывания, можно,
лишь просмотрев конфигурационные регистры функций всех устройств,
обнаруженных на шине (это не так уж сложно сделать, пользуясь
функциями РСI BIOS).)
3. Порядок подготовки к лабораторной работе
3.1. Ознакомиться с программой PCI Explorer.
3.2. Изучить поля заголовка конфигурационного пространства одной
функции устройства PCI.
3.3. Изучить
схему
формирования
запросов
прерываний
с
использованием пары PIC (Peripheral Interrupt Controller).
4. Порядок выполнения лабораторной работы
4.1. Ознакомиться с теоретическими сведениями, приведенными в
методическом указании
4.2. Установить и запустить программу PCI Explorer. Определить
типовую конфигурацию ПК с шиной PCI и составить
соответствующую схему подключенных к шине PCI устройств.
4.3. Запустить программу PCI_32. Записать значения полей Int_Pin и
Int_Line, а также Max_Lat и Min_Gnt из конфигурационного
пространства каждого устройства. Определить конфигурационное
пространство для IDE-контроллера , USB-контроллера устройств,
подключенных к шине. (Для того, чтобы запустить программу,
откройте Пуск->Выполнить->cmd и открыть pci32.exe).
4.4. Составить схему коммутации запросов прерываний устройств,
подключенных к шине PCI.
5. Содержание отчёта
5.1. Наименование, цель работы.
5.2. Составить схему конфигурации вашего ПК с шиной PCI.
5.3. Привести пример конфигурационного пространства для IDEконтроллера НЖД, USB-контроллера клавиатуры и мыши.
5.4. Составить схему коммутации запросов прерываний устройств,
подключенных к шине PCI).
5.5. Выводы по лабораторной работе.
6. Контрольные вопросы
6.1. Сколько устройств можно подключить к шине PCI?
6.2. Может ли любое устройство PCI стать инициатором транзакции?
6.3. Могут ли несколько устройств (функций) разделять одну и ту же
линию запроса прерывания?
6.4. Поясните назначения регистров Int_Pin и Int_Line в
конфигурационном пространстве.
18
6.5. Поясните физический смысл параметров Max_Lat и Min_Grant.
6.6. Сколько диапазонов адресов может затребовать каждая функция в
адресном пространстве памяти или в адресном пространстве вводавывода PCI?
6.7. Поясните назначение регистра конфигурационного пространства
Cache L i n e S i z e (CL Size).
7. Приложения
7.1. Сигналы шины PCI
Optional Pins
Required Pins
AD[31::00]
AD[63:32]
Address
& data
c/be[7::4]#
C BE[3::0]#
PAR
64 - bit
Extension
PAR64
REQ64#
ACK64#
FRAME#
TRDY#
Interfac
e
control
LOCK#
IRDY#
STOP#
DEVSEL#
IDSEL#
Error
Reporting
PCI
COMPLIAN
T
DEVICE
PERR#
INTA#
INTB#
INTC#
SBQ#
SERR#
REQ#
Cache
Support
TDI
GNT#
TDO
CLK
System
Interrupts
INTD#
SDONE
Arbitratio
n
(masters
only)
Interface
Control
TCK
RST#
TMS
TRST#
Рис. 3. Сигналы шины PCI.
JTAG
(IEEE
1149:
1)
19
7.2. Детальная информация об устройстве вывода графического
изображения.
Рис. 4. Детальная информация об устройстве вывода графического
изображения
20
7.3.
Просмотр адресов прерываний
Рис. 5. Просмотр адресов прерываний
7.4. Детальная информация об IDE контроллере, подключенном
к шине PCI
21
Рис. 6. Детальная информация об IDE контроллере, на шине PCI
22
7.5. Результат выполнения программы PCI32
Рис. 7. Результат выполнения программы PCI32
Контроллер кешпамяти
Процессор
Память
0:0:0
HOST-Bridge
Min_G:0.0 ; Max_L:0.0
Int_L:0.0 ; Int_P:0.0
Шина PCI BUS-0
0:1:0
PCI-PCI-Bridge
Min_G:0.6 ; Max_L:0.0
Int_L:0.0 ; Int_P:0.0
0:31:0
ISA-Bridge
;
Min_G:0.0 ; Max_L:0.0
Int_L:0.0 ; Int_P:0.0
Шина PCI-BUS-1
PCI-PCI-Bridge
Min_G:0.6 ; Max_L:0.0
Int_L:0.0 ; Int_P:0.0
1:0:0
VGA-Compatible
Min_G:0.5 ; Max_L:0.1
Int_L:0.B ; Int_P:0.1
0:31:2
UHCI-USB Controller
Min_G:0.0 ; Max_L:0.0
Int_L:0.9 ; Int_P:0.4
Шина PCI-BUS-2
2:6:0
Audio Controller
Min_G:0.2 ; Max_L:14
Int_L:0.9 ; Int_P:0.1
0:31:3
SMBus
Min_G:0.0 ; Max_L:0.0
Int_L:0.A ; Int_P:0.2
2:7:0
SCSI-Controller
Min_G:0.0 ; Max_L:0.0
Int_L:0.B ; Int_P:0.1
0:31:1
IDE
Min_G:0.0 ; Max_L:0.0
Int_L:0.0 ; Int_P:0.0
2:9:0
Ethernet-Controller
Min_G:0.0 ; Max_L:0.0
Int_L:0.A ; Int_P:0.1
Рис. 8. Пример конфигурации ПК с шиной PCI
23
0:2:0
0:31:4
UHCI-USB Controller
Min_G:0.0 ; Max_L:0.0
Int_L:0.9 ; Int_P:0.3
24
8. Литература
8.1. Скотт Мюллер. Модернизация и ремонт ПК. 19-е издание.
Издательство: Вильямс, 2011.
8.2. Э.Таненбаум, Т. Остин. Архитектура компьютера. 6-е издание.
Издательство Питер, 2013г.
8.3. Ru.wikipedia.org/wiki/PCI
8.4. Thg.ru/mainboard/pci_express_3.0
Download