页高速缓存(page cache学习)

最近要接触相关领域,学习一下共勉!!本文档使用linux为linux-4.4.4版本

  • 磁盘高速缓存:是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保留在RAM中,以便对那些数据的进一步访问不用再访问磁盘而能尽快得到满足。
  • 一种对完整的数据页进行操作的磁盘高速缓存。
  • 几乎所有的文件读和写操作都依赖于页高速缓存。只有在O_DIRECT标志被置位而进程打开文件的情况下才会出现例外:此时,IO数据绕过了页高速缓存,而使用了进程用户态地址空间的缓冲区;少数数据库应用软件为了能采用自己的磁盘高速缓存算法而使用O_DIRECT标志。
  • 使用页高速缓存目的:
  1. 快速定位含有给定所有者相关数据的特定页。为了尽可能充分发挥页高速缓存的优势,对它采用高速的搜索操作。
  2. 记录在读或写页中的数据时应当如何处理高速缓存中的每个页。例如:从普通文件、块设备文件或交换区读一个数据页必须用不同的实现方式。因此内核必须根据页的所有者选择适当的操作。

address_space 对象

页高速缓存的核心数据结构是address_space对象-----是一个嵌入在页所有者的索引节点对象中的数据结构。

  • 每个页描述符都包括把页链接到页高速缓存的两个字段mapping和index。mapping字段指向拥有页的索引节点的address_space对象,index字段表示在所有者的地址空间中以页大小为单位的偏移量,也就是在所有者的磁盘映像中页中数据位置。在页高速缓存中查找页时使用这两个字段。
  • address_space 对象的字段
struct address_space {
	struct inode		*host;		/* owner: inode, block_device  指向拥有该对象的索引节点的指针*/
	struct radix_tree_root	page_tree;	/* radix tree of all pages  表示拥有者页的基数radix tree 的根*/
	spinlock_t		tree_lock;	/* and lock protecting it 保护基树的自旋锁 */
	atomic_t		i_mmap_writable;/* count VM_SHARED mappings 地址空间中共享内存映射的个数*/
	struct rb_root		i_mmap;		/* tree of private and shared mappings   radix优先搜索树的根 */
	struct rw_semaphore	i_mmap_rwsem;
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值