龙源期刊网httpwwwqika
comc
Li
ux操作系统缓存机制之页缓存
作者:来源:《硅谷》2012年第05期
Li
ux运用一个功能广泛的缓冲和缓存框架来提高系统的速度。缓冲和缓存利用一部分系统物理内存,确保最重要、最常使用的块设备数据在操作时可直接从主内存获取,而无需从低速设备读取。物理内存还用于存储从快设备读取的数据,使得随后对该数据的访问可直接在物理内存进行,而无需从外部设备再次取用。考虑系统中多种因素然后延迟写回在总体上改进了系统的性能。前面分析的部分,例如内存管理的slab缓存是一个内存到内存的缓存,其目地不是加速对低速设备的操作,而是对现有资源进行更简单、更高效的使用。文件系统的De
try缓存也用于减少对低速块设备的访问,但他无法推广到通用场合,因为他是专门用于处理单一数据类型的。内核为块设备提供了两种通用的缓存方案:1)页缓存,针对以页为单位的所有操作,并考虑了特定体系结构上的页长度。一个主要的例子是内存映射技术。因为其他类型的文件访问也是基于内核中的这一技术实现的。所以页缓存实际上负责了块设备的大部分缓存工作。2)块缓存,以块为操作单位。在进行IO操作时,存取的单位是设备的各个块,而不是整个内存页。尽管页长度对所有文件系统都是相同的,但块长度取决于特定的文件系统或其设置。因而,块缓存必须能够处理不同长度的块。目前用于块传输的标准数据结构已经演变为structbio用这种方式进行块传输更为高效,因为他可以合并同一请求中后续的块,加速处理的进行。在许多场合下,页缓存和块缓存是联合使用的。例如,一个缓存的页在写操作期间可以划分为不同的缓冲区,这样可以在更细的力度下,识别出页被修改的部分。好处在于,在将数据写回时,只需要回写被修改的部分,无需将这个页面传输回底层的块设备。页面缓存结构cppviewplai
copypri
t?
高速缓存的核心数据结构,对块设备的读写操作都放在该结构体里structaddress_space与地址空间所管理的区域之间的关联数据结构之一i
ode结构指定了后备存储器structi
odehostow
er:i
ode,block_device与地址空间所管理的区域之间的关联之二,page_tree列出了地址空间中所有的物理内存页structradix_tree_rootpage_
treeradixtreeofallpagesspi
lock_ttree_locka
dlockprotecti
git所有用VM_SHARED属性创建的映射u
sig
edi
ti_mmap_writablecou
tVM_SHAREDmappi
gs基数根节点,该树包含了与该i
ode相关的所有普通内存映射。该树的任务在于,支持查找包含了给定区r