http://www.cnblogs.com/huxiao-tee/p/4657851.html
https://www.ibm.com/developerworks/cn/linux/l-cn-directio/
Linux 中直接 I/O 机制的介绍
https://blog.csdn.net/xiaofei0859/article/details/75106857
Linux Page Cache的工作原理
文件 Cache 相关数据结构
在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个 Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用 memory map 方式访问时负责建立映射;VFS 负责 Page Cache 与用户空间的数据交换。而具体文件系统则一般只与 Buffer Cache 交互,它们负责在外围存储设备和 Buffer Cache 之间交换数据。Page Cache、Buffer Cache、文件以及磁盘之间的关系如图 2 所示,Page 结构和 buffer_head 数据结构的关系如图 3 所示。在上述两个图中,假定了 Page 的大小是 4K,磁盘块的大小是 1K。本文所讲述的,主要是指对 Page Cache 的管理。
查看Page Cache的核心数据结构struct address_space就可以看到上述结构(略去了无关结构):
struct address_space {
struct inode *host; /* owner: inode, block_device */
struct radix_tree_root page_tree; /* radix tree of all pages */
unsignedlong nrpages; /*number of total pages */
struct address_space *assoc_mapping; /* ditto */
......
} __attribute__((aligned(sizeof(long))));
MMAP和DIRECT IO区别 https://www.cnblogs.com/zhaoyl/p/5901680.html