Linux内核io体系之磁盘io

本文详细分析了Linux内核中的磁盘I/O体系,从VFS层的superblock、inode、dentry、file,到PageCache、映射层、通用块层、IO调度层,再到块设备驱动层和物理设备层。讨论了Buffered I/O、Direct I/O、Sync I/O和Async I/O等概念,并阐述了脏页刷盘、预读策略以及磁盘I/O调度的重要性。
摘要由CSDN通过智能技术生成

架构图

在这里插入图片描述
在这里插入图片描述

前言

Linux I/O体系是Linux内核的重要组成部分,主要包含网络IO、磁盘IO等。基本所有的技术栈都需要与IO打交道,分布式存储系统更是如此。本文主要简单分析一下磁盘IO,看看一个IO请求从发起到完成到底经历了哪些流程。

名词解释

Buffered I/O:缓存IO又叫标准IO,是大多数文件系统的默认IO操作,经过PageCache。
Direct I/O:直接IO,By Pass PageCache。offset、length需对齐到block_size。
Sync I/O:同步IO,即发起IO请求后会阻塞直到完成。缓存IO和直接IO都属于同步IO。
Async I/O:异步IO,即发起IO请求后不阻塞,内核完成后回调。通常用内核提供的Libaio。
Write Back:Buffered IO时,仅仅写入PageCache便返回,不等数据落盘。
Write Through:Buffered IO时,不仅仅写入PageCache,而且同步等待数据落盘。

IO体系

我们先看一张总的Linux内核存储栈图片:
在这里插入图片描述
Linux IO存储栈主要有以下7层:
在这里插入图片描述

VFS层

我们通常使用open、read、write等函数来编写Linux下的IO程序。接下来我们看看这些函数的IO栈是怎样的。在此之前我们先简单分析一下VFS层的4个对象,有助于我们深刻的理解IO栈。

VFS层的作用是屏蔽了底层不同的文件系统的差异性,为用户程序提供一个统一的、抽象的、虚拟的文件系统,提供统一的对外API,使用户程序调用时无需感知底层的文件系统,只有在真正执行读写操作的时候才调用之前注册的文件系统的相应函数。

VFS支持的文件系统主要有三种类型:
基于磁盘的文件系统:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值