硬盘寻址

Posted 锦衣admin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬盘寻址相关的知识,希望对你有一定的参考价值。

硬盘寻址

内存读写数据时需要到硬盘内进行。

CHS寻址模式

CHS寻址介绍:

早期硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的CSH 3D参数 (Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应CHS寻址方式:使用时分别读取三个参数,然后再送到磁盘控制器去执行。系统用8b来存储磁 头地址,用10b来存储柱面地址,用6b来存储扇区地址。

CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。

  1. 磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。
  2. 柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。
  3. 扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

CHS寻址计算方式过程:

由于早期磁盘的每个磁道的扇区数一样多(外圈磁颗粒稀疏,耐用性强),整体磁盘空间大小也不大。所以在设计时用了24位来表示:10+8+6:

  1. C, (柱面数) 可编程数为 2^10 =1024
  2. H, (磁头数) 可编程数为 2^8 =256
  3. S, (扇区数) 可编程数为 2^6 =64
  • 由于1位用于特殊作用,均需要减1 即最大寻址空间为:
    255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )
  • 或硬盘厂商常用的单位:
    255 * 1023 * 63 * 512 / 1000000 = 8.414 GB ( 1M =1000000 Bytes )

CHS寻址方式的容量由CHS三个参数决定:硬盘容量 = 柱面数 × 磁头数 × 扇区数 × 512(扇区字节)

LBA寻址模式

LBA寻址介绍:

由于要求每个磁道的扇区数相等,而外道的周长要大于内道,所以外道的记录密度要远低于内道,不仅造成了硬盘空间的浪费,也限制了硬盘的容量。为了解决这一问题,进一步提高硬盘容量,人们改用等密度结构生产硬盘。也就是说,外圈磁道的扇区比内圈磁道多,采用这种结构后,硬盘不再具有实际的CHS参数,寻址方式也改为线性寻址(LBA寻址 ),即以扇区为单位进行寻址。

其中物理特性里,主要的几个关键参数均有改变:

  1. 磁盘面的磁颗粒更高密+磁头更稳定更细(影响C)
  2. 磁盘面的磁颗粒均匀分布(影响S)
  3. 磁盘增加磁盘盘面(影响H)

在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将 CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器将这种逻辑地址转换为实际硬盘的物理地址。

但一些古老的软件仍然使用CHS寻址方式(如使用BiosInt13H接口的软件),为了兼容这样的程序,在硬盘控制器内部安装了一个地址翻译器,可以通过它将老式CHS参数翻译成新的线性参数。

LARGE 大硬盘模式,在硬盘的柱面超过 1024 而又不为 LBA 支持时采用。LARGE 模式采用的方法是把柱面数除以 2,把磁头数乘以 2,其结果总容量不变。

LBA寻址计算过程:

设NS为每磁道扇区数,NH为磁头数,C、H、S分别表示磁盘的柱面、磁头和扇区编号,LBA表示逻辑扇区号,div为整除计算,mod为求余计算,则:

  • LBA=NH×NS×C+NS×H+S-1

  • C=(LBA div NS)div NH

  • H=(LBA div NS)mod NH

  • S=(LBA mod NS)+1

例如 LBA = 0 则 CHS = 0/0/1从C/H/S到LBA的计算公式:

  • LBA=(C-CS)PHPS+(H-HS)*PS+(S-SS)

以上是关于硬盘寻址的主要内容,如果未能解决你的问题,请参考以下文章

硬盘寻址 CHS LBA

3TB硬盘的容量已经超出了传统分区标准的支持

浅谈Kubernetes的持久化存储方案

磁盘管理

[DB] Redis

磁盘管理——Linux基本命令(14)