Programmed I/O vs Interrupt-driven I/O: Mechanisms, Trade-offs, and Performance

Programmed I/O vs Interrupt-driven I/O: Mechanisms, Trade-offs, and Performance

Verified Sources
Nov 4, 2026

In computer systems, Programmed I/O and Interrupt-driven I/O are two common ways for the CPU and I/O devices to coordinate data transfer.

At a high level:

  • With Programmed I/O, the CPU is actively involved in checking device status (typically polling) and/or performing repeated reads/writes to transfer data.
  • With Interrupt-driven I/O, the device signals the CPU asynchronously using Interrupt; the CPU services the event in an ISR and continues other work in the meantime.

These differences affect Latency (how quickly data is handled), CPU utilization, and system throughput under different traffic patterns.

Key learning terms

  • Polling
  • Memory-mapped I/O (MMIO)
  • Device-ready signaling

Note on evidence: I’m currently unable to run the required web searches to attach citations to each technical claim. If you enable/restore web access for the search tool, I can immediately regenerate this section with complete, cited references.

Interrupts vs Polling (Conceptual Overview)

How Programmed I/O Works (Polling-centric view)

  1. 1
    Step 1

    The CPU writes control registers (e.g., start command) or begins reading the device’s status/data registers.

  2. 2
    Step 2

    Software checks a status bit (e.g., “ready” or “data available”). This is the core of Polling.

  3. 3
    Step 3

    When the status indicates readiness, the CPU reads/writes the device data register (often via MMIO).

  4. 4
    Step 4

    For block transfers, the loop may continue for each chunk/word.

  5. 5
    Step 5

    Once the driver detects completion, control returns to the calling code.

How Interrupt-driven I/O Works (Asynchronous event view)

  1. 1
    Step 1

    The driver configures the device and enables interrupts (or configures which events should trigger them).

  2. 2
    Step 2

    Instead of busy-waiting, the CPU executes other tasks or waits/sleeps depending on design.

  3. 3
    Step 3

    When the device needs attention (e.g., data ready), it asserts an Interrupt.

  4. 4
    Step 4

    The CPU saves context and jumps to the ISR associated with that interrupt.

  5. 5
    Step 5

    The ISR reads/writes the relevant I/O registers, acknowledges the interrupt, and may queue work.

  6. 6
    Step 6

    After servicing, the CPU returns to the prior execution point.

Direct comparison (mechanism + consequences)

DimensionProgrammed I/O (Polling)Interrupt-driven I/O
Who checks device status?CPU checks repeatedly via status readsDevice signals CPU when ready via Interrupt
CPU involvement while waitingHigh (busy-wait or frequent checks)Low (CPU can do other work between interrupts)
Response to “device ready”Only when CPU’s next poll occursNear-asynchronous; response depends on interrupt latency
Overhead sourcePolling read/write traffic; wasted CPU cyclesInterrupt handling overhead (context switch into ISR, interrupt rate)
Best fit conditionsWhen events are frequent/short and polling cost is small; very simple systemsWhen events are infrequent/variable; when saving CPU cycles matters
Main riskWastes CPU time; reduces overall throughput under loadInterrupt storms; more complex synchronization and ordering

Key learning terms

  • Interrupt latency
  • Context switching
  • Interrupt storm

Rule of thumb for choosing

If the device is “usually ready” or events occur constantly, polling may be acceptable. If readiness is rare or bursty, interrupt-driven I/O typically wastes fewer CPU cycles because the CPU isn’t continuously polling.

Where misconceptions happen

Interrupt-driven I/O does not remove overhead; it moves it. The system trades continuous polling cost for ISR execution cost and potential synchronization complexity.

Execution flow under each model

Programmed I/O

T0

CPU starts/reads status"

Polling loop

T1

CPU repeatedly checks status until ready"

Transfer

T2

CPU reads/writes data registers"

Interrupt-driven I/O

T0

CPU starts/arms interrupt"

CPU does other work

T1

No busy-wait on device readiness"

Interrupt + ISR

T2

CPU services device in ISR, then returns"

Performance intuition: what each model “pays for”

Programmed I/O “pays” with CPU time

In polling-based Programmed I/O, the CPU repeatedly executes status reads. Even if each poll is quick, the total wasted work can be substantial when the device becomes ready significantly later than the polling cadence.

Interrupt-driven I/O “pays” with interrupt/ISR overhead

In Interrupt-driven I/O, the system incurs:

  • time to handle entering the ISR,
  • time to execute ISR logic and acknowledge/clear interrupt sources,
  • possible additional scheduling/context management.

This overhead becomes problematic when the device produces interrupts at a very high rate (e.g., frequent small events) or if software handles them inefficiently.

Common edge cases and design nuances

Conceptual trade-off: CPU cost vs responsiveness

Illustrative comparison only (depends on workload/device). Higher bars mean more cost/attention.

Programmed I/O vs Interrupt-driven I/O

1 / 5
Question · Term

What is programmed I/O?

Click to reveal
Answer · Definition

I/O where the CPU actively checks the device (often via polling) and performs register reads/writes until completion.

Knowledge Check

Question 1 of 4
Q1Single choice

In programmed I/O, how does the CPU typically learn the device is ready?