Программный ввод-вывод¶
Программный ввод-вывод (англ. 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:
- Инициализация: программа (драйвер) настраивает регистры контроллера периферийного устройства (например, задаёт номер сектора на диске).
- Ожидание готовности: процессор циклически опрашивает статусный регистр устройства, пока оно не сообщит о готовности к обмену.
- Передача данных: процессор выполняет инструкцию IN (чтение из порта) или OUT (запись в порт). При этом каждый байт или слово (2 байта) передаётся за одну инструкцию.
- Проверка завершения: после передачи блока данных процессор проверяет, не возникла ли ошибка, и завершает операцию.
¶Режимы адресации
- Изолированный ввод-вывод (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 →

