In Chapters 4 and 5, you learned how device driver software synchronizes its behavior with device controller hardware (using the busy and done flags in the controller’s status register). In the generic schema shown in Figure, the driver starts the device in operation, writes the I/O details to the device state table, then halts. The device handler software reads the details from the device status table, completes the I/O operation, then returns from the system call (to the calling program). Some operating systems (such as Linux) use a slightly different approach, relying on the presence of a synchronization mechanism in the kernel. Instead of writing the status to a device status table and halting, the driver simply blocks until the device handler tells it to unblock and return to the caller. Write a pseudocode description for the device driver and handler that illustrates how this works.