Устройство управления, шины и ввод-вывод

Фундаментальный конспект лекционного материала по дисциплине «ОП.02 Архитектура аппаратных средств» (раздел 1.6 программы). Рассматриваются принципы построения устройства управления (Hardwired vs Microprogrammed), протоколы шин, синхронный и асинхронный обмен, аппаратные прерывания (IRQ, APIC, MSI-X), прямой доступ к памяти DMA и сопоставление адресных пространств PMIO и MMIO.

1. Принципы построения устройства управления (Control Unit)

Устройство управления (УУ, Control Unit) — центральный логический координатор процессора, преобразующий машинный код программы в согласованную во времени последовательность микроопераций и управляющих сигналов для арифметико-логического устройства (АЛУ), регистрового файла, подсистемы памяти и внешних интерфейсов.

1.1. УУ с жесткой (схемной) логикой (Hardwired Control Unit)

В классической RISC-архитектуре (ARM, MIPS, RISC-V) устройство управления строится как аппаратный конечный автомат (Finite State Machine, FSM). Управляющие сигналы формируются комбинационными логическими матрицами (дешифраторы кодов операций, матрицы AND-OR) и синхронными счетчиками тактов.

1.2. Микропрограммное устройство управления (Microprogrammed Control Unit)

Предложено Морисом Уилксом (Maurice Wilkes) в 1951 году и лежит в основе сложных CISC-процессоров (включая семейство x86/x86-64). Каждая машинная команда представляет собой вызов микропрограммы — последовательности микрокоманд (micro-operations, micro-ops), считываемых из специальной управляющей памяти (Control Read-Only Memory, CROM).

2. Шинные протоколы, арбитраж и фазы шинных циклов

Системная шина представляет собой комплекс электрических линий, функционально объединяющих функциональные блоки ЭВМ. Традиционная системная магистраль делится на три подшины:

  1. Шина адреса (Address Bus): однонаправленная магистраль от задатчика шины (Master) к исполнителям (Slaves) для указания физического адреса ячейки памяти или номера порта ввода-вывода.
  2. Шина данных (Data Bus): двунаправленная магистраль для передачи информационных слов между процессором, памятью и периферией.
  3. Шина управления (Control Bus): набор стробов стробирования, синхронизации и арбитража.

2.1. Фазы синхронного и асинхронного цикла шины

Тип обмена Механизм координации Преимущества и физические ограничения
Синхронный обмен Все фазы привязаны к фронтам единого тактового генератора шины (CLK). Передача происходит за фиксированное количество тактов ($T_1, T_2, \dots$). Простота управляющей логики. Ограничение: длительность такта рассчитывается по самому медленному узлу магистрали; на высоких частотах возникает перекос фаз (Clock Skew).
Асинхронный обмен Передача управляется протоколом квитирования («рукопожатия», Handshaking) по линиям запроса (REQ# / STROBE#) и подтверждения (ACK# / DTACK#). Независимость от быстродействия периферии: быстрые устройства завершают цикл мгновенно, медленные удерживают шину до готовности. Сложнее схемотехника.

2.2. Арбитраж шины и такты ожидания (Wait States)

Если быстродействие адресуемого устройства ниже частоты шины CPU, ведомый контроллер переводит линию READY в пассивное состояние. Устройство управления процессора продлевает шинный цикл, вставляя такты ожидания Tw (Wait States). Стробы чтения/записи удерживаются активными, пока READY не станет равным 1.

При наличии нескольких активных задатчиков шины (CPU, контроллер DMA, видеоадаптер) аппаратный арбитр шины разрешает коллизии с помощью сигналов запроса (HOLD / REQ#) и подтверждения передачи управления (HLDA / GNT#).

3. Подсистема прерываний: эволюция, векторы и конвейер ISR

Прерывание (Interrupt) — аппаратный сигнал от периферийного контроллера или внутренней логики, приостанавливающий нормальное последовательное выполнение инструкций процессором и переключающий управление на специализированную подпрограмму обработки прерывания (Interrupt Service Routine, ISR).

3.1. Эволюция архитектуры прерываний в x86/PC

3.2. Аппаратный конвейер обработки прерывания

[Периферийный контроллер] ---> Выставляет IRQ / посылает пакет MSI-X
         |
         v
[Контроллер APIC / УУ CPU] -> Проверка флага IF (Interrupt Flag) в конце текущей команды
         |
         v
[Аппаратное подтверждение] -> Выдача строба INTA# и получение номера вектора N (0..255)
         |
         v
[Сохранение контекста]   -> Автоматическая запись EFLAGS, CS, EIP в системный стек; IF = 0
         |
         v
[Выборка из таблицы IDT]  -> Чтение шлюза прерывания IDT[N] -> Загрузка нового CS:EIP
         |
         v
[Выполнение ISR]          -> Сохранение регистров, обслуживание устройства, посылка EOI
         |
         v
[Команда IRET]            -> Аппаратное восстановление EIP, CS, EFLAGS из стека -> Возврат в поток
    

4. Организация прямого доступа к памяти (DMA)

Прямой доступ к памяти (Direct Memory Access, DMA) — аппаратный способ пересылки блоков данных между периферийным устройством и оперативной памятью напрямую без участия центрального процессора в пересылке каждого отдельного машинного слова.

4.1. Режимы работы DMA

4.2. Эволюция контроллеров DMA: от 8237A к PCIe Bus Mastering

Параметр Системный контроллер Intel 8237A (Legacy) Bus Master DMA (Современный PCIe / NVMe)
Топология Централизованный чипсетный контроллер; периферия является ведомой (Slave). Периферийный адаптер сам является задатчиком шины (Master) со встроенным DMA-движком.
Адресация 16-битный счетчик адреса + 8-битный регистр страниц (лимит 16 МБ ОЗУ, блоки до 64 КБ). Полная 64-битная адресация без ограничений по размеру блока памяти.
Управление списками Только непрерывные физические страницы памяти. Списки разрозненных страниц (Scatter-Gather List, SGL) и кольцевые очереди (Descriptor Rings).
Аппаратная защита Отсутствует; сбойный контроллер может затереть ядро ОС. Аппаратная изоляция и виртуализация через IOMMU (Intel VT-d / AMD-Vi).

5. Изолированные порты (PMIO) против отображения на память (MMIO)

Для взаимодействия центрального процессора с внутренними регистрами периферийных контроллеров исторически сложились две базовые концепции:

5.1. Изолированный ввод-вывод (Port-Mapped I/O, PMIO)

Архитектура x86 реализует отдельное независимое адресное пространство портов ввода-вывода размером 64 КБ (адреса 0x0000–0xFFFF).

5.2. Ввод-вывод с отображением на память (Memory-Mapped I/O, MMIO)

Регистры управления, статуса и буферы данных контроллеров отображаются в общее физическое адресное пространство оперативной памяти.

6. Вопросы для самопроверки