For the most part, the real work of a device driver is moving data between user and kernel address space and a hardware device, such as a disk drive or a terminal. Because devices are typically very slow compared to the CPU, the data transfer may take a relatively long time. To overcome this, the driver normally suspends execution until the transfer is complete, freeing the CPU to attend to other requests. Then, when the data transfer is complete, the device sends an interrupt.
The processing needed to handle hardware interrupts is another of the major differences between drivers and application programs.