Tech moves fast! Stay ahead of the curve with Techopedia!
Join nearly 200,000 subscribers who receive actionable tech insights from Techopedia.
I/O request packets are kernel mode structures used for communication between the Windows Drive Model and Windows NT device drivers as well as with the Windows operating system. All the data details are passed on to the data structure via the single pointer, instead of following the old convention of transporting many small data arguments. These I/O requests are made to pass through many different processing stages. These stages are determined by the nature of the request, whether it is meant for the target device for a single-layered driver or a multilayered drive.
I/O request packets are basically used for communications between the device drivers and the operating system. It allows a particular process to get unblocked and be completely executed.
In the first step, a process is initiated that issues a blocking read on the file descriptor of a previously used file. The code of the operating system or the kernel has a system-call code that works towards checking the accuracy of the parameters. If the buffer cache already has the data, then the data is returned and the request is completed. In the situation that the data is not found in the buffer cache, a physical I/O is performed. This ensures that the process is removed from the run queue and placed in the wait queue. Thereafter, the device driver receives the request through the I/O subsystem. It is up to the device driver then to make space for the incoming data and schedule I/O. The device controller then works on the device hardware to carry out the process of data transfer. The DMA controller manages and operates the transfer of data to the kernel memory. When the transfer is finished, this creates an interrupt which is received by an interrupt handler through the interrupt-vector table. It scans the data for important information and then returns the interrupt. This signal is then received by the device driver, which completes the request and also determines the status of the request. Lastly, it is up to the kernel to remove the process from the wait queue into the ready queue and the data is transferred to the address space. This step unblocks the process. So now, when the process is assigned to the CPU, it resumes work and is completed.