La gestione delle periferiche è complessa perché i dispositivi sono molto più lenti del processore e sono asincroni; inoltre sono meno affidabili e serve una gestione dei malfunzionamenti e degli errori dei dispositivi.
Le operazioni di I/O richieste da un processo di solito vengono eseguite da processori dedicati mentre il processo è in attesa e il processore sta eseguendo un altro programma. Per fare in modo che un dispositivo possa ricevere o inviare dati mentre il processo è in attesa si usano dei buffer e per la sincronizzazione si usano i segnali di interruzione. Quando il programma deve eseguire una operazione di I/O genera una interruzione di tipo software per richiedere un servizio al sistema operativo; il processore avvia l’operazione e, in attesa che la periferica la completi, può dedicarsi ad altre operazioni; quando la periferica ha completato l’operazione genera una interruzione per avvertire il processore.
L’uso dei segnali di interruzione per la gestione dell’input/output permette anche di realizzare dei meccanismi di protezione per prevenire situazioni di errore e per impedire l’accesso alle risorse a processi non autorizzati. Per garantire la protezione, i programmi non possono eseguire direttamente le operazioni di I/O sulle periferiche ma devono richiedere un servizio al sistema operativo; quando il programma richiede una operazione di I/O (generando un’interruzione) il sistema passa da stato utente, in cui sta eseguendo il programma, a stato supervisore; la gestione dei dispositivi può avvenire solo in stato supervisore, solo da parte del sistema operativo, e quindi il sistema operativo controlla l’esecuzione di tutte le operazioni.