What is I/O subsystem and device drivers?

Why Interviewers Ask This

Senior Operating Systems engineers are expected to reason about architecture, performance, and edge cases. This question separates mid-level from senior candidates by testing deep system-level understanding.

Answer

The I/O subsystem manages communication between the OS and all peripheral devices. It provides a uniform interface to diverse hardware through device drivers. I/O Hardware components: I/O port (device registers accessible by CPU), I/O bus (data pathway: PCIe, USB, SATA), controller (interprets high-level commands, drives physical device), DMA controller (transfers data without CPU). I/O techniques: (1) Programmed I/O (polling): CPU continuously checks device status register. Simple but wastes CPU cycles; (2) Interrupt-driven I/O: CPU initiates I/O, continues other work, device interrupts CPU on completion. CPU-efficient for slow devices; (3) DMA (Direct Memory Access): DMA controller transfers data directly between device and memory. CPU only involved to set up transfer and handle completion interrupt. Most efficient for large transfers (disk, network). Device driver role: abstracts specific hardware details; presents a uniform interface to the OS kernel (block device, character device, network interface); translates generic OS requests to device-specific commands; handles interrupts from device; manages device state and buffering. I/O layers (Linux): User Process → POSIX API (read/write) → Virtual File System (VFS) → File System (ext4, NTFS) → Block I/O Layer (I/O scheduler, request queue) → Device Driver → Hardware Controller → Physical Device. Block vs character devices: block devices (disk, SSD) — transfer data in fixed-size blocks, random access, buffered. Character devices (keyboard, serial port, mouse) — transfer one byte at a time, sequential, unbuffered. Network devices: separate category. Buffering: kernel maintains page cache — all file I/O goes through it. Reading: kernel reads block from disk into page cache → copies to user buffer. Writing: user writes to page cache → kernel flushes to disk (sync or async).

Pro Tip

This topic has Operating Systems-specific nuances that differ from general programming. Highlighting those nuances in your answer shows expertise rather than generic knowledge.