• ↑↓ to navigate
  • ↵ to open
  • ⟶ to select
  • ⌘ ⌥ ↵ to open in a panel
  • ←→ to navigate
  • esc to dismiss
⌘ '
keyboard shortcuts

The Problem

Different devices have different characteristics (block vs character, seekable vs sequential), but applications want a uniform interface. The OS needs a layer that handles common I/O concerns regardless of device type.

Core Idea

The I/O software layer that provides a uniform interface to user-level software, handling device naming, protection, buffering, and error reporting independent of specific hardware.

How It Works

  1. Receives I/O request from user-level software
  2. Identifies which device to use based on file/device name
  3. Manages buffering and caching for efficiency
  4. Handles device allocation/deallocation (e.g., exclusive printer access)
  5. Reports errors in a consistent way
  6. Passes request to the appropriate device driver
dev_indep Upper User-Level I/O System Calls Indep Device-Independent Layer buffering, naming, error handling, protection Upper->Indep generic I/O request Indep->Upper error/success Drivers Device Drivers (per-device) Indep->Drivers routed to specific driver

Key Properties

  • Makes all devices look the same to upper layers
  • Handles naming (/dev/sda, COM1, etc.)
  • Manages buffer cache for block devices
  • Enforces access control (permissions)

Semantic Network

semantic_Device_Independent_I_O_Software THIS Device Independent I REL1 Related Concept THIS--REL1 related REL2 Builds Into THIS--REL2 builds into

Connections

Edge Cases & Gotchas

  • Buffer cache size affects performance — too small means frequent disk reads
  • Error reporting must be consistent across device types
  • Device naming conventions vary by OS (Linux vs Windows)