linux内核基础知识,Linux 内核学习笔记:预备知识之“硬盘基础知识”

以前对于硬盘一直没有一个完整的概念,这次为了理解内核引导,特查找资料简述。

硬盘基本概念

在这里,我们不考虑硬盘的机械结构,而只考虑一些我们(程序员)可能需要了解的硬盘结构单元。我们先来看一个比较形象的硬盘模型:

1fa3dcd8486d271febec232f8a33dda0.png(图片来源:https://technet.microsoft.com/en-us/library/dd758814(v=sql.100).aspx)

这个模型已经涉及到 2 个概念:

盘片(Platter):每个盘片上下两面都可存储数据,而且上下两面各需一个读/写磁头。盘片从上到下编号为 0(第 1 个盘片上)、1(第 1 个盘片下)、2(第 2 个盘片上)、3(第 2 个盘片下)…

磁道(Track):沿着半径方向划分的同心圆(注意是有一定宽度的)。磁道从盘片外圈往内圈编号 0 磁道,1 磁道…靠近主轴的同心圆用于停靠磁头,不存储数据;

我们再来看一个图:

de2b2e51a70596d507d49255c37305a3.png图片来源

这下我们再来介绍 3 个概念:

扇面:盘片上的扇形区域。

扇区(Sector):每个磁道被扇面切割成的区域,是数据读/写的最小单元。每个扇区可存储 128×2 的 N 次方(N=0.1.2.3)个字节的数据(一般为 512B)。从上图可知,外圈的扇区面积比内圈大,但存储的数据量相同,这是因为内外圈使用的磁物质密度不同。现在的硬盘已经采用内外圈同密度物质来存储数据,以减少类似“大面积小数据”的浪费情况。

扇区的编号从 0 磁道开始,起始扇区为 1 扇区,其后为 2 扇区、3 扇区……,0 磁道的扇区编号结束后,1 磁道的起始扇区累计编号,直到最后一个磁道的最后一个扇区。例如,某个硬盘有 1024 个磁道,每个磁道划分为63 个扇区,则 0 磁道的扇区号为 1~63,1 磁道的起始扇区号为64,最后一个磁道的最后一个扇区号为 64512。

簇(Cluster):同一磁道上的连续的扇区形成的区域。

我们再来看最后一张图:

9d7550a9b4d95cd5e211dcd5cc099d74.png图片来源

注:上图中的 Disk block 指的就是扇区。

这下我们再来介绍 1 个概念:

柱面(Cylinder):不同盘片上的同半径磁道组成了柱面。

通过以上各图,我们可以算出一个硬盘的容量为:磁头数 × 磁道(柱面)数 × 每个磁道扇区数 × 每扇区字节数。

硬盘逻辑设备号

老式设备号命名规则

老式的设备号命名规则为:

设备号 = 主设备号 * 256 + 次设备号

其中,主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。

在老式设备号命名规则中,常见设备的主设备号分别为:

1

2

3

4

5

6

71-内存

2-磁盘

3-硬盘

4-ttyx

5-tty

6-并行口

7-非命名管道

对于硬盘而言,1 个硬盘最多有 4 个分区,由次设备号来指定具体分区。按老式设备号命名规则,硬盘逻辑设备号如下:

0e6cb946877623ec32db9ac2d2ca211c.png

现代设备号命名规则

分区概念

主分区:一块物理硬盘上可以被独立使用的一部分,一个硬盘最多可以有 4 个主分区。

扩展分区:为了突破一个物理硬盘只能有 4 个分区的限制,引入了扩展分区。扩展分区和主分区的地位相当,但是扩展分区本身不能被直接使用,然而可以被继续划分成多个"逻辑分区"。一个硬盘只能有一个扩展分区。

逻辑分区:逻辑分区可以有任意多个,但是不能独立存在,多个连续的逻辑分区可作为一个扩展分区。

总结:也就是说,在一个物理硬盘上主分区和扩展分区加在一起最多仍然只有 4 个。但是扩展分区可以继续被划分成逻辑分区,而对多数用户而言,其实主分区和逻辑分区在使用上是没什么区别的。这样就达到了一快硬盘几乎可以有无限个分区的目的。

实例分析

假设现在电脑上有一个 SATA 硬盘,这时查看设备:

1$ ls /dev

会发现有一个 sda(如果是 IDE 硬盘,就是 hda)。不同分区方案能看到不同结果:

分区方案一: 4 个主分区

这时候能看到:sda, sda1, sda2, sda3, dsa4

分区方案二:一个主分区和一个逻辑分区

这时候能看到:sda, sda1, sda2, sda5

这里sda是物理硬盘,sda1 是主分区,sda2 是扩展分区,sda5 是逻辑分区(正是因为必须保留 4 个数字给主分区和扩展分区使用,所以逻辑分区的数字必须从 5 开始)。

分区方案三:一个逻辑分区

这里能看到:sda,sda1,sda5

如果有多块物理硬盘就会出现 sdb,sdc。

一个实例如下:

b20b5fea19872790719e024475f1f064.png

硬盘基本参数表

在计算机 BIOS 设定的中断向量表中,int 0x41 的中断向量位置(4*0x41=0x0000:0x0104)存放的并不是中断服务程序的地址,而是第一个硬盘的基本参数列表。第二个硬盘的基本参数列表入口地址存放于 int 0x46 中断向量位置处(4*0x46=0x0000:0x0118)。硬盘参数表内容如下表所示:

8d25b7f4990b8945e0d8a2e8b959804e.png图片来源:《Linux 内核完全注释》

硬盘分区表

如果 PC 机从硬盘上启动操作系统,那么 ROM BIOS 程序在执行完机器自检诊断程序后就会把硬盘上的第 1 个扇区读入内存 0x7C00 开始处,并把控制权交给这个扇区中的代码去执行。这个特定的扇区称为主引导区 MBR (Master Boot Record),其结构如下表所示:

e8b591b3b0c7450cd490a771a96e7b29.png图片来源:《Linux 内核完全注释》

除了 446 字节的引导执行代码之外,MBR 中还包含一张硬盘分区表,共含有 4 个表项。分区表存放在硬盘的 0 柱面 0 头第 1 个扇区的 0x1BE0x1FD 偏移位置处。为了实现多个操作系统共享硬盘资源,硬盘可以从逻辑上把所有扇区分成 14 个分区。每个分区之间的扇区号是邻接的。分区表中每个表项由 16 字节,用来描述一个分区的特性。分区表项结构如下图所示:

49651371cdbccc3405a9c9c71776211a.png图片来源:《Linux 内核完全注释》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值