The road between operating systems and just about all hardware that is not on the computer’s motherboard travels through what is known as a driver. The basic function of the driver is to be the translator between the programming languages that are high level and the hardware subsystems electrical signals of the application programs and operating system. Drivers take the information that the OS has called a file and translate this data into bits that are placed at strategic locations on a printers’  laser pulses or storage devices. There are a variety of ways that the driver programs function because there is so much difference in the hardware. Most drivers function the same as other processes and run when a device is needed. There are typically high priority blocks assigned by the operating system to drivers so that the hardware resource can be readied and released for continued use as soon as possible.
One reason there is a separation with the operating system and the drivers is so new functions are able to be increased to the driver and then to subsystems of the hardware without requiring there to be a modification, redistribution and recompile of the operating system itself. When new hardware device drivers are developed, this development is often paid for or performed by the manufacturer of the subsystems instead of the operating systems publisher. The output/input capabilities of the entire system can be significantly increased.
Managing output and input is mostly a job of managing buffers and queues which are special storage resources that take a devices stream of bits and hold these bits and then release them to the central processing unit at a speed that the CPU is able to handle. This is a very important process because a variety of functions are being run and are also taking up the time of the processor.