LINUX操作系统缓存机制之页缓存

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

list; /* ditto */ /*指向相关的地址空间的指针*/ struct address_space *assoc_mappi

ng; /* ditto */ }__attribute__(( aligned(siz

struct backing_dev_info { struct list_head bdi_list;struct rcu_head rcu_head;/*最大预读数量,单位为page

_cache_size*/unsigned long ra_pages;

es;/* device capabilities */ congested_fn *congested_fn; /* function pointer if device is md/dm */ void *congested_data; /* pointer to aux data for congested func */ void (*unplug_io_fn)(struct backing_dev_info *,struct page *);void *unplug_io_data;

char *name;

struct percpu_counter bdi_stat[nr_bdi_stat_items];

unsigned int min_ratio;unsigned int max_ratio, max_prop_frac;

struct device *dev;

#ifdef config_debug_fs struct dentry *debug_dir;struct dentry *debug_stats;#endif };下图为地址空间与内核其他部分的关联。

内核采用一种通用的地址空间方案,来建立缓存数据与其来源之间的关联。

1)内存中的页分配到每个地址空间。这些页的内容可以由用户进程或内核本身使用各式各样的方法操作。这些数据表示了缓存中的内容;2)后备存储器struct backing_dev_info 指定了填充地址空间中页的数据的来源。地址空间关联到处理器的虚拟地址空间,是由处理器在虚拟内存中管理的一个区域到设备device上对应位置之间的一个映射。

如果访问了虚拟内存中的某个位置,该位置没有关联到物理内存页,内核可根据地址空间结构来找到读取数据的来源。

为支持数据传输,每个地址空间都提供了一组操作,以容许地址空间所涉及双方面的交互。

地址空间是内核中最关键的数据结构之一,对该数据结构的管理,已经演变为内核面对的最关键的问题之一。页缓存的任务在于,获得一些物理内存页,以加速在块设备上按页为单位执行的操作。

内核使用了基数树来管理与一个地址空间相关的所有页,以便尽可能降低开销。

相关文档
最新文档