# Entrada-sortida programada

L'entrada/sortida programada (també entrada/sortida programable, entrada/sortida programada, E/S programada, PIO) és un mètode de transmissió de dades, mitjançant entrada/sortida (I/O), entre una unitat central de processament (CPU) i una dispositiu perifèric, com ara un dispositiu d'emmagatzematge ATA paral·lel. Cada transferència d'elements de dades s'inicia mitjançant una instrucció del programa, que implica la CPU per a cada transacció. En canvi, en les operacions d'accés directe a la memòria (DMA), la CPU no està implicada en la transferència de dades.
El terme pot referir-se a E/S assignades a memòria (MMIO) o E/S assignades a ports (PMIO). PMIO es refereix a les transferències que utilitzen un espai d'adreces especial fora de la memòria normal, normalment s'accedeix amb instruccions dedicades, com ara IN i OUT en arquitectures x86. MMIO es refereix a les transferències a dispositius d'E/S que s'assignen a l'espai d'adreces normal disponible per al programa. PMIO va ser molt útil per als primers microprocessadors amb espais d'adreces reduïts, ja que els dispositius d'E/S no consumien el valuós recurs.
L'exemple més conegut de dispositiu de PC que utilitza E/S programada és la interfície Parallel AT Attachment (PATA); tanmateix, la interfície AT Attachment també es pot operar en qualsevol dels diversos modes DMA. Molts dispositius antics d'un ordinador també utilitzen PIO, inclosos els ports sèrie antics, els ports paral·lels antics quan no estan en mode ECP, els ports PS/2 del teclat i el ratolí, els ports MIDI i del joystick heretats, el temporitzador d'interval i les interfícies de xarxa més antigues.

## Mode PIO a la interfície ATA

La interfície PIO s'agrupa en diferents modes que corresponen a diferents velocitats de transferència. La senyalització elèctrica entre els diferents modes és similar: només es redueix el temps de cicle entre transaccions per aconseguir una taxa de transferència més alta. Tots els dispositius ATA admeten el mode més lent — Mode 0. En accedir als registres d'informació (utilitzant el mode 0) en una unitat ATA, la CPU pot determinar la velocitat de transferència màxima del dispositiu i configurar el controlador ATA per obtenir un rendiment òptim.
Els modes PIO requereixen una gran quantitat de sobrecàrrega de la CPU per configurar una transacció de dades i transferir-les. A causa d'aquesta ineficiència, es va crear la interfície DMA (i, finalment, Ultra Direct Memory Access (UDMA)) per augmentar el rendiment. La senzilla lògica digital necessària per implementar una transferència PIO encara fa que aquest mètode de transferència sigui útil avui dia, especialment si no es necessiten altes taxes de transferència com en els sistemes integrats, o amb xips de matriu de porta programable en camp (FPGA), on el mode PIO es pot utilitzar sense pèrdua important de rendiment.
S'han definit dos modes de temporització avançats addicionals a l'especificació CompactFlash 2.0. Aquests són els modes PIO 5 i 6. Són específics de CompactFlash.
| Mode | Velocitat de transferència màxima (MB/s) | Temps de cicle mínim | Estàndard on es defineix l'especificació |
| Mode 0 | 3.3 | 600 ns | ATA-1 |
| Mode 1 | 5.2 | 383 ns | ATA-1 |
| Mode 2 | 8.3 | 240 ns | ATA-1 |
| Mode 3 | 11.1 | 180 ns | ATA-2 |
| Mode 4 | 16.7 | 120 ns | ATA-2 |
| Mode 5 | 20 | 100 ns | CompactFlash 2.0 |
| Mode 6 | 25 | 80 ns | CompactFlash 2.0 |

## Mode PIO 5

Es va proposar un mode PIO 5 amb funcionament a 22 MB/s, però mai es va implementar en discs durs perquè les CPU de l'època haurien estat paralitzades esperant el disc dur als temps proposats PIO 5, i l'estàndard DMA finalment ho va obviar. Tot i que mai no es va fabricar cap disc dur per donar suport a aquest mode, alguns fabricants de plaques base van proporcionar-hi de manera preventiva suport de BIOS. El mode PIO 5 es pot utilitzar amb targetes CompactFlash connectades a ATA mitjançant adaptadors CF-a-ATA.

## Referències

* ↑ «What is PIO (Programmed Input/Output)? | Definition from TechTarget» (en anglès). [Consulta: 18 setembre 2023].
* ↑ Stallings, William. Computer Organization and Architecture (en anglès). 9th. Pearson, 2012.
* ↑ «Difference between Programmed and Interrupt Initiated I/O» (en anglès americà), 08-06-2020. [Consulta: 18 setembre 2023].
* ↑ Chen, Joseph. «Proposed 22 MByte/Sec ATA Timing Extension for ATA-3» (en anglès). T10.org. Technical Committee T10 (X3T10), 10-01-1995. Arxivat de l'original el 20 juny 2010. [Consulta: 19 febrer 2020].