【页高速缓存】address_space 操作函数分析

radix Tree 源码分析这篇文档中对radix tree 进行了基础性的分析。

  • 那么基于radix tree 的内核中的页高速缓存会有什么样的操作函数呢?

页高速缓存的处理函数

对页高速缓存操作的基本高级函数有查找,增加,和删除页。在以上函数的基础上还有另一个函数确保高速缓存包含指定页的最新版本。

1. 查找页
  • 函数find_get_page()接收的参数为指向address_space对象的指针和偏移量。他获取地址空间的自旋锁,并调用radix_tree_lookup()函数搜索拥有指定偏移量的基树的叶子节点。该函数根据偏移量值中的位依次从树根开始向下搜索,如果遇到空指针,函数返回NULL;否则,返回叶子结点的地址,也就是所需要的页描述符指针。如果找到了所需要的页,find_get_page()函数就增加该页的使用计数器,释放自旋锁,并返回该页的地址;否则,函数就释放自旋锁并返回NULL。
static inline struct page *find_get_page(struct address_space *mapping,
					pgoff_t offset)
{
	return pagecache_get_page(mapping, offset, 0, 0);
}
  • 函数find_get_pages()与find_get_pages()类似,顾名思义就是查找相连的几个页。
unsigned find_get_pages(struct address_space *mapping, pgoff_t start,
			    unsigned int nr_pages, struct page **pages)
{
	struct radix_tree_iter iter;
	void **slot;
	unsigned ret = 0;

	if (unlikely(!nr_pages))
		return 0;

	rcu_read_lock();
     ... ...
	rcu_read_unlock();
	return ret;
}
  • find_lock_page()函数与find_get_page()类似࿰

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值