文件读写与内存映射技术解析
1. 脏页写入磁盘
当调用 write() 系统调用时,其主要作用是修改页缓存中部分页面的内容。在某些情况下,若文件以 O_SYNC 标志打开,I/O数据传输会立即启动;但通常情况下,I/O数据传输会被延迟。
当内核要真正启动I/O数据传输时,会调用文件的 address_space 对象的 writepages 方法,该方法会在基数树中查找脏页并将其刷新到磁盘。以Ext2文件系统为例,其 writepages 方法的实现如下:
int ext2_writepages(struct address_space *mapping,
struct writeback_control *wbc)
{
return mpage_writepages(mapping, wbc, ext2_get_block);
}
若文件系统未定义 writepages 方法,内核会直接调用 mpage_writepages() ,并将 NULL 作为第三个参数传入。 ext2_get_block() 函数用于将文件块号转换为逻辑块号。
mpage_writepages() 函数主要执行以下操作:
1. 若请求队列写拥
超级会员免费看
订阅专栏 解锁全文
694

被折叠的 条评论
为什么被折叠?



