当前位置: 首页 > news >正文

Linux系统之----磁盘硬件

1.磁盘的物理结构

磁盘的物理结构可以概括为以下几个主要部分:

1. 主轴(马达):主轴是硬盘的核心组件之一,它通过电机驱动磁盘片高速旋转,常见的转速有5400RPM、7200RPM、10000RPM和15000RPM等。主轴电机用于旋转盘片,使其以高速旋转。通常,机械硬盘的转速为5400转/分钟、7200转/分钟或更高。

2. 磁盘片(相当于纸):磁盘片是存储数据的物理载体,通常由铝、玻璃或陶瓷等材料制成,表面涂有一层磁性材料。磁盘片的正反两面都可存储数据,一个磁盘(如一个1T的机械硬盘)由多个盘片叠加而成。盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。

3. 磁头(相当于笔):磁头是用于读取和写入数据的装置,一般盘片的上下都有磁头,位于磁头臂上,每个磁头上都有读和写的操作装置。磁头通过识别磁盘磁粒的极性来读取数据,也可以利用其变化的磁场改变磁盘磁粒的极性,实现写入和改写数据。

4. 磁头臂(Actuator Arm):磁头臂是支持磁头的可移动臂,通过电动机或电磁力控制,可以使磁头在盘片上移动到不同的磁道位置。磁头臂是连接磁头和磁盘驱动器主体的部件,它负责移动磁头到指定的位置。

5. 永磁铁:永磁铁用于磁头臂的驱动,通过磁力控制磁头臂的移动。磁头的驱动臂是由铜线制成的平直的电磁线圈,悬浮在永久磁铁的磁极间。

6. 盘片组:在多磁盘片的硬盘中,多个磁盘片叠放在一起,形成一个盘片组。每个磁盘片的上下两面都可以存储数据。

附图一张:

2.磁盘的存储结构

 a)是一个盘片的平面图,上面有一圈一圈的东西,我们称之为磁道,在一个磁道上会有很多个小间隙将这个磁道分为若干份,这里我们称每一小份都为一个扇区(sector,是磁盘存储数据的基本单位,512字节,块设备),b)是多个盘片组合而成的结构

那数据是怎么读取的呢?请看下图

当我们读取数据时, 我们的磁盘会以一定速度旋转,同时我们的磁头也在左右摆动,在寻找读取的位置,磁头是和传动臂相连的,磁头和盘面是一对一的,一面一个磁头,并且这些磁头是共进退的,因为都连到一个传动臂上了,应该不需要多解释吧?之后还要补充一点概念,叫做柱面,就是指磁道,相同半径的磁道看做一个整体。如下图所示:

好!那问题来了,如何去定位一个扇区呢?

在这里,我们可以可以先定位磁头(header) ,再确定磁头要访问哪⼀个柱面(磁道)(cylinder),最后再定位⼀个扇区(sector)

于是便有了CHS地址定位!

3.磁盘的逻辑结构

我们先看一位老朋友:

这个大家应该都见过吧?我小时候还给拉开过,对就是磁带,这上面可以存储数据

我们要是把磁带拉直的话是不是就这样了?

 好!想象一下我们把磁盘也给拉直了,是不是就是这样的?

这样每一个扇区,就有了一个线性地址(其实就是数组下标),这种地址叫做LBA  

所以逻辑上,我们可以理解为磁盘整体是由“柱面”卷起来的。 

因此当我们将磁道展开,就是一个一维数组!

将柱面展开,就是个三维数组!如下图所示

但是我们才C/C++角度看,这三维数组本质上不也是个一维数组吗?

所以,每一个扇区都有一个下标,我们叫做LBA(Logical Block Address)地址,其实就是线性地址。所以那怎么计算得到这个LBA地址呢?

4. CHS && LBA地址

CHS转成LBA:
磁头数*每磁道扇区数 = 单个柱面的扇区总数
LBA = 柱面号C*单个柱面的扇区总数 + 磁头号H*每磁道扇区数 + 扇区号S - 1
即:LBA = 柱面号C*(磁头数*每磁道扇区数) + 磁头号H*每磁道扇区数 + 扇区号S - 1
扇区号通常是从1开始的,而在LBA中,地址是从0开始的
柱面和磁道都是从0开始编号的
总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机的时候,会获取到这些参
数。
LBA转成CHS:
柱面号C = LBA // (磁头数*每磁道扇区数)【就是单个柱面的扇区总数】
磁头号H = (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数
扇区号S = (LBA % 每磁道扇区数) + 1
"//": 表示除取整
所以:从此往后,在磁盘使用者看来,根本就不关心CHS地址,而是直接使用LBA地址,磁盘内部自己转换。
所以:
从现在开始,磁盘就是一个元素为扇区的一维数组,数组的下标就是每一个扇区的LBA地址。OS使用磁盘,就可以用一个数字访问磁盘扇区了。

这里给大家生成一个示例:

 

http://www.xdnf.cn/news/632647.html

相关文章:

  • 【25软考网工】第八章 (1)交换机基础
  • C# 预处理器指令
  • 人工智能概论(一)初见人工智能笔记
  • MultipartFile实现文件上传
  • python 程序实现了毫米波大规模MIMO系统中的信道估计对比实验
  • 基于CEEMDAN-Transformer-BiLSTM的多特征风速气候预测的完整实现方案及PyTorch源码解析
  • 2025年渗透测试面试题总结-匿名[实习]安全工程师(大厂) (2)(题目+回答)
  • 大数据与数据分析【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • Github上一些使用技巧(缩写、Issue的Highlight)自用
  • Ollama-OCR:基于Ollama多模态大模型的端到端文档解析和处理
  • 对象存储(Minio)使用
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.merge():数据库风格合并
  • 基于蒙特卡罗 AWGN信道调制信号互信息(信道容量)
  • vc++在Windows中查找扬声器输出的当前音量级别
  • DeepSeek+白果AI论文:开启答辩PPT生成的「智能双引擎」时代
  • 国际前沿知识系列二:基于不同类型头部碰撞中的运动学特征预测能力统计分析
  • 005 深度优先搜索(DFS)算法详解:图解+代码+经典例题
  • C++编译/链接模型
  • Fuzz 模糊测试篇JS 算法口令隐藏参数盲 Payload未知文件目录
  • 基于 ColBERT 框架的后交互 (late interaction) 模型速递:Reason-ModernColBERT
  • 广东省省考备考(第十九天5.24)—言语(第七节课)
  • Qwen2.5 VL 多模态融合阶段(3)
  • python炸鱼船
  • java基础(继承)
  • 【免费使用】剪Y专业版 8.1/CapCut 视频编辑处理,素材和滤镜
  • Spyglass:跨时钟域同步(长延迟信号)
  • 异步处理与事件驱动中的模型调用链设计
  • 5.24 打卡
  • 【电池】极端环境对锂离子电池的影响-【2.5万字解析】
  • 数值分析(电子和通信类)