Шины. Системные ресурсы. Последовательные порты. Параллельные порты
Фундаментальный конспект лекции по архитектуре подсистемы ввода-вывода вычислительных систем (дисциплина «ОП.02 Архитектура аппаратных средств», занятие 15). Классификация системных шин, топология «точка-точка» PCIe против общей разделяемой магистрали, эволюция системных ресурсов (прерывания PIC/APIC/MSI-X, каналы DMA, I/O Port space и MMIO), последовательные интерфейсы UART/RS-232 и параллельный порт IEEE 1284 LPT.
1. Архитектура и классификация шин вычислительной системы
Шина (bus) — это стандартизированная физическая и логическая среда передачи сигналов, объединяющая функциональные узлы вычислительной системы (процессор, оперативную память, контроллеры накопителей, периферийные интерфейсы) для взаимного обмена данными, адресной информацией и управляющими сигналами.
Функциональные группы линий системной магистрали:
- Шина адреса (Address Bus): определяет физический адрес ячейки оперативной памяти или регистра устройства ввода-вывода, к которому производится обращение. Разрядность адресной шины ($N$) определяет максимальный объем адресуемого пространства: $V = 2^N$ байт. В современных 64-битных системах x86-64 физическое адресное пространство обычно составляет от 48 до 52 бит (до 4 ПБ памяти).
- Шина данных (Data Bus): двунаправленная среда, по которой передаются байты машинных слов. Разрядность шины данных определяет объем информации, передаваемой за один цикл шины (например, 64 бита в архитектуре памяти DDR4/DDR5 или 128 бит в пакетных транзакциях PCIe).
- Шина управления (Control Bus): набор служебных линий, синхронизирующих операции и задающих направление транзакций: стробы чтения/записи (
MEMR#, MEMW#, IOR#, IOW#), сигналы готовности (READY#), подтверждения арбитража шины и сброса (RESET#).
Классификация шин по уровню и назначению в компьютере:
- Системная шина (Front Side Bus / QPI / UPI / Infinity Fabric): сверхскоростной интерфейс соединения процессорных ядер, системного агента и контроллеров памяти с минимальными задержками (наносекундный диапазон).
- Локальные шины ввода-вывода (PCI Express): универсальная высокоскоростная магистраль для подключения видеоадаптеров, сетевых карт 100 GbE, NVMe-накопителей и хост-контроллеров.
- Периферийные шины расширения (USB, SATA, SAS, Thunderbolt): внешние и специализированные интерфейсы для подключения съемных устройств и накопителей.
- Унаследованные шины (Legacy Bus: ISA, EISA, VLB, PCI): исторические параллельные разделяемые шины, вытесненные вследствие физических ограничений.
2. Топология «точка-точка» (PCIe) против общей разделяемой магистрали (ISA/PCI)
На протяжении первых трех десятилетий развития персональных компьютеров доминировала архитектура общей разделяемой шины (Shared Bus Topology), классическими представителями которой являлись шины ISA (8/16 бит, 8 МГц) и PCI (32/64 бит, 33/66 МГц). В такой архитектуре все слоты расширения подключались параллельно к единым физическим проводникам на печатной плате материнской платы.
| Характеристика |
Разделяемая параллельная шина (PCI 32-bit / 33 MHz) |
Коммутируемая шина «точка-точка» (PCI Express 3.0–5.0) |
| Топология |
Общая физическая среда (Multi-drop Bus) для всех карт расширения. |
Точка-точка (Point-to-Point) через коммутатор (PCIe Switch / Root Complex). |
| Арбитраж среды |
Централизованный арбитр: запрос REQ#, разрешение GNT#. Передает только одно устройство. |
Пакетная коммутация. Одновременный независимый обмен без взаимных блокировок. |
| Пропускная способность |
133 МБ/с (делится между всеми активными устройствами на шине). |
PCIe 3.0: 1 ГБ/с на линию; PCIe 4.0: 2 ГБ/с на линию; PCIe 5.0: 4 ГБ/с на линию (выделенная полоса). |
| Физический предел частоты |
Ограничен перекосом фаз (Clock Skew) и паразитной емкостью (до 33–66 МГц). |
Гигагерцовый диапазон (8–32 GT/s) благодаря низковольтным дифференциальным парам (LVDS). |
| Управление трафиком |
Отсутствует приоритезация; медленное устройство удерживает всю шину. |
Виртуальные каналы (Virtual Channels, VC) и классы трафика (Traffic Classes, TC) с гарантией QoS. |
Физические причины ухода от параллельных разделяемых шин:
1. Перекос фаз (Clock Skew): При 32-битной параллельной передаче все 32 бита данных и сигнал синхронизации должны прибыть на приемник строго одновременно в течение одного такта. Из-за микроскопической разницы длин печатных дорожек, вариаций диэлектрической проницаемости текстолита и температурных градиентов сигналы приходят с разбросом по времени. На частотах выше 66 МГц время разброса становится сравнимо с длительностью тактового импульса, приводя к повреждению данных.
2. Емкостная нагрузка и отражения сигналов (Signal Reflections): Каждый подключенный к разделяемой шине слот создает паразитную емкость и неоднородность волнового сопротивления линии. Это вызывает отражение электромагнитных волн от концов дорожек и контактов слотов. Чем больше устройств подключено к шине, тем сильнее деградирует форма импульса.
3. Преимущество дифференциальной передачи PCIe: PCI Express передает данные последовательно по парам проводников (Tx+, Tx- и Rx+, Rx-). Информация кодируется знаком разности потенциалов между двумя проводниками витой пары (LVDS). Любая внешняя электромагнитная помеха наводит одинаковое паразитное напряжение на оба проводника, которое взаимно вычитается на дифференциальном приемнике. Тактовый сигнал внедряется непосредственно в поток данных (Embedded Clock) с помощью канального кодирования (8b/10b в PCIe 1.0/2.0 или 128b/130b в PCIe 3.0–5.0), что полностью устраняет проблему перекоса фаз.
3. Распределение системных ресурсов в архитектуре x86/x86-64
Для корректного взаимодействия центрального процессора с устройствами ввода-вывода архитектура компьютера предоставляет четыре фундаментальных системных ресурса:
3.1. Линии и векторы прерываний (Interrupt Requests, IRQ)
Прерывание — это аппаратный или программный сигнал, приостанавливающий текущее выполнение инструкций процессором для немедленного обслуживания внешнего события контроллером или периферийным модулем.
- Классический программируемый контроллер прерываний Intel 8259A (PIC): В архитектуре IBM PC/AT использовался каскад из двух микросхем 8259A (Master и Slave), предоставлявший всего 15 физических линий прерываний (IRQ0–IRQ15, где IRQ2 зарезервирован под каскадирование). Линии прерываний были дефицитным ресурсом, разделение одной линии между несколькими платами расширения (IRQ Sharing) часто приводило к аппаратным зависаниям.
- Advanced Programmable Interrupt Controller (APIC): Введен для поддержки многопроцессорных и многоядерных систем. Состоит из Local APIC внутри каждого ядра процессора и I/O APIC в чипсете. Предоставляет 24 аппаратные линии прерываний и позволяет операционной системе адресовать прерывание конкретному ядру.
- Message Signaled Interrupts (MSI и MSI-X): Современный стандарт для шины PCI Express. Прерывание инициируется не физическим изменением логического уровня на отдельном проводнике, а пакетной транзакцией записи в память (PCIe Memory Write TLP) по специальному зарезервированному адресу контроллера Local APIC процессора (
0xFEE00000).
- MSI: поддерживает до 32 векторов прерываний на одно устройство (векторы должны быть непрерывным блоком).
- MSI-X: расширяет лимит до 2048 независимых векторов на устройство. Каждый вектор имеет индивидуальный адрес и значение данных, что позволяет драйверу сетевого адаптера 100 GbE привязать очереди пакетов к отдельным ядрам процессора (технология RSS — Receive Side Scaling) без коллизий.
3.2. Прямой доступ к памяти (Direct Memory Access, DMA)
DMA позволяет периферийному устройству передавать массивы данных напрямую в/из системной оперативной памяти, минуя регистры центрального процессора и не нагружая его циклами чтения-записи.
- Legacy DMA (контроллер Intel 8237A): Централизованный контроллер в чипсете с 7 каналами (каналы 0–3: 8-битные, каналы 5–7: 16-битные). Максимальный размер непрерывного блока передачи составлял 64 КБ (или 128 КБ), адресация ограничивалась 16 МБ (24 бита). В современных системах сохранен исключительно для эмуляции floppy-дисководов и старых LPT-портов.
- Bus Mastering DMA: Современная периферия на шине PCIe самостоятельно выступает инициатором транзакций (Bus Master). Сетевая карта или NVMe SSD генерирует транзакции чтения/записи TLP непосредственно в адресное пространство оперативной памяти.
- Аппаратный диспетчер памяти ввода-вывода (IOMMU / Intel VT-d / AMD-Vi): Обеспечивает трансляцию виртуальных адресов DMA устройств в физические адреса оперативной памяти и защиту памяти от несанкционированного доступа (DMA Attack protection), а также сквозное пробрасывание физических PCIe-устройств в виртуальные машины (PCIe Passthrough).
3.3. Адресное пространство портов ввода-вывода (I/O Port Space)
Архитектура x86 реализует концепцию изолированного ввода-вывода (Isolated I/O). Процессор имеет отдельное 16-битное адресное пространство портов ввода-вывода объемом 64 Килобайта (адреса от 0x0000 до 0xFFFF). Доступ к этим регистрам осуществляется специальными инструкциями ассемблера IN и OUT.
Классические фиксированные адреса IBM PC/AT:
0x03F8–0x03FF: Последовательный порт COM1 (линия IRQ4);
0x02F8–0x02FF: Последовательный порт COM2 (линия IRQ3);
0x0378–0x037F: Параллельный порт LPT1 (линия IRQ7);
0x01F0–0x01F7: Первичный контроллер жестких дисков IDE (линия IRQ14).
3.4. Память, отображаемая на ввод-вывод (Memory-Mapped I/O, MMIO)
При MMIO регистры управления и встроенные буферы устройства ввода-вывода отображаются непосредственно в общее физическое адресное пространство процессора. Процессор обращается к регистрам устройства стандартными инструкциями работы с памятью (MOV, CMP), используя весь набор способов адресации.
- Base Address Registers (BAR): В конфигурационном пространстве каждого PCIe-устройства содержатся регистры BAR. При старте системы UEFI BIOS опрашивает устройства, определяет требуемый размер адресного окна и выделяет каждому устройству диапазон физических адресов, исключая аппаратные конфликты.
- Above 4G Decoding и Resizable BAR: Позволяет процессору адресовать видеопамять дискретной видеокарты (VRAM) целиком (например, все 16–24 ГБ) через 64-битное адресное окно MMIO выше границы 4 ГБ, устраняя накладные расходы на дробление данных на 256-мегабайтные блоки.
4. Последовательные интерфейсы: UART и RS-232
UART (Universal Asynchronous Receiver-Transmitter) — универсальный асинхронный приемопередатчик, преобразующий параллельные машинные байты шины данных процессора в последовательный поток битов (при передаче) и восстанавливающий байты из потока битов (при приеме).
Кадрирование асинхронной передачи:
В отсутствие передачи линия находится в состоянии логической 1 (Mark / высокий потенциал). Передача байта оформляется в виде кадра (Frame):
- Старт-бит (Start Bit): переход линии в состояние логического 0 (Space). По этому фронту приемник синхронизирует свой внутренний генератор тактов.
- Биты данных (Data Bits): от 5 до 8 бит (наиболее распространен 8-битный формат), передаваемых последовательно, начиная с младшего значащего бита (LSB).
- Бит четности (Parity Bit, опционально): бит контроля ошибок (Even — дополнение до четного числа единиц, Odd — до нечетного, None — отсутствует).
- Стоп-биты (Stop Bits): возврат линии в состояние логической 1 длительностью 1, 1.5 или 2 тактовых интервала для гарантированного обнаружения следующего старт-бита.
Формат кадра 8-N-1: 1 старт-бит + 8 бит данных + 0 бит четности + 1 стоп-бит = 10 физических бит на передачу 1 байта.
Бодрейт и битрейт:
Бод (Baud) — единица измерения символьной скорости, отражающая количество изменений физического состояния сигнальной линии в секунду. Битрейт (bps) — количество бит полезной или служебной информации, переданной в секунду. При двухуровневом кодировании NRZ (где каждому уровню напряжения соответствует строго 1 бит) бодрейт численно равен битрейту: $115\,200 ext{ бод} = 115\,200 ext{ бит/с}$.
Физический интерфейс RS-232:
В отличие от внутренних логических уровней TTL (0 В и +3.3/+5 В), стандарт RS-232 использует биполярные уровни напряжения относительно общей земли:
- Логический 0 (Space): напряжение от +3 В до +15 В;
- Логическая 1 (Mark): напряжение от -3 В до -15 В.
Высокое дифференциальное напряжение обеспечивает помехоустойчивость при передаче по кабелю длиной до 15 метров, однако несимметричная передача (относительно общего провода GND) делает интерфейс уязвимым к разности потенциалов земель на больших расстояниях, что требует применения интерфейсов RS-422/RS-485 с дифференциальными парами.
5. Параллельные порты IEEE 1284 (LPT) и физический тупик параллелизма
Параллельный порт LPT (Line Print Terminal) изначально разрабатывался фирмой Centronics для подключения принтеров. В стандарте IEEE 1284 определены режимы двунаправленной высокоскоростной передачи (EPP — Enhanced Parallel Port и ECP — Extended Capabilities Port с поддержкой аппаратного сжатия RLE и каналов DMA).
В порте LPT для передачи данных выделено 8 параллельных проводников (линии D0–D7), сопровождаемых стробирующим сигналом STROBE# и сигналом подтверждения готовности принтера ACK#.
Проблема перекоса фаз (Clock Skew) на длинных кабелях:
При передаче параллельного байта по многожильному кабелю длиной 1.8–3 метра проявляются фундаментальные ограничения электродинамики:
- Разброс задержек распространения (Propagation Delay): Скорость распространения электромагнитной волны в проводнике зависит от диэлектрической проницаемости изоляции и геометрии жилы ($v pprox 1.5–2.0 imes 10^8$ м/с). Разница длин проводников всего в 5–10 см приводит к временному разбросу фронтов сигналов (Skew) в несколько наносекунд.
- Перекрестные помехи (Crosstalk): Параллельные близко расположенные проводники обладают взаимной емкостной и индуктивной связью. Быстрый перепад напряжения на одной линии наводит паразитную ЭДС на соседних линиях.
- Итог: Предельная надежная скорость параллельного интерфейса IEEE 1284 ограничена величиной 1.5–2.0 МБ/с. Попытка поднять тактовую частоту выше 5 МГц приводит к тому, что стробирующий импульс
STROBE# опрашивает шину данных в момент, когда часть бит еще не установилась, вызывая фатальные искажения информации.
6. Вопросы для самопроверки
- Какие три функциональные группы сигнальных линий входят в состав классической системной шины?
- В чем состоит ключевое отличие топологии «точка-точка» шины PCI Express от общей разделяемой шины PCI?
- Почему в современных высокопроизводительных серверах отказались от прерываний на базе контроллеров PIC 8259A в пользу MSI-X?
- Какую роль выполняют регистры базовых адресов (BAR) в механизме конфигурирования устройств Plug and Play?
- В чем заключается физическая сущность эффекта перекоса фаз (Clock Skew) и почему он ограничил развитие параллельных шин?
- Сколько физических бит передается по интерфейсу UART для трансляции одного 8-битного байта в режиме кадрирования 8-N-1?
- Каковы номинальные диапазоны напряжений для логического 0 и логической 1 в стандарте интерфейса RS-232?