磁盘寻址方式--CHS和LBA寻址方式

时间:2024-04-09 14:02:30

什么是CHS寻址

很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的CSH 3D参数 (Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应CHS寻址方式。

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

磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。

柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。

扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

下面的图可能能更好的帮助理解:

磁盘寻址方式--CHS和LBA寻址方式

CHS寻址的最大容量

CHS寻址方式的容量由CHS三个参数决定:

磁头数最大为255 (用 8 个二进制位存储)。从0开始编号。

柱面数最大为1023(用 10 个二进制位存储)。从0开始编号。

扇区数最大数 63(用 6个二进制位存储)。从1始编号。

所以CHS寻址方式的最大寻址范围为:

255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )

或硬盘厂商常用的单位:

255 * 1023 * 63 * 512 / 1000000 = 8.414 GB ( 1M =1000000 Bytes )

CHS寻址的缺点

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

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

 

LBA(Logical Block Addressing)逻辑块寻址模式。在 LBA 模式下,我们知道硬盘上的一个数据区域由它所在的磁头、柱面(也就是磁道)和扇区所唯一确定。早期系统就是直接使用磁头柱面和扇区来对硬盘进行寻址(这称 为CHS寻址),这需要分别存储每个区域的三个参数(这称为3D参数),使用时再分别读取三个参数,然后在送到磁盘控制器去执行。由于系统用8b来存储磁 头地址,用10b来存储柱面地址,用6b来存储扇区地址,而一个扇区共有512B,这样使用CHS寻址一块硬盘最大容量为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)。随着硬盘技术的进步,硬盘容量越来越大,CHS模式无法管理超过8064 MB的硬盘,因此工程师们发明了更加简便的LBA寻址方式。在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将 CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了 烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再这种逻辑地址转换为实际硬盘的物理地址。

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

  在这三种硬盘模式中,现在 LBA 模式使用最多。

  LBA与C/H/S 之间的转换:

  设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)*PH*PS+(H-HS)*PS+(S-SS)