82、文件读写操作详解

文件读写操作详解

1. 文件预读机制

在文件读取过程中, page_cache_readahead() 函数在创建新窗口时,会启动对包含页面的读取操作。为了读取一组页面,它会调用 blockable_page_cache_readahead() 函数。该函数为减少内核开销,采用了以下策略:
- 避免在读取拥塞时操作 :若服务于块设备的请求队列处于读取拥塞状态,则不进行读取操作,因为增加拥塞并阻塞预读没有意义。
- 检查页面缓存 :对每个要读取的页面检查页面缓存,若页面已在缓存中,则直接跳过。
- 一次性分配页面帧 :在从磁盘读取之前,一次性分配读取请求所需的所有页面帧。若无法获取所有页面帧,则仅对可用页面执行预读操作,因为等待所有页面帧可用再进行预读意义不大。
- 使用多段生物描述符 :尽可能使用多段生物描述符将读取操作提交到通用块层。若地址空间对象定义了专门的 readpages 方法,则使用该方法;否则,重复调用 readpage 方法。

当预读策略效果不佳时,内核需要调整预读参数。以 do_generic_file_read() 函数为例,在步骤 4c 中调用 page_cache_readahead() 函数。根据流程图,请求的页面可能在当前窗口或提前窗口中,应已提前读取;若不在,则调用 blockable_pa

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值