1. Avbrottsdriven in-/utdata
Avbrottsdriven input/output (I/O) är en mekanism där I/O-enheten signalerar CPU:n när den har data eller är redo att ta emot data, snarare än att CPU:n ständigt kontrollerar I/O-enhetens status.
På så sätt kan CPU:n fortsätta att utföra instruktioner medan I/O-överföringen sker, vilket avsevärt minskar väntetiderna och ökar systemets totala effektivitet.
Så fungerar det:
- I/O-enheten fungerar oberoende av CPU:n och upprätthåller en buffert för lagring av data.
- När bufferten blir full (för ingång) eller tom (för utgång), genererar enheten en avbrottssignal till CPU:n.
- Vid mottagande av avbrottet pausar CPU:n tillfälligt sin nuvarande exekvering, och motsvarande avbrottstjänstrutin (ISR) hanterar dataöverföringen till/från I/O-bufferten.
- När dataöverföringen är klar återgår ISR kontrollen till huvudprogrammet och CPU:n återupptar sin tidigare uppgift.
2. Programmerad in/utgång
Programmerad input/output är en enklare I/O-mekanism där CPU:n tar en proaktiv roll i att hantera dataöverföringar med I/O-enheterna. Den pollar kontinuerligt I/O-enheten med fördefinierade intervall för att kontrollera om den är redo att utbyta data.
Så fungerar det:
- CPU:n kontrollerar med jämna mellanrum ett statusregister för I/O-enheten för att avgöra om den är redo att skicka eller ta emot data.
- Om enheten är klar initierar CPU:n överföringen genom att skicka eller ta emot data från I/O-porten eller minnesmappad adress.
- CPU:n upprepar denna process kontinuerligt tills all nödvändig data har överförts.
När det gäller effektivitet är avbrottsdriven I/O i allmänhet att föredra framför programmerad I/O eftersom det möjliggör bättre utnyttjande av CPU:n genom att eliminera onödig och upprepad polling av I/O-enheten. Men programmerad I/O är enklare att implementera och kan vara lämplig för mindre tidskritiska applikationer.