复杂度3/5
机密度3/5
最后更新2021/04/27
AIX并未采用传统Unix的cache模式。传统Unix(包括Linux)的cache模式是把cache作为一个单独的旁路应用,嵌入在文件读写的路径中。当应用请求读文件时,kernel从磁盘将数据读到kernel的cache空间,然后把数据转给应用;应用请求文件写的时候,应用把数据发给kernel,kernel根据配置参数,或者只把数据保存在cache空间就返回(回写write back模式),或者保存到cache空间之后再继续写磁盘,完成后才返回(透写write through模式),或者并不写cache,完全直接写盘(旁写write bypass模式)。无论哪一种模式,都无法高效利用内存,或者额外一次数据在内存中的移动。这是因为内核cache不能直接被应用访问,必须完成cache到应用buffer之间的数据转移之后才能修改数据,这种数据转移必然需要一次用户地址空间到内核地址空间的数据move。
AIX采用的策略是在虚拟内存空间中设置了额外一种内存段给应用直接使用,用于与磁盘文件之间进行直接映射。此内存不属于内核数据,因此可以被应用直接操作,应用修改此内存数据,既等于修改了磁盘数据。此虚拟内存由AIX的VMM统一管理,如果内存被更新,定期执行的syncd进程将会以一定周期(一般是60秒,可修改)将数据刷新到磁盘(相当于回写模式)。由于AIX 虚拟内存极其巨大,因此几乎可以映射实际存在的任意大小文件(32位AIX下最大可编辑文件只有2GB,是个例外,但有其它机制实现类似功能,由于已经过时,我们此