# Programmed input/output

Programmed Input/Output (PIO, Input/Output programmato) è un metodo di trasferimento dati tra la RAM di un computer ed una periferica, tramite l'intervento diretto della CPU.
Più precisamente l'Input/Output programmato si verifica quando il processore, utilizzando un opportuno software, accede allo spazio di indirizzi della periferica in esame per eseguire trasferimenti di dati in entrata o in uscita da essa. Ciò è in contrasto con i trasferimenti di tipo DMA.
Molti vecchi dispositivi dei PC utilizzano questa modalità, incluse porte seriali e parallele (quando non in modalità ECP), le connessioni MIDI e dei joystick, le porte PS/2 per mouse e tastiera, e alcune vecchie schede di rete.

## Modalità PIO su interfaccia ATA

Gli esempi più noti di periferiche che utilizzano la modalità PIO sono però le unità a disco ATA/ATAPI, che tra l'altro fino all'introduzione del DMA (1994), potevano funzionare soltanto in questa maniera. In riferimento a questo tipo di dispositivi, sono state definite 4 diverse modalità PIO, che corrispondono ad altrettante differenti velocità di trasferimento, come illustrato nella tabella sottostante; il tipo di segnale utilizzato è molto simile nelle varie modalità, mentre cambia il tempo caratteristico di ogni ciclo, che permette così di ottenere diverse velocità.
Modalità PIO :
| Modalità | Massima velocità di trasferimento (MB/s) | Durata minima di un ciclo (ns) | Standard dove le spec sono definite |
| Mode 0 | 3.3 | 600 | ATA-1 |
| Mode 1 | 5.2 | 383 | ATA-1 |
| Mode 2 | 8.3 | 240 | ATA-1 |
| Mode 3 | 11.1 | 180 | ATA-2 |
| Mode 4 | 16.7 | 120 | ATA-2 |
| Mode 5 | 20 | 100 | CompactFlash 2.0 |
| Mode 6 | 25 | 80 | CompactFlash 2.0 |
Tutti i dispositivi ATA/ATAPI supportano la modalità 0, ma in generale ciò non è vero per i protocolli più veloci; è stato quindi implementato un meccanismo di autorilevamento tramite il quale il BIOS, accedendo a dei registri presenti sul dispositivo, è in grado di stabilire la massima velocità che esso può sostenere, e conseguentemente configura il canale ATA per ottenere le migliori prestazioni. Come si vede dalla tabella, sono state definite 2 ulteriori modalità PIO avanzate, capaci rispettivamente di trasferimenti a 20 e 25 Mb/s., che riguardano però esclusivamente i dispositivi CompactFlash.
Durante tutta l'operazione di trasferimento dati in modalità PIO, la CPU è assoggettata ad un notevole carico di interrupt, che ne impegna gran parte della capacità di elaborazione, anche fino al 90%, specie nei vecchi elaboratori e con le modalità 3 e 4, in cui i cicli sono più veloci e quindi si susseguono più rapidamente nel tempo; ciò rallenta notevolmente l'esecuzione contemporanea di altre applicazioni, determinando un forte decadimento delle prestazioni del computer; proprio a causa di questa inefficienza, a partire dalla metà degli anni novanta sono state introdotte modalità
di trasferimento più raffinate, come la DMA (1994) e successivamente l'UDMA (1997), in cui la periferica comunica direttamente con la memoria di sistema, lasciando libera la CPU per l'esecuzione di altre attività.
La notevole affidabilità della modalità PIO, dovuta anche alla semplice logica digitale necessaria per implementarla, la rende tuttavia ancora oggi utilizzata quando non siano richieste elevate velocità di trasferimento, come nei sistemi embedded o nei chip FPGA;per lo stesso motivo, rimane come modalità di "emergenza" nei PC e notebook, dove in genere viene attivata dal sistema operativo in caso di problemi con il protocollo UDMA; il sistema operativo Microsoft Windows XP, ad esempio, inserisce automaticamente il PIO Mode 4, tra l'altro senza dare alcuna notifica all'utente, quando su un canale ATA/ATAPI si verificano più di 5 errori consecutivi di scrittura o lettura.
È importante osservare che non tutti i dispositivi supportano i timing ufficiali ATA per la modalità PIO; un esempio è il lettore di schede CompactFlash Sandisk SDDR-89 ImageMate 12-in-1, che utilizza il chip GL819 di Genesys Logic; esso presenta valori leggermente diversi per la maggior parte delle modalità, come illustra la seguente tabella
| Modalità PIO | 1 | 2 | 3 | 4 | 6 |
| timings GL819 | 399 ns | 249 ns | 183 ns | 133 ns | 83 ns |
| timings spec ATA & CF | 383 ns | 240 ns | 180 ns | 120 ns | 80 ns |

## PIO Mode 5

All'inizio del 1996 fu proposta anche per l'interfaccia ATA una modalità avanzata PIO 5, capace di operazioni a 22 Mb/s., ma essa non venne mai implementata negli hard disk poiché le CPU dell'epoca, data la loro già scarsa capacità di elaborazione, sarebbero state rese del tutto inservibili durante il trasferimento dati con questa modalità; inoltre a questa elevata frequenza di trasmissione insorgono problemi dovuti all'interferenza elettromagnetica dei segnali lungo il cavo a nastro ATA, che limiterebbero la lunghezza di quest'ultimo intorno ai 20 cm per una trasmissione affidabile, valore molto più basso rispetto agli standard ATA e del tutto insufficiente per effettuare i cablaggi all'interno del PC; d'altra parte era già in fase di sviluppo il protocollo UDMA, che avrebbe risolto in maniera diversa entrambi i tipi di problemi. Alcuni produttori tuttavia implementarono preventivamente il supporto per questa modalità nei BIOS di alcune schede madri dell'epoca.