PIO
PIO — Программный ввод-вывод (англ. Programmed input/output, PIO), метод передачи данных между двумя устройствами, использующий процессор как часть маршрута данных (процессор выполняет команду чтения порта, считывает байт или слово данных в свой регистр, после чего переписывает его в память, затем повторяет эту процедуру до тех пор, пока вся необходимая информация не будет считана из устройства в память).
Как правило, этот термин применяется к классическому PC/AT контроллеру IDE/ATA/SATA. В этом режиме контроллер требовал исполнения драйвером или же BIOSом команды процессора REP INSW/OUTSW
для передачи всех данных, обычно команда исполняется в обработчике прерывания контроллера в статусе «готов к передаче данных».
Режим имеет существенные недостатки — загрузку процессора вводом-выводом и крайне невысокую скорость передачи из-за невозможности использования «взрывного» (burst) режима шины PCI, и устарел с появлением в середине 1990-х годов поддержки DMA в IDE контроллере. Но, во-первых, если режим PIO работает одинаково во всех PC-совместимых компьютерах, то реализация DMA зависит от производителя контроллера (обычно Intel, VIA или nVidia) и требует установки драйверов/сборки ядра с поддержкой данных драйверов. Более или менее современные версии Windows автоматически установят DMA-драйвера к любому распространенному IDE контроллеру.
Контроллеры IDE/SATA, не совместимые со стандартным PC/AT (HighPoint, Promise, Silicon Image, AHCI и другими), не имеют и устаревшего режима PIO как метода передачи данных между процессором и контроллером. Они всегда требуют установки драйвера (драйвер обычно реализован как драйвер SCSI-контроллера) и всегда используют проприетарную реализацию DMA для общения с процессором/памятью, как и контроллеры SCSI.
Во-вторых, включение режима DMA затрагивает не только интерфейс между контроллером и процессором, но и интерфейс между контроллером и диском. Таким образом, для включения этого режима необходима поддержка DMA ещё и в жёстком диске или CD/DVD приводе. Также режимы PIO и DMA для IDE подразделяются на несколько обозначенных цифрами подрежимов, задающих скорость передачи данных по кабелю. Высокие режимы DMA называются Ultra DMA и требуют иного параллельного ATA-кабеля — имеющего 80 проводников вместо 40. Поддерживаются с начала 2000-х годов.
По некоторым сведениям, SATA отменяет реализацию этих подрежимов, всегда используя только одну (высокую) скорость передачи по кабелю. На практике при использовании SATA жёстких дисков, подключенных к не PC/AT-совместимому контроллеру Silicon Image с проприетарным драйвером, выбранный PIO/DMA-режим не влияет ни на что и является не более, чем украшением пользовательского интерфейса утилиты управления контроллером и реликтом старых времен.
Бывают режимы PIO Mode 0, 1, 2, 3, 4. Чем больше номер режима, тем быстрее. IDE ZIP100 приводы от Iomega, например, могут обеспечить только PIO mode 0. Старые CD-ROM приводы, как правило, используют PIO mode 4, если не могут работать в режиме DMA.
- PIO Mode 0 = 3,3 MB/s
- PIO Mode 1 = 5,2 MB/s
- PIO Mode 2 = 8,3 MB/s
- PIO Mode 3 = 11,1 MB/s
- PIO Mode 4 = 16,7 MB/s
Специфические проблемы
[править | править код]На некоторых компьютерах при автоматическом определении подобающего PIO Mode система не может загрузиться с CD-ROM, хотя CD-ROM прекрасно определяется. При этом CD-ROM прекрасно работает в уже установленной операционной системе, т.к. в тот момент используется не вшитый в BIOS драйвер реального режима процессора, а драйвер операционной системы, загруженный с жёсткого диска и работающий в защищённом режиме.
Решением проблемы является принудительное выставление PIO Mode 0. (Вероятно, можно было бы попробовать подобрать более быстрый PIO Mode; однако, результат обычно не оправдывает трудозатрат.)
При обнаружении неполадок DVD/CD привода, ошибок интерфейса (как правило при плохом контакте кабелей) операционная система Windows переводит диск в режим PIO. При этом характерны значительные задержки в работе системы, зависания и пропадания доступа к диску.