mmap & page cache 中的mapping之间的区别 & 直接I/O & buffered I/O & mmap区别
日期: 2018-11-07 分类: 个人收藏 369次阅读
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即可查找。
网上的另一种直接映射方式是高速缓存和主存之间,如图所示:
PS:目前自己也处于初学阶段,表述的不清晰,有不对的地方请多多指教。
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: Shell 编程快速入门
下一篇: 海量视频资源【网盘直接取】
精华推荐