Открыть сервис

Программный ввод-вывод

Программный ввод-вывод (англ. Programmed Input/Output, PIO) — это способ обмена данными между центральным процессором (ЦП) и периферийным устройством (например, жёстким диском, видеокартой, принтером), при котором каждая операция передачи данных инициируется и контролируется непосредственно процессором с помощью исполнения специальных инструкций в программе. В отличие от методов с прямым доступом к памяти (DMA) или управления прерываниями, в режиме PIO процессор активно участвует в каждом такте передачи, считывая или записывая данные через порты ввода-вывода или отображая их в адресное пространство памяти.

История

Ранние вычислительные системы

В первых компьютерах, таких как ENIAC и UNIVAC I, ввод-вывод был полностью программным. Процессор выполнял все операции по управлению периферией, так как специализированные контроллеры и механизмы DMA отсутствовали. Программисты писали низкоуровневый код, который напрямую обращался к регистрам устройств.

Эра персональных компьютеров

В архитектуре IBM PC/XT (1981 год) и ранних моделях IBM PC/AT (1984 год) программный ввод-вывод был основным способом взаимодействия с жёсткими дисками (IDE/ATA). Контроллеры дисков были простыми и не имели собственного процессора для DMA. Процессор (Intel 8088 или 80286) сам считывал данные из секторов диска в оперативную память, выполняя цикл команд IN/OUT.

Расцвет и упадок PIO в дисковых интерфейсах

В 1990-х годах, с ростом частоты процессоров и увеличением объёмов данных, программный ввод-вывод стал узким местом. Стандарт ATA (IDE) поддерживал несколько режимов PIO (0, 1, 2, 3, 4), которые различались временем цикла передачи (от 600 нс в PIO 0 до 120 нс в PIO 4). Максимальная пропускная способность PIO 4 составляла 16,7 Мбайт/с. Однако при работе в этом режиме процессор был полностью занят передачей данных, что резко снижало производительность системы в многозадачных средах.

Переход к DMA и Ultra DMA

Начиная с конца 1990-х годов, для жёстких дисков ATA стал стандартом режим DMA (Direct Memory Access), а затем Ultra DMA (UDMA), который позволял передавать данные без участия процессора. Операционные системы, такие как Windows 95 OSR2 и Windows 98, автоматически переключали диски на DMA, если это поддерживалось контроллером. PIO остался как резервный режим для совместимости или при ошибках передачи данных. В современных системах (SATA, NVMe) программный ввод-вывод для хранения данных не используется.

Принцип работы

Механизм выполнения

Процессор выполняет следующие шаги при операции PIO:

  1. Инициализация: программа (драйвер) настраивает регистры контроллера периферийного устройства (например, задаёт номер сектора на диске).
  2. Ожидание готовности: процессор циклически опрашивает статусный регистр устройства, пока оно не сообщит о готовности к обмену.
  3. Передача данных: процессор выполняет инструкцию IN (чтение из порта) или OUT (запись в порт). При этом каждый байт или слово (2 байта) передаётся за одну инструкцию.
  4. Проверка завершения: после передачи блока данных процессор проверяет, не возникла ли ошибка, и завершает операцию.

Режимы адресации

  • Изолированный ввод-вывод (Port-mapped I/O): используется отдельное адресное пространство портов, доступное через специальные инструкции (IN, OUT в x86). Применялся в IBM PC для управления COM-портами, LPT-портами, контроллерами дисков.
  • Memory-mapped I/O: периферийные устройства отображаются в общее адресное пространство памяти. Процессор обращается к ним обычными командами чтения/записи памяти (MOV, LOAD, STORE). Этот метод распространён в современных архитектурах (ARM, RISC-V) и используется для видеокарт, сетевых карт, контроллеров USB.

Классификация

По типу передачи

  • Синхронный PIO: процессор и устройство работают в одном тактовом домене. Передача происходит за фиксированное число тактов.
  • Асинхронный PIO: процессор и устройство могут работать на разных частотах. Процессор ждёт сигнала готовности от устройства.

По режиму работы (стандарт ATA/ATAPI)

  • PIO Mode 0: время цикла 600 нс, пропускная способность 3,3 Мбайт/с.
  • PIO Mode 1: время цикла 383 нс, пропускная способность 5,2 Мбайт/с.
  • PIO Mode 2: время цикла 240 нс, пропускная способность 8,3 Мбайт/с.
  • PIO Mode 3: время цикла 180 нс, пропускная способность 11,1 Мбайт/с.
  • PIO Mode 4: время цикла 120 нс, пропускная способность 16,7 Мбайт/с.

Применение

Историческое и специализированное

  • Жёсткие диски IDE/ATA: до середины 1990-х годов PIO был основным режимом. В современных системах используется только принудительно (например, для диагностики или при неисправности DMA).
  • Накопители на гибких магнитных дисках (FDD): контроллеры флоппи-дисководов (например, Intel 8272) работали исключительно в режиме PIO.
  • Параллельные порты (LPT): принтеры, подключённые через LPT, часто использовали программный ввод-вывод для передачи данных.
  • Последовательные порты (RS-232): UART-контроллеры в ранних системах управлялись программно, хотя позже появились режимы с FIFO-буферами.

Современное использование

  • Микроконтроллеры и встраиваемые системы: в устройствах с ограниченными ресурсами (например, Arduino, STM32) программный ввод-вывод является основным способом управления GPIO, датчиками и простыми дисплеями. Это позволяет избежать сложности настройки DMA и экономит память.
  • Низкоуровневая отладка: PIO используется в загрузчиках (bootloaders) и диагностических утилитах для работы с устройствами до инициализации DMA-контроллера.
  • Устройства с низкой пропускной способностью: клавиатуры, мыши, джойстики, простые АЦП/ЦАП часто управляются через PIO, так как скорость передачи данных невелика.

Критика и недостатки

Высокая нагрузка на процессор

При выполнении операции PIO процессор не может выполнять другие задачи. В многозадачных операционных системах это приводит к значительному снижению общей производительности. Например, при копировании файла с диска в режиме PIO 4 процессор Intel 80486 мог быть загружен на 90–100%, что делало систему практически неотзывчивой.

Ограниченная пропускная способность

Скорость передачи ограничена тактовой частотой процессора и временем выполнения инструкций IN/OUT. Для современных высокоскоростных устройств (NVMe SSD, гигабитные сетевые карты) PIO неприменим, так как его максимальная пропускная способность (единицы-десятки Мбайт/с) на несколько порядков ниже требуемой.

Сложность программирования

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

Сравнение с другими методами ввода-вывода

ПараметрПрограммный ввод-вывод (PIO)Ввод-вывод по прерываниямПрямой доступ к памяти (DMA)
Участие процессораПолное, на каждом шагеТолько для обработки прерыванияМинимальное (только настройка)
Скорость передачиНизкая (до 16,7 Мбайт/с)СредняяВысокая (гигабайты/с)
Сложность реализацииНизкая (для простых устройств)СредняяВысокая (требуется контроллер)
Загрузка ЦП100% во время передачиНизкая (только на короткое время)Практически 0%
ПрименениеПростые устройства, legacyКлавиатуры, мыши, сетевые картыЖёсткие диски, видео, аудио

Интересные факты

  • В операционной системе MS-DOS все операции с дисками (через прерывание INT 13h) выполнялись в режиме PIO, так как поддержка DMA в BIOS была нестандартной.
  • В процессорах архитектуры x86 инструкции IN и OUT являются привилегированными (уровень 0) в защищённом режиме. Пользовательские программы не могут их выполнять без специального разрешения от операционной системы.
  • Режим PIO 4 был настолько быстрым для своего времени, что многие материнские платы середины 1990-х годов не могли стабильно работать с ним, и производители рекомендовали использовать PIO 3.
  • В современных операционных системах (Windows, Linux) при обнаружении ошибок на диске (CRC-ошибки) драйвер может автоматически понизить режим работы с UDMA до PIO, чтобы повысить надёжность, хотя это резко снижает производительность.

Источники

  • Intel 8237A High Performance Programmable DMA Controller Datasheet, 1980.
  • ATA/ATAPI-6 (T13 1410D) Standard, 2002.
  • Таненбаум Э., Остин Т. «Архитектура компьютера», 6-е издание, 2013.
  • Королёв Л. Н. «Архитектура ЭВМ и систем», 2005.
  • Microsoft Windows Hardware Developer Center: PIO Mode Detection.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →