硬盘寻址方案

一般硬盘由主轴,多个盘片(每个盘片上有两面,每面都可用来存取数据)和读写磁头构成,而且每个硬盘都有一个硬盘控制器,我们的驱动程序和该硬盘控制器进行交互,而不是直接跟硬盘交互。
在硬盘的体系中,硬盘的寻址方案是最重要的。
常见的寻址方案有:CHS[1],ZBR[2],CCHHR(Cylinder–Head–Record)。CHS就是我们常说的“柱面,磁头,扇区”寻址方案,在另外一篇文章 《<鸟哥的Linux私房菜>第零章》中也有介绍。但是CHS方案对硬盘的空间利用率不是很高,因而随着发展,该寻址方案逐渐被淘汰。
起初的驱动程序直接知晓硬盘使用的真正寻址方案,但是这种设计大大增加了驱动程序的移植成本,因而后来人们在硬盘控制器层增加了一个“实际硬盘地址和逻辑硬盘地址的互转逻辑”,借助于这个逻辑,驱动程序只需要使用逻辑硬盘地址就可以,用户需要也只需要关心逻辑硬盘地址方案就可以了,实际硬盘地址方案由硬盘控制器进行管控,我们不需要关心。常见的逻辑硬盘地址方案有LBA[3],absolute sector addressing in DOS和virtual CHS values等等

实际硬盘地址方案和逻辑硬盘地址方案关系如下图所示:

硬盘寻址方案_第1张图片


备注:
1)virtual CHS values:即表示实际硬盘地址采用非CHS方案,但是驱动程序等程序可以继续使用Cylinder,Header,Sector值来定位硬盘地址,相应的转换逻辑由硬盘控制器实现
2)内存中有“实际物理大小”和“实际可用大小”的概念,它表示内存的“实际可用大小”由“实际物理大小”和“特定系统实现设定的内存寻址位数”决定,比如内存寻址位数为32,那么最大的“实际可用大小”只有2^32=4G,此时如果内存“实际物理大小”为100G,那么系统也只能使用4G的内存大小。同样的,在“逻辑硬盘地址”中也有这个概念,比如当前采用virtual CHS values逻辑硬盘地址方案,位数分配方案(Cylinder:16bits,Head:4bits,Sector:8bits)和位数分配方案(Cylinder:10bits,Head:8bits,Sector:6bits)得到的最终硬盘的“实际可用大小”是不一样的
3)在virtual CHS values逻辑硬盘地址方案中,c值从0开始,h值从0开始,s值从1开始;在LBA逻辑硬盘地址方案中,用一个整数来作为某个扇区的序号,该整数值从0开始
4)某个硬盘控制器有可能实现了1种或多种逻辑硬盘地址和实际硬盘地址的互转逻辑,比如"实际硬盘地址和virtual CHS values的互转逻辑",“实际硬盘地址和LBA的互转逻辑”,这些跟具体的硬盘厂商和硬盘型号有关
5)在同一个机子中不同程序使用的逻辑硬盘地址方案可以是不同的,比如说BIOS和操作系统使用的逻辑硬盘地址方案可以是不同的


参考文献:

[1]https://en.wikipedia.org/wiki/Cylinder-head-sector 

[2]https://en.wikipedia.org/wiki/Zone_bit_recording 

[3]https://en.wikipedia.org/wiki/Logical_block_addressing 

你可能感兴趣的:(硬盘寻址方案)