深入理解linux内核--块设备驱动程序

块设备的处理

块设备驱动程序上的每个操作都涉及很多内核组件;其中最重要的一些如图14-1所示。
例如,我们假设一个进程在某个磁盘文件上发出一个read()系统调用
——我们将会看到处理write请求本质上采用同样的方式。
下面是内核对进程请求给予回应的一般步骤:

在这里插入图片描述

1.  read()系统调用的服务例程调用一个适当的VFS函数,将文件描述符和文件内的偏移量传递给它。
虚拟文件系统位于块设备处理体系结构的上层,它提供一个通用的文件模型,Linux支持的所有文件系统均采用该模型。
我们在第十二章已经详细介绍了VFS层。
2.  VFS函数确定所请求的数据是否已经存在,如果有必要的话,它决定如何执行read操作。
有时候没有必要访问磁盘上的数据,因为内核将大多数最近从块设备读出或写入其中的数据保存在RAM中。第十五章介绍了磁盘高速缓存机制,
而第十六章详细说明了VFS如何处理磁盘操作以及如何与磁盘高速缓存和文件系统交互。
3.  我们假设内核从块设备读数据,那么它就必须确定数据的物理位置。为了做到这点,内核依赖映射层(mapping layer),主要执行下面两步:
a.内核确定该文件所在文件系统的块大小,并根据文件块的大小计算所请求数据的长度。
本质上,文件被看作拆分成许多块,因此内核确定请求数据所在的块号(文件开始位置的相对索引)。
b.接下来,映射层调用一个具体文件系统的函数,它访问文件的磁盘节点,然后根据逻辑块号确定所请求数据在磁盘上的位置。
事实上,磁盘也被看作拆分成许多块,因此内核必须确定存放所请求数据的块对应的号(磁盘或分区开始位置的相对索引)。
由于一个文件可能存储在磁盘上的不连续块中,因此存放在磁盘索引节点中的数据结构将每个文件块号映射为一个逻辑块号(注1)。
我们将在第十六章中说明映射层的功能,在第十八章中将介绍一些典型的磁盘文件系统。
4.  现在内核可以对块设备发出读请求。内核利用通用块层(generic block Inyer)启动I/O操作来传送所请求的数据。
一般而言,每个I/O操作只针对磁盘上一组连续的块。
由于请求的数据不必位于相邻的块中,所以通用块层可能启动几次I/O操作。
每次I/O操作是由一个“块I/O”(简称“bio”)结构描述,它收集底层组件需要的所有信息以满足所发出的请求。
通用块层为所有的块设备提供了一个抽象视图,因而隐藏了硬件块设备间的差异性。
几乎所有的块设备都是磁盘,所以通用块层也提供了一些通用数据结构来描述“磁盘”或“磁盘分区”。
我们将在本章的“通用块层”一节中讨论通用块层和bio数据结构。
5.  通用块层下面的“I/O调度程序”根据预先定义的内核策略将待处理的I/O数据传送请求进行归类。
调度程序的作用是把物理介质上相邻的数据请求聚集在一起。我们将在本章后面的“I/O调度程序”一节中介绍调度程序。
6.  最后,块设备驱动程序向磁盘控制器的硬件接口发送适当的命令,从而进行实际的数据传送。
我们将在后面的“块设备驱动程序”一节介绍通用块设备驱动程序的总体组织结构。
如你所见,块设备中的数据存储涉及了许多内核组件;每个组件采用不同长度的块来管理磁盘数据:
6.1.硬件块设备控制器采用称为“扇区”的固定长度的块来传送数据。因此,I/O调度程序和块设备驱动程序必须管理数据扇区。
6.2.虚拟文件系统、映射层和文件系统将磁盘数据存放在称为“块”的逻辑单元中。
6.3.一个块对应文件系统中一个最小的磁盘存储单元。
我们很快会看到,块设备驱动程序应该能够处理数据的“段”:
一个段就是一个内存页或内存页的一部分,它们包含磁盘上物理相邻的数据块。
5.4.磁盘高速缓存作用于磁盘数据的“页”上,每页正好装在一个页框中。
通用块层将所有的上层和下层的组件组合在一起,因此它了解数据的扇区、块、段以及页。
即使有许多不同的数据块,它们通常也是共享相同的物理RAM单元。
例如,图14-2显示了一个具有4096字节的页的构造。
上层内核组件将页看成是由4个1024字节组成的块缓冲区。
块设备驱动程序正在传送页中的后3个块,因此这3块被插入到涵盖了后3072 字节的段中。
硬盘控制器将该段看成是由6个512字节的扇区组成。

在这里插入图片描述

本章我们介绍处理块设备的下层内核组件:通用块层、I/O调度程序以及块设备驱动程序,因此我们将注意力集中在扇区、块和段上。

扇区

为了达到可接受的性能,硬盘和类似的设备快速传送几个相邻字节的数据。
块设备的每次数据传送操作都作用于一组称为扇区的相邻字节。
在下面的讨论中,我们假定字节按相邻的方式记录在磁盘表面,这样一次搜索操作就可以访问到它们。
尽管磁盘的物理构造很复杂,但是硬盘控制器接收到的命令将磁盘看成一大组扇区。
在大部分磁盘设备中,扇区的大小是512字节,但是一些设备使用更大的扇区(1024和2048字节)。
注意,应该把扇区作为数据传送的基本单元;不允许传送少于一个扇区的数据,尽管大部分磁盘设备都可以同时传送几个相邻的扇区。
在Linux中,扇区大小按惯例都设为512字节;
如果一个块设备使用更大的扇区,那么相应的底层块设备驱动程序将做些必要的变换。
因此,对存放在块设备中的一组数据是通过它们在磁盘上的位置来标识,
即其首个512字节扇区的下标以及扇区的数目。
扇区的下标存放在类型为sector_c的32位或64位的变量中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

煤矿调度IP语音对讲广播模块一键求助对讲矿用调度通信系统SIP语音对讲求助终端

硬件接口描述 SV-2101VP/ SV-2103VP系列网络音频模块,所有外部连接采用端子,电源采用2.0mm的端子,网络采用标准RJ45连接器,其他都是1.25mm的连接器。 端口类型定义 P ———— 电源 AI ———— 模拟输入(在这里是音…

微信小程序前后端开发快速入门(完结篇)

这篇是微信小程序前后端快速入门完结篇了,今天利用之前学习过的所有知识做一个新的项目「群登记助手v1.0」小程序。 整体技术架构:小程序原生前端小程序云开发。 经历了前面教程的学习,大家有了一定的基础,所以本次分享重心主要是…

Ubuntu服务器service版本初始化

下载 下载路径 官网:https://cn.ubuntu.com/ 下载路径:https://cn.ubuntu.com/download 服务器:https://cn.ubuntu.com/download/server/step1 点击下载(22.04.3):https://cn.ubuntu.com/download/server…

【Python百日进阶-Web开发-Peewee】Day271 - Peewee API文档 - 字段(二)

文章目录 11.3.17 class UUIDField11.3.18 class BinaryUUIDField11.3.19 class DateTimeField11.3.20 class DateField11.3.21 class TimeField11.3.22 class TimestampField11.3.23 class IPField11.3.24 class BooleanField11.3.25 class BareField11.3.26 class ForeignKey…

神经网络基础-神经网络补充概念-06-计算图

概念 “计算图”(Computational Graph)是一种用于表示数学表达式计算过程的图结构,广泛用于深度学习和自动微分等领域。计算图将复杂的数学表达式分解为一系列简单的计算节点,这些节点之间通过边连接,形成了一个有向无…

【jwt】JWT原理,JWT是用来解决什么问题的,如何自定义生成JWT数据,并且实现jwt数据的解码

JWT: JSON Web Token 1. jwt概述 用户登录成功后,服务端 如何知道客户端的每次请求对应的是哪个用户呢?怎么做:目前有两种方式实现. 1.1. 一是通过sessionId的方式,登录成功后服务端返回sessionId给客户端&#xff0…

【2023年11月第四版教材】《第5章-信息系统工程之数据工程(第三部分)》

《第5章-信息系统工程之数据工程(第三部分)》 2 数据工程2.1 数据建模2.2 数据标准化2.3 数据运维2.4 数据开发利用2.5 数据库安全 2 数据工程 2.1 数据建模 1、根据模型应用目的不同,可以将数据模型划分为三类:概念模型、逻辑模型和物理模…

【数据结构】栈与队列

1 栈 1.1 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出 LIFO (Last In First Out) 的原则。 压栈:栈…

力扣75——图广度优先搜索

总结leetcode75中的图广度优先搜索算法题解题思路。 上一篇:力扣75——图深度优先搜索 力扣75——图广度优先搜索 1 迷宫中离入口最近的出口2 腐烂的橘子1-2 解题总结 1 迷宫中离入口最近的出口 题目: 给你一个 m x n 的迷宫矩阵 maze (下标…

Kafka中的 ISR 机制

ISR 是什么 ISR 的全称叫做: In-Sync Replicas (同步副本集), 可以理解为和 leader 保持同步的所有副本的集合。ISR 动态维护了一个和 leader 副本保持同步副本集合,ISR 中的副本全部都和 leader 的数据保持同步。 设一个场景&a…

JupyterHub实战应用

一、JupyerHub jupyter notebook 是一个非常有用的工具,我们可以在浏览器中任意编辑调试我们的python代码,并且支持markdown 语法,可以说是科研利器。但是这种情况适合个人使用,也就是jupyter notebook以我们自己的主机作为服务器…

PostgreSQL逻辑备份pg_dump使用及其原理解析

一、原理分析 1、循环调用getopt_long解析命令行参数,将参数保存到static DumpOptions dopt;中 2、判断参数是否相容,不相容则退出: options -s/--schema-only and -a/--data-only cannot be used togetheroptions -c/--clean and -a/--data…

uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测

uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测 uni-app中监听网络状态 下载插件 打开网络异常组件页面,点击"下载插件并导入HBuilderX"按钮,打开HBuilderX软件后,选择需要导入插件的项目&#xff…

机器学习与模型识别1:SVM(支持向量机)

一、简介 SVM是一种二类分类模型,在特征空间中寻找间隔最大的分离超平面,使得数据得到高效的二分类。 二、SVM损失函数 SVM 的三种损失函数衡量模型的性能。 1. 0-1 损失: 当正例样本落在 y0 下方则损失为 0,否则损失为…

系统架构设计师-信息安全技术(1)

目录 一、信息安全基础 1、信息安全五要素 2、网络安全漏洞 3、网络安全威胁 4、安全措施的目标 二、信息加解密技术 1、对称加密 2、非对称加密 3、加密算法对比 三、密钥管理技术 1、数字证书 2、PKI公钥体系 四、访问控制技术 1、访问控制基本模型 2、访问控制的实现技术…

【Linux命令详解 | ssh命令】 ssh命令用于远程登录到其他计算机,实现安全的远程管理

文章标题 简介一,参数列表二,使用介绍1. 连接远程服务器2. 使用SSH密钥登录2.1 生成密钥对2.2 将公钥复制到远程服务器 3. 端口转发3.1 本地端口转发3.2 远程端口转发 4. X11转发5. 文件传输与远程命令执行5.1 文件传输5.1.1 从本地向远程传输文件5.1.2 …

TensorFlow 的基本概念和使用场景

简介 TensorFlow 是一个开源的人工智能框架,由 Google 公司开发,用于构建和训练机器学习模型。 TensorFlow 的基本概念包括: 1. 张量 (Tensor): TensorFlow 中的基本数据结构,可以理解为多维数组。 2. 计算图 (Graph): TensorF…

深度学习入门-3-计算机视觉-图像分类

1.概述 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用,如:安防领域的人脸识别…

软考笔记——9.软件工程

软件工程的基本原理:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清除的审查、开发小组的人员应少而精、承认不断改进软件工程事件的必要性。 软件工程的基本要素:方法、工具、过程 软件生…

babylonjs基于自定义网格生成围栏动画

效果: import { Vector3, Mesh, MeshBuilder, StandardMaterial, Texture, Animation, Color3 } from "babylonjs/core"; import imgUrl from "./image/headerwangge2.png" // 创建模型护栏特效 export default class CreateRail {constructor…