Linux页高速缓存与文件读写

了解到了页高速缓存之后,页高速缓存在内核中是怎样具体与文件读写挂钩的呢,在本文中就对这个进行探究,基于:Linux-4.4.4内核源码。

一、read分析

可参考博文:linux内核分析:read过程分析

https://blog.csdn.net/u013837209/article/details/54923508

当我们读取一个文件时,首先会检查数据是否已经缓存,如果没有就会预读取,将数据加载入缓存页。

do_generic_file_read

    --> page = find_get_page(mapping, index);

在函数do_generic_file_read()函数中,该函数定义在mm/filemap.c文件中,在这里面进行了读缓存的操作。do_generic_file_read函数中有如下内容进行了缓存页的查找,这与页高速缓存查找页的接口一致。

find_page:
		page = find_get_page(mapping, index); //在radix 树中查找相应的page
		if (!page) { 
			//如果没有找到page,内存中没有该数据,先进行预读
			page_cache_sync_readahead(mapping,
					ra, filp,
					index, last_index - index);
			page = find_get_page(mapping, index);//在radix 树种再次查找相应的page
			if (unlikely(page == NULL))
				goto no_cached_page;
		}
		if (PageReadahead(page)) {
	//发现找到的page已经是预读的情况了,再继续异步预读,此处是基于经验的优化
			page_cache_async_readahead(mapping,
					ra, filp, page,
					index, last_index - index);
		}
		if (!PageUptodate(page)) { //数据内容不是最新,则需要更新数据内容
			if (inode->i_blkbits == PAGE_CACHE_SHIFT ||
					!mapping->a_ops->is_partially_uptodate)
				goto page_not_up_to_date;
			if (!trylock_page(page))
				go
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值