用户进程通过系统调用write()往磁盘上写数据,但write()执行结束后,数据是否立即写到磁盘上?内核读文件数据时,使用到了“提前读”;写数据时,则使用了“延迟写”,即write()执行结束后,数据并没有立即立即将请求放入块设备驱动请求队列,然后写到硬盘上。
本文以Redhat Enterprise Linux 6 Update 3内核版本2.6.32-279.el6.x86_64为例,分析内核写文件过程。
目 录Table of Contents
1 概述… 4
2 虚拟文件系统与ext4文件系统层… 7
2.1 sys_write()… 7
2.2 vfs_write()… 8
2.3 do_sync_write()… 9
2.4 ext4_file_write()… 10
2.4.1 Ext4文件系统extent特性… 10
2.4.2 ext4_file_write()函数分析… 13
2.5 generic_file_aio_write()… 15
2.6 __generic_file_aio_write()… 16
2.7 generic_file_buffered_write()… 19
2.8 generic_perform_write()… 20
2.8.1 ext4文件系统address_space_operations. 20
2.8.2 ext4文件系统delay allocation机制… 21
2.8.3 genric_perform_write()… 22
2.8.4 genric_write_end()… 30
2.8.5 block_write_end()… 31
完整文档下载:Linux内核写文件过程
Leave a Reply