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

  • 格式:doc
  • 大小:1.65 KB
  • 文档页数:1


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上对应位置之间的一个映射。
如果访问了虚拟内存中的某个位置,该位置没有关联到物理内存页,内核可根据地址空
间结构来找到读取数据的来源。
为支持数据传输,每个地址空间都提供了一组操作,以容许地址空间所涉及双方面的交
互。
地址空间是内核中最关键的数据结构之一,对该数据结构的管理,已经演变为内核面对
的最关键的问题之一。 页缓存的任务在于,获得一些物理内存页,以加速在块设备上按页为
单位执行的操作。
内核使用了基数树来管理与一个地址空间相关的所有页,以便尽可能降低开销。