85、异步I/O与页面帧回收机制解析

异步I/O与页面帧回收机制

异步I/O与页面帧回收机制解析

1. 直接I/O操作流程

在进行直接I/O操作时,若以 mapping 为根的基数树非空( mapping->nrpages 大于零),系统会调用 filemap_fdatawrite() filemap_fdatawait() 函数,将所有脏页刷新到磁盘,并等待I/O操作完成。这是为避免数据丢失,在开始直接I/O传输前同步磁盘映像与页面缓存。之后会调用映射地址空间的 direct_IO 方法,多数情况下,该方法是 __blockdev_direct_IO() 函数的封装。若操作类型为写入,还会调用 invalidate_inode_pages2() 扫描基数树中的所有页面并释放,同时清除引用这些页面的用户模式页表项。

__blockdev_direct_IO() 函数会将读写数据分割成合适的块,定位磁盘上的数据,并填充一个或多个 bio 描述符,描述要执行的I/O操作。这些数据会直接读写到 iov 数组中 iovec 描述符指定的用户模式缓冲区。最后通过 submit_bio() 函数将 bio 描述符提交到通用块层,通常该函数会在所有直接I/O传输完成后才返回。

2. POSIX标准的异步I/O库函数

POSIX 1003.1标

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值