这里我再讲一个有关事例:
大名鼎鼎的 PC Tools 5.0 相信各位都一定用过吧,不知你们现在手头还有没有,我还一直保留着,而且有好几种版本,呵呵(我还想以后发个贴专门讨论这件事情)。我们知道,当时它的磁盘编辑功能是很强的。在LBA寻址模式的BIOS和硬盘出现以前,它可以很方便的编辑逻辑盘的各个逻辑扇区或某一簇,以及FAT12/16系统定义的各个逻辑区域,比如可以直接跳转到BOOT区,第一个FAT扇区,第一个FDT扇区和第一个数据扇区。当突破528M容量的BIOS也就是支持LBA的BIOS出现以后, PC Tools 5.0 的磁盘编辑的定位问题来了:当我指定要它跳转到第一个FAT扇区或者第一个FDT扇区的时候,它实际跳转到的并不是该区域,也就是说它的扇区计算位置出现了错误。我想这很可能是由于 PC Tools 是按照CHS寻址模式来设计的,而实际硬盘却是按照LBA来寻址的,所以会造成这一现象。但奇怪的是后来Ext int13h出现后,这么古老的 PC Tools 反而可以正常定位了?!同样是在LBA模式下,为什么会出现两种不同的结果呢?
[ Last edited by fdsiuha on 2005-11-1 at 20:29 ]作者: DOSforever 时间: 2005-11-2 01:16 我们先把讨论的基础确定下来,不然的话会陷入混乱。首先我们先确定有几件事是可以肯定的。一个是一个硬盘的最大可寻址扇区数是确定的,由厂商给出。另一个是要寻址的扇区地址是经过两次转换,一次是BIOS,另一次是ATA接口。假如这两件事是可以确定的,好,我们接着讨论。
[ Last edited by DOSforever on 2005-11-2 at 01:17 ]作者: fdsiuha 时间: 2005-11-2 15:44 至于“整体”的概念,我说过了,它是硬盘内部的机制。现在的硬盘内部寻址是使用CHS的,而是把所有的扇区统统编号,直接靠这个编号来寻址。然后在硬盘的接口上它被转化为一个CHS参数。为什么要如此麻烦呢?第一,硬盘太大,里圈和外圈每道扇区数相差太大,用直接反映磁盘3维结构的CHS参数对于软件来说变化范围太大,而且不同的硬盘之间也不一样。这样做会使软件难以适应大部分的硬盘(譬如1头10柱面有128个扇区,由于你寻址到64为止,损失一半空间,在如1头1柱面只有32个扇区,由于寄存器可以寻址到64个,所以寻址就会经常出现越界),统一编号扇区后,逻辑上就只存在柱面的范围(就是盘片的直径乘密度,换句话,就是磁道密度的变化)的变化,不会越界,也不会损失空间。第二,虽然废除了CHS直接寻址,但是软件都使用固定的CHS格式来寻址,尤其微软的软件。所以对外还是要以CHS方式传递参数。