Since handling I/O is a fundamental goal for an operating system, OS kernels are frequently developed with I/O subsystems within them. An I/O subsystem is, on the one hand, the collection of kernel services provided for I/O operations, and, on the other hand, the hardware used for I/O (busses, controllers, drives, and I/O devices.)
An I/O subsystem needs to take two apparently conflicting trends in technology into account:
To achieve a uniform interface between the OS and I/O devices, the OS uses device drivers, each of which is software that provides access to and manages I/O on these devices.