mmap & page cache 中的mapping之间的区别 & 直接I/O & buffered I/O & mmap区别

ext4_file_mmap 中的mmap

百度词条是这样说的:mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。

这里的mmap,其实是将物理内存和物理磁盘进行映射,映射的表现形式通过,读inode_table,知道文件在物理磁盘的索引结构,通过读去索引结构访问磁盘找到物理磁盘中的逻辑块。

page cache 中的mapping

page cache 是buffered I/O才会经过page cache层。将缓存的page在内存中用radix tree 来组织,方便快速查询,此时的mapping 指的是将物理磁盘读进pagecache。

直接 I/O(direct I/O) 、buffered I/O 、 mmap区别

其中直接I/O 和 buffered I/O 都要经过两次拷贝,一次从用户态拷贝到内核态,另一次是从内核态拷贝到磁盘,区别是直接I/O不经过page cache的查找。通常直接I/O适合用于像数据库这种需要直接刷数据到磁盘的场景。

还有一种直接映射,将虚拟地址空间和物理内存直接映射,不需要经过page table即可查找。

网上的另一种直接映射方式是高速缓存和主存之间,如图所示:
mmap & page cache 中的mapping之间的区别 & 直接I/O & buffered I/O & mmap区别_第1张图片

PS:目前自己也处于初学阶段,表述的不清晰,有不对的地方请多多指教。

你可能感兴趣的:(OS)