当前位置: 首页 > 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使用磁盘,就可以用一个数字访问磁盘扇区了。

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

 

相关文章:

  • 【C++进阶篇】红黑树的封装(赋源码)
  • 线程池实战——数据库连接池
  • Python中字典(dict)知识详解应用
  • Vue.extend
  • CentOS7更新 GLIBC 2.25
  • 区块链可投会议CCF C--APSEC 2025 截止7.13 附录用率
  • ISO 26262-5 区分失效模式
  • 阿里千问系列:Qwen3技术报告解读(下)
  • 英语科研词汇现象及语言演变探讨
  • 用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来!
  • YOLOV8涨点技巧之空间通道协作注意力(SCCA)-应用于自动驾驶领域
  • 类欧几里得算法(floor_sum)
  • git 把一个分支A的某一个 commit 应用到另一个分支B上
  • LLM 使用本地模型 提取新生成 文本 的token ID序列
  • 使用中文作为map的可以,需要注意什么
  • 差分数组知识笔记
  • java 加密算法的简单使用
  • 医学写作人才管理策略
  • Leetcode 刷题记录 11 —— 二叉树第二弹
  • 获取 Stream 对象的方式
  • 如何上传自己的做的网站/优化营商环境个人心得体会
  • 网站 沙盒/网页生成器
  • 自媒体采集网站建设/怎么去推广自己的网站
  • 连云港专业网站制作公司/中国体育新闻
  • 网站后台登录不显示验证码/网站提交收录软件
  • 成都三合一网站建设/培训心得体会800字