内核学习之路【4/100】-io

01、块设备:

系统中能随机访问固定大小数据片的硬件设备称为块设备,这些固定大小数据片就称为块设 备,常见的就是硬盘。

02、字符设备:

字符流的方式被有序访问,比如串口和键盘。

区别在于是否可以随机访问数据。

03、块设备复杂的管理要求,会对系统性能带来很大的影响,这部分优化有很大的空间,

所有我们要讨论如何对块设备和块设备请求进行管理。这部分在内核中称为io层。


物理、文件系统、内核寻址方式不同,

1、文件系统用block,物理寻址按照lba,内核的磁盘操作按照块进行。

2、文件系统block(非ssd的block)->按照lba进行寻址。

3、内核中的块和页,和ssd中概念不一致。(一般页大于等于块)和ssd中概念不同。

层次关系

复制代码
应用程序层
    ↓ 使用:文件路径 + 偏移
文件系统层          → 使用:逻辑块号(在分区内)
    ↓ 转换:块号 → LBA
块设备层            → 使用:LBA(全局)
    ↓ 发送:SCSI/NVMe命令
磁盘驱动层
    ↓ 传输:LBA + 数据
SSD固件层(FTL)    → 使用:LBA(仍为逻辑地址)
    ↓ 映射:LBA → 物理位置
SSD物理层          → 使用:NAND Page/Block

1、缓冲区与缓冲区头

当前一个块被调入内存时候,在读入后或等待写出时,他要存储在缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示。内核在·处理数据时需要一些相关的控制信息,比如块属于哪个块设备,块对应那个缓冲区等。每个缓冲区都有一个描述符,改描述符用buffer_head结构体表示,称为缓冲区头,在文件linux/buffer_head.h中定义。包含了内核操作缓冲区所需要的全部信息。

相关推荐
青山是哪个青山14 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb15 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos
崇子嵘15 小时前
基于zynqMP15eg的linux驱动学习
学习
知识分享小能手17 小时前
线性代数学习教程,从入门到精通,向量组的线性相关性 — 完整知识点梳理(7)
学习·线性代数·机器学习
Shell运维手记17 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
动词ing18 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
小O的算法实验室20 小时前
IEEE TII,学习为多目标深度学习生成偏好
人工智能·深度学习·学习
吃好睡好便好21 小时前
说说高温对情绪的影响
学习·生活·情绪·高温
for_ever_love__21 小时前
python基础语法学习: 文件操作
python·学习
m4Rk_1 天前
【论文阅读】Agent 记忆机制(38):AMA——用多智能体协作动态选择记忆粒度
论文阅读·人工智能·学习