Linux内核通用块设备层深度解析
需积分: 30 10 浏览量
更新于2024-07-18
收藏 804KB PDF 举报
"本文主要介绍了Linux内核中的通用块设备层(Kernel General Block Layer),讲解了块设备驱动的相关概念和工作流程,包括扇区、块、段等基本概念,以及缓冲区、bio结构体及其作用。同时,文章详细阐述了通用块设备层如何处理I/O请求,包括磁盘和磁盘分区的表示、读写类型、请求提交过程等关键步骤。"
Linux通用块设备层是内核中的核心组件,负责抽象底层硬件设备,提供统一的接口供上层文件系统和其他系统组件使用。这一层的主要任务是管理I/O请求,优化数据传输,并协调与具体块设备驱动的交互。
1. **概述**
内核在处理块设备上的I/O请求时,通常经过VFS(虚拟文件系统层)、映射层到通用块设备层。当进程发起read()系统调用时,VFS检查数据是否在缓存中,若不在则由映射层确定数据在设备上的位置,然后通过通用块设备层进行实际的读取操作。
2. **块设备相关概念**
- **扇区(Sectors)**: 扇区是磁盘上最小的可寻址单位,通常为512字节。
- **块(Blocks)**: 块是文件系统级别的逻辑单位,通常大于或等于扇区,以便更高效地管理存储空间。
- **段(Segments)**: 在某些上下文中,段可能是指I/O请求中连续的扇区集合。
3. **通用块设备层**
- **缓冲区和缓冲区头**: 缓冲区用于存储磁盘上的数据,而缓冲区头则是管理这些缓冲区的数据结构,包含有关缓冲区状态和位置的信息。
- **bio结构体**: bio(Block I/O)结构体代表了一个或多个连续的扇区,用于组合成I/O请求。它包含了I/O操作的源或目标地址和大小等信息。
- **缓冲区头和bio结构体比较**: 两者都用于I/O操作,但缓冲区头更专注于单个缓冲区的管理,而bio结构体关注的是多个扇区的连续操作。
4. **通用块设备层对请求的处理**
- **磁盘和磁盘分区的表示**: 系统通过设备文件来表示磁盘和分区,如/dev/sda1表示第一块IDE硬盘的第一个分区。
- **向通用块设备层发送请求**
- **读写类型**: 包括读取和写入操作,通过特定的系统调用如read()和write()触发。
- **ll_rw_block()**: 这是启动读写操作的关键函数,它将请求添加到请求队列中。
- **submit_bh()**: 用于提交缓冲区头到I/O调度器,是I/O操作的起点。
- **generic_make_request()** 和 **__generic_make_request()**: 这两个函数处理请求的创建和提交,进一步将请求分解为适合硬件处理的格式。
整个流程中,通用块设备层扮演了中间人的角色,它接收来自VFS的请求,根据设备特性进行适当的转换,然后传递给具体的块设备驱动去执行实际的I/O操作。通过这种方式,内核实现了对不同硬件设备的统一管理和高效利用。
2021-02-05 上传
2024-11-18 上传
2024-11-18 上传
weixin_40454726
- 粉丝: 0
- 资源: 1
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析