Linux IO Stack 系列 03
2016-02-02
上篇中我们看了 IO 涉及到的主要的模块和大体的结构,这篇文章中我们来着重看看前半部分的过程,和主要的概念。 也就是后备存储器中的数据是怎么映射到内存中的?
为了回到这个问题,我们要知道 Linux 为了提升 IO 的性能,会尽可能的使用物理内存来做为后备存储的 cache,这就是我们常说的 page cache。 从后备存储中的数据映射到物理内存中,有一个和重要的概念,就是 address space:
通过 inode 可以找到地址空间,地址空间关联着后备存储和 page cache 的映射关系。page cache 的组织方式是通过 radix tree 来组织的。
知道了 page cache 的作用,我们就能回答第一篇中的两个问题了,我们知道有 cache 就涉及到 cache 数据的一致性问题,
- 那么什么时候将数据 flush 到磁盘?
Liunx 有两种方式,第一使用的后台守护进程在一定条件下,将数据 flush 到磁盘,第二,就是 application 写数据数的时候同步写磁盘。 其中第二中方式就是同步写,也就是同步 IO。若是我们不使用 page cache 的方式来操作 IO,那么就是 direct io。