개요

프로그램 입출력(Programmed Input/Output, 줄여서 PIO)은 네트워크 어댑터나 ATA 기억 장치와 같은 주변 기기와 중앙 처리 장치 사이에서 데이터를 주고받는 방식이다. PIO는 데이터를 CPU의 instruction을 통해서 주고 받는다. 매 데이터 접근 마다 CPU가 관여하기 때문에 CPU의 처리를 불필요한 Polling과 같은 방식으로 낭비하게 된다. 이 PIO의 단점을 극복하기 위해 인터럽트, DMA등이 고안되었다. 이러한 방식에서는 CPU가 Input이 들어오는 동한 Polling할 필요가 없거나, 아니면 관여할 필요가 없어진다.

이 용어는 Memory mapped I/O를 가르킬때나, 아니면 Port-mapped I/O를 가르킬 때도 쓰인다. PMIO는 x86의 IN, OUT명령어를 통해서 디바이스와 통신하면서 통신하게 된다. PMIO는 초창기 Microprocessors에서 널리 쓰였다.

PIO는 초창기에 Parallel AT Attachment (PATA)장치에 널리 쓰였다. PIO는 현재도 Legacy supports를 위해서 최신 CPU와 바이오스에 포함되어 있다.

ATA 표준에서의 PIO 모드

두 개의 추가적인 고급 타이밍 모드는 콤팩트플래시 규격 2.0에 정의되어 있으며 PIO 모드 5, 6을 제공한다. (현재 모드 5를 사용하는 하드웨어는 없다. 이는 모드 5PIO 모드가 제공하는 전송속도를 위해서 CPU가 너무 많이 소모되는 단점이 있기 때문이다. 특히 DMA가 나오고 나서부터는 거의 사용되는 일이 없다.

PIO 모드
모드 최대 전송 속도 (MB/초) 최소 순환 시간 규격 정의 표준
모드 0 3.3 600 ns ATA-1
모드 1 5.2 383 ns ATA-1
모드 2 8.3 240 ns ATA-1
모드 3 11.1 180 ns ATA-2
모드 4 16.7 120 ns ATA-2
모드 5 20 100 ns 콤팩트플래시 2.0
모드 6 25 80 ns 콤팩트플래시 2.0