1. Afbrydelsesdrevet input/output
Interrupt-drevet input/output (I/O) er en mekanisme, hvor I/O-enheden signalerer CPU'en, når den har data eller er klar til at modtage data, i stedet for at CPU'en konstant tjekker I/O-enhedens status.
På denne måde kan CPU'en fortsætte med at udføre instruktioner, mens I/O-overførslen finder sted, hvilket reducerer ventetider markant og øger systemets samlede effektivitet.
Sådan virker det:
- I/O-enheden fungerer uafhængigt af CPU'en og opretholder en buffer til lagring af data.
- Når bufferen bliver fuld (til input) eller tom (for output), genererer enheden et afbrydelsessignal til CPU'en.
- Efter modtagelse af afbrydelsen sætter CPU'en midlertidigt sin aktuelle udførelse på pause, og den tilsvarende interrupt service rutine (ISR) håndterer dataoverførslen til/fra I/O bufferen.
- Når dataoverførslen er afsluttet, returnerer ISR kontrol til hovedprogrammet, og CPU'en genoptager sin tidligere opgave.
2. Programmeret input/output
Programmeret input/output er en enklere I/O-mekanisme, hvor CPU'en tager en proaktiv rolle i styringen af dataoverførsler med I/O-enhederne. Den poller løbende I/O-enheden med foruddefinerede intervaller for at kontrollere, om den er klar til at udveksle data.
Sådan virker det:
- CPU'en kontrollerer periodisk et statusregister for I/O-enheden for at afgøre, om den er klar til at sende eller modtage data.
- Hvis enheden er klar, starter CPU'en overførslen ved at sende eller modtage data fra I/O-porten eller hukommelseskortlagt adresse.
- CPU'en gentager kontinuerligt denne proces, indtil alle de nødvendige data er blevet overført.
Med hensyn til effektivitet foretrækkes interrupt-drevet I/O generelt frem for programmeret I/O, fordi det giver mulighed for bedre udnyttelse af CPU'en ved at eliminere unødvendig og gentagne polling af I/O-enheden. Programmeret I/O er dog lettere at implementere og kan være velegnet til mindre tidskritiske applikationer.