What is the difference between cached I/O, user non-cached I/O, and paging I/O?
In a file system or file system filter driver, read and write operations fall into several different categories. For the purpose of discussing them, we normally consider the following types: – Cached I/O. This includes normal user I/O, both via the Fast I/O path as well as via the IRP_MJ_READ and IRP_MJ_WRITE path. It also includes the MDL operations (where the caller requests the FSD return an MDL pointing to the data in the cache). – Non-cached user I/O. This includes all non-cached I/O operations that originate outside the virtual memory system. – Paging I/O. These are I/O operations initiated by the virtual memory system in order to satisfy the needs of the demand paging system. Cached I/O is any I/O that can be satisfied by the file system data cache. In such a case, the operation is normally to copy the data from the virtual cache buffer into the user buffer. If the virtual cache buffer contents are resident in memory, the copy is fast and the results returned to the application