Linux内核写文件过程-LinuxKernelExploration
Linux 内核写文件过程
Linux内核写文件过程
1
Linux 内核写文件过程
目 录Table of Contents
1 概述 4
2 虚拟文件系统与ext4文件系统层 6
2.1 sys_write () 6
2.2 vfs_write () 7
2.3 do_sync_write () 9
2.4 ext4_file_write () 10
2.4.1 Ext4文件系统extent特性 10
2.4.2 ext4_file_write ()函数分析 12
2.5 generic_file_aio_write () 14
2.6 __generic_file_aio_write () 15
2.7 generic_file_buffered_write () 18
2.8 generic_perform_write () 19
2.8.1 ext4文件系统address_space_operations 19
2.8.2 ext4文件系统delay allocation机制 20
2.8.3 genric_perform_write () 21
2.8.4 genric_write_end () 29
2.8.5 block_write_end () 30
2
Linux 内核写文件过程
图目录 List of Figures
图1 Linux内核块设备I/O流程 4
图2 Ext4文件系统间接块映射与Extent模式 10
图3 ext4_extent、ext4_extent_idx、ext4_extent_header数据结构 11
图4 ext4 extent树 12
图5 缓冲页与缓冲区头的关系 27
3
Linux 内核写文件过程
1 概述
用户进程通过系统调用write ()往磁盘上写数据,但write ()执行结束后,数据是否
立即写到磁盘上?内核读文件数据时,使用到了“提前读”;写数据时,则使用了“延迟写”,
即write ()执行结束后,数据并没有立即立即将请求放入块设备驱动请求队列,然后写到
硬盘上。
本文不考虑以O_DIRECT或O_SYNC方式打开文件的情形,我们仅考虑异步I/O。同步方式写的I/O流
程相对简单。
本文以Redhat Enterprise Linux 6 Update 3内核版本2.6.32-279.el6.x86_64为例,分
析内核写文件过程。
在分析具体源码之前,我们回顾一下Linux内核块设备I/O流程,如图1所示。