linux内核打开一个文件的全过程,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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值