Linux内核读文件过程-LinuxKernelExploration.PDF

Linux内核读文件过程-LinuxKernelExploration

Linux 内核读文件过程 Linux内核读文件过程 1 Linux 内核读文件过程 目 录Table of Contents 1 概述4 2 虚拟文件系统与ext4文件系统层6 2.1 sys_read ()6 2.1.1 fget_light ()和fput_light ()7 2.2 vfs_read ()8 2.3 do_sync_read ()10 2.3.1 异步I/O 10 2.3.2 do_sync_read ()12 2.4 generic_file_aio_read ()14 2.5 do_generic_file_read ()17 2.5.1 address_space-readpage ()方法24 2.5.2 file_read_actor ()25 2.6 do_mpage_readpage ()26 2.7 mpage_bio_submit ()31 3 读数据完成返回过程31 3.1 读进程的阻塞和继续执行过程31 3.2 读数据返回过程34 2 Linux 内核读文件过程 图目录 List of Figures 图1 内核中块设备操作流程4 图2 __lock_page ()函数调用栈34 图3 读数据返回内核栈34 3 Linux 内核读文件过程 1 概述 我们对系统调用read ()非常熟悉,也常听说“零拷贝”。在看Linux 内核源码时,有很多 人会有一些困惑;比如读文件的整个流程是怎样的?内核是如何Cache 已经读取的文件数据? 驱动从磁盘上读取的数据是否会直接写到用户的缓冲区中?内核是在哪个地方分配空间来存储 将要读取的数据?是在哪个地方将当前进程阻塞,直至读取数据结束?“零拷贝”是如何实现 的? 本文以Redhat Enterprise Linux 6 Update 3 内核版本2.6.32-279.el6.x86_64为例,分析从 用户进程通过read ()读取文件,直至数据返回给用户的整个流程。 在我们分析源码之前,仍要回顾一下内核中块设备操作的流程,如图1所示。 Virtual Filesystem Switch Disk Caches Disk Disk Filesystem Filesystem Generic Block Layer I/O Scheduler Layer Block Device Driver Block Device Driver HDD SSD 图1 内核中块设备操作流程

文档评论(0)

1亿VIP精品文档

相关文档