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.
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.
- Receives I/O request from user-level software
- Identifies which device to use based on file/device name
- Manages buffering and caching for efficiency
- Handles device allocation/deallocation (e.g., exclusive printer access)
- Reports errors in a consistent way
- Passes request to the appropriate device driver
- 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)
- Built from: O Software Structure, O Software
- Builds into: O Request to Hardware Operation
- Related: O System, Device Driver, Buffering
- Contrasts with: Interrupt Handler (lower layer, device-specific events)
- 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)