read() 系统调用

本文详细介绍了Linux内核中read()系统调用的工作原理,从虚拟文件系统(VFS)的接口,到磁盘缓冲的使用,再到磁盘I/O的映射和块设备操作。通过理解这一过程,可以深入了解到Linux如何优化文件读取性能,包括利用磁盘缓存提高系统效率,以及通过通用块层和bio结构体进行聚散I/O操作。
摘要由CSDN通过智能技术生成

1. read() 系统调用将会调用虚拟文件系统层VFS 中相应的读方法,并将要读的文件指针和文件偏移一并传给虚拟文件系统层。虚拟文件系统层可以看作是对块设备操作的最高一层,它提供了一个抽象的统一的文件操作视图给上层,并给所有被Linux 操作系统支持的文件系统提供了一个通用的文件操作接口,只要下层的实际文件系统实现这个接口就可以提供正确的服务。


2. 实现上并不是每次对磁盘的读写操作都会产生实际的磁盘操作,这是因为系统中还存在有一个磁盘缓冲,就是通常所说的页缓冲。所有的读写操作都会先去查找一下这个缓冲看是否命中,如果命中就不用产生实际的磁盘I/O 这样可以提高系统的性能。如果没有命中就会向下继续传递读写命令。并会把相应的读写数据存入这个缓冲区中,以便下次使用。Linux 内核对这个缓冲的使用策略就是在系统内存允许的情况下使这个缓冲区尽可能大,以提高命中率。


3. 当Linux 内核必需要去产生实际的磁盘I/O 的时候即没有命中的时候,那些它需要去确定要读的数据的物理位置。为了达到这个目的,它就需要映射层。这个过程实际上可以分为以下的两步:

  3.1. 首先要确定这个文件系统的块大小,然后通过确定的块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值