An I/O controller is a specialized processor that runs firmware to manage one specific type of I/O device. The controller connects the I/O device to the I/O bus, handling the translation between the device's native protocols and the bus communication protocols.
Each I/O controller is typically assigned a range of I/O-mapped memory addresses at boot time, allowing the CPU to communicate with it using standard load and store instructions.