OS35.【Linux】文件系统前置知识
介绍磁盘存储和文件系统的基本原理。首先将文件分为打开和未打开两类,指出存储文件需要保存文件内容和属性。然后详细讲解了磁盘的物理结构,包括盘片、磁头等组件,并解释了磁盘利用磁性存储数据的原理。在抽象层面介绍了CHS/LBA两种寻址方式,说明扇区是磁盘访问的基本单位。最后初步探讨了文件系统的概念,指出操作系统通过分区管理硬盘空间,每个分区可以用结构体描述其地址范围,而文件系统的核心任务就是管理分区中的
目录
1.文件的分类
文件简单分为两类: 打开的文件和未打开的文件,而未打开的文件=文件内容+文件属性
那么存储文件=存储文件内容+存储文件属性
2.磁盘
百度百科是这样描述磁盘的: 磁盘(disk)是指利用磁记录技术存储数据的存储器
而且磁盘是计算机中唯一的机械设备,也称为机械硬盘
下面是博主从自家电脑上拆下来的磁盘:


磁盘的内部
磁盘中的几个重要的部分
以亚马逊网的"西数 1TB 3.5 英寸 SATA HDD 7200RPM 内置台式机硬盘 适用于 PC/Mac - OEM WD10EZEX 1 TB"的磁盘内部图为例:

(图片来自amazon.com 西数 1TB 3.5 英寸 SATA HDD 7200RPM)
1.盘片

2.磁头

3.主轴(下面有马达)

4.磁头停靠点

一个磁盘有多个盘片:

而一片盘片有正反两面,由于磁头要读取每片盘面,所以磁头是一面一个:

(图片截取自https://www.pngall.com/hard-disk-drive-png/)
注意: 读取磁盘数据时,磁头和盘面不接触,否则会导致磁头容易刮花盘片而损坏数据
抽象图
来自《存储技术原理分析》作者: 敖青云 第3页

磁盘的存储原理
物理上,利用磁性
磁盘是一种永久性存储介质,顾名思义,它是用磁性来存储数据的
磁盘的盘片(baike.baidu.com 盘片)表面覆盖着一层极其细微的磁性材料,可以把这层材料想象成由数万亿个微小的磁铁组成的集合
每个微小磁铁被称为一个磁畴,而每个磁畴都有一个磁性方向,即它的南极和北极的朝向
这个磁性方向可以用来代表数字信息:
一个方向(例如北极向上)代表 二进制1
相反方向(例如南极向上)代表 二进制00和1的组合可以音用来存储数据
抽象结构上,CHS/LBA寻址方式
有关CHS/LBA的知识参见李忠老师的著作《x86汇编语言:从实模式到保护模式 第二版》的第5章 虚拟机的安装和使用
这里摘抄重要的知识点:
1.磁盘被访问的最基本单元是扇区,一个扇区的大小是512字节
→那么可以把磁盘看做由无数个扇区构成的存储介质
→那么要把数据存到磁盘,第一个解决的问题是定位一个扇区
→定位扇区可以用C/H/S定位,全称是Cylinder/Head/Sector(柱面-磁头-扇区)寻址方式,而盘片旋转,磁头左右摆动,其实是在定位磁道和柱面的过程,机械运动越少,磁盘的读写效率越高
→从效率上可以得出: 在软件设计上,设计者一定要有意识地将相关数据放在一起
注: 有关柱面-磁头-扇区的图参见《x86汇编语言:从实模式到保护模式 第二版》的第5章 虚拟机的安装和使用
2.进一步抽象: 化曲为直
可以看到: 任意一个扇区都有下标(指的是LBA),
→LBA模式不考虑扇区的物理位置(磁头号、磁道号), 而是把它们全部组织起来统一编号,例如逻辑0扇区对应着0面0道1扇区、逻辑1扇区对应着0面0道2扇区、......
那么可以利用扇区数组元素的下标反推出CHS编号,或者从CHS编号推出扇区数组元素的下标,即LBA地址和CHS地址可以相互转化
注: 相互转化的算法参见osdev Disk_access_using_the_BIOS_(INT_13h)#Converting_LBA_to_CHS
磁盘中的"寄存器"
在《Understanding The Linux Kernel》中的CHAPTER 13 I/O Architecture and Device Drivers有提到:
An important objective for system designers is to offer a unified approach to I/O programming without sacrificing performance. Toward that end, the I/O ports of each
device are structured into a set of specialized registers, as shown in Figure 13-2. The
CPU writes the commands to be sent to the device into the device control register and
reads a value that represents the internal state of the device from the device status
register. The CPU also fetches data from the device by reading bytes from the device
input register and pushes data to the device by writing bytes into the device output
register.To lower costs, the same I/O port is often used for different purposes. For instance,
some bits describe the device state, while others specify the command to be issued to
the device. Similarly, the same I/O port may be used as an input register or an output
register.总而言之:
1.为了给I/O编程提供方便,每个的I/O端口设备被组织成一组专门的寄存器: 控制寄存器(可读?可写?)、状态寄存器、输入寄存器、输出寄存器
2.CPU控制DMA芯片,后者负责IO操作,通过加载数据到设备寄存器来控制I/O设备
不仅仅CPU有寄存器,而且磁盘中也有"寄存器"
附:机械硬盘的工作原理的视频链接
B站搬运: https://www.bilibili.com/video/BV1P3411Q7U3/?vd_source=5c8534f1d5e349a633b0aa51424d62f5
原版:
其他参考资料
磁盘信息的存储原理(吴晔 安徽合肥电子工程学院203教研室 230037),知网链接:
3.感性认识文件系统
打开Windows的磁盘管理
Win10下右击桌面上的此电脑,选择"管理(G)",再选择磁盘管理

也可以Win+R,再输入diskmgmt.msc后打开

这是博主电脑中被分成的几个区域的硬盘

将整个磁盘空间拆分成一个一个的小空间管理,每个小空间就是一个分区(分而治之的思想)
进一步完善上面的图

操作系统管理硬盘就是在管理硬盘上的一个个分区,管理分区需要先描述再组织
描述分区可以使用结构体,结构体存储的信息可以简单理解为存储磁盘地址的范围,即开始的地址和结束的地址(实际上描述分区的结构体非常复杂,需要借助文件系统),有以下代码:
struct partition
{
int start;
int end;
};
struct partition part[?];
那么文件系统的任务就是管理好这一个个分区中的文件
4.补充: RAID的概念
见《计算机组成原理与系统结构(第3版)》作者:冯建文 章复嘉 赵建勇 包健 编著的第5章 存储系统 5.8 磁盘存储器 5.8.2 独立磁盘冗余阵列(RAID)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐




所有评论(0)