8.3 Synchronous I/O vs. Asynchronous I/O

Synchronous I/O and asynchronous are two fundamental methods of servicing I/O requests. In synchronous systems, the calling process is blocked after issuing an I/O request, thus allowing I/O to overlap with the execution of other processes. In asynchronous systems, the process is allowed to continue execution after initiating an I/O operation. Most systems implement the synchronous I/O method since it is easier to use and generally preferred by high-level language programmers.

However, in the Nintendo 64 environment, asynchronous I/O is the preferred choice, mainly because of the asynchronous nature of the real-time game environment. For example, a game might want to start paging in the next scene data in the background while working on the graphics task list. Therefore, asynchronous I/O has the potential to enhance the throughput on a thread basis. Furthermore, synchronous I/O can be easily implemented on top of the asynchronous facility by having the calling process blocked on a message queue immediately after initiating the I/O operation.

Therefore, all interrupt-based DMA operations are asynchronous operations and all asynchronous notification is handled via the message queue facility.