
很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘. 也就是硬盘盘片的每一条磁道都具有相同的扇区数.由此产生了所谓的3d参数 (disk geometry). 既磁头数(heads), 柱面数(cylinders),扇区数(sectors),以及相应的寻址方式.
其中:
磁头数(heads)表示硬盘总共有几个磁头,也就是有几面盘片, 大为 255 (用 8 个二进制位存储);
柱面数(cylinders) 表示硬盘每一面盘片上有几条磁道, 大为 1023(用 10 个二进制位存储);
扇区数(sectors) 表示每一条磁道上有几个扇区, 大为 63(用 6个二进制位存储).
每个扇区一般是 512个字节, 理论上讲这不是必须的,但好象没有取别的值的.
所以磁盘 大容量为:
255 * 1023 * 63 * 512 / 1048576 = 8024 gb ( 1m =1048576 bytes )或硬盘厂商常用的单位:
255 * 1023 * 63 * 512 / 1000000 = 8414 gb ( 1m =1000000 bytes )
在 chs 寻址方式中, 磁头, 柱面, 扇区的取值范围分别为 0到 heads - 1,0 到 cylinders - 1, 1 到 sectors (注意是从 1 开始).
2. 基本 int 13h 调用简介
bios int 13h 调用是 bios提供的磁盘基本输入输出中断调用, 它可以完成磁盘(包括硬盘和软盘)的复位, 读写, 校验, 定位, 诊断,格式化等功能.它使用的就是 chs 寻址方式, 因此 大识能访问 8 gb 左右的硬盘 (本文中如不作特殊说明, 均以 1m = 1048576 字节为单位).
3. 现代硬盘结构简介
在老式硬盘中, 由于每个磁道的扇区数相等,所以外道的记录密度要远低于内道, 因此会浪费很多磁盘空间 (与软盘一样). 为了解决这一问题,进一步提高硬盘容量, 人们改用等密度结构生产硬盘. 也就是说,外圈磁道的扇区比内圈磁道多. 采用这种结构后, 硬盘不再具有实际的3d参数,寻址方式也改为线性寻址, 即以扇区为单位进行寻址.
为了与使用3d寻址的老软件兼容 (如使用biosint13h接口的软件), 在硬盘控制器内部安装了一个地址翻译器,由它负责将老式3d参数翻译成新的线性参数. 这也是为什么现在硬盘的3d参数可以有多种选择的原因(不同的工作模式, 对应不同的3d参数, 如 lba, large, normal).
4. 扩展 int 13h 简介
虽然现代硬盘都已经采用了线性寻址, 但是由于基本 int13h 的制约, 使用 bios int 13h 接口的程序, 如 dos 等还只能访问 8 g以内的硬盘空间.为了打破这一限制, microsoft 等几家公司制定了扩展 int 13h 标准(extended int13h), 采用线性寻址方式存取硬盘, 所以突破了 8 g的限制,而且还加入了对可拆卸介质 (如活动硬盘) 的支持.
