In Section 11.5 we showed how this might work. The remaining issue is how to communicate these hardware events with interrupt handlers. As we showed previously, we would like to associate a pair of queues with the transmit and receive interfaces of the UART. Where previously our putchar code failed when the trasmit queue was empty and our getchar code failed when the receive queue was empty, in a multi-threaded environment we would like to block a thread in either of these cases and have the interrupt handler wake the thread.