CHS和LBA确实不是同一个算法,但我认为并不是在BIOS层面上,而是在ATA接口层面上。ATA接口的硬盘寻址寄存器(现以28bit寻址为讨论基础,48bit暂不讨论)分别用了16位,4位和8位来分别表示柱面数、磁头数和扇区数;所以,如果以CHS方式来寻址的话,最大可寻址空间为 2^16 * 2^4 * (2^8-1) = 267386880 个扇区,也就是 136,902,082,560 byte;如果把整个28位用来作表示为一个LBA的线性地址的话,那就是可寻址 2^28 = 268435456 个扇区,也就是 137,438,953,472 byte。这也就是两种方式最大可寻址空间的区别。
具体到某个硬盘是否如你计算所表达的那样我表示怀疑。还是以那块60G的硬盘为例,为了简便起见我们就以扇区为计算单位(其实都一样)。假如按照CHS模式的话,三个参数都在允许的范围以内。但假如按照LBA模式的话 0111111111111111110100110100(B) => 134,217,012(D) 所表示的扇区数已经超出这块硬盘的实际实用扇区数了。反过来,这块硬盘的最大实用扇区数为 120,103,200 (D) => 0111001010001010000100100000(B) 28bit,这个数值无论怎么分割也凑不成该模式下CHS各个参数的。
我们再把那块60G的硬盘的参数的表格扩充计算一下:
LBA Sector count: 120,103,200 sectors
Head * Sector * Cylinder = Total Sectors | Remain | Sectors/Cylinder
| |
CHS 16 255 29437 120,102,960 | 240 | 4080
| |
LARGE 240 255 1962 120,074,400 | 28800 | 61200
| |
LBA 255 63 7476 120,101,940 | 1260 | 16065
通过上面这个例子可以看出,无论哪种模式下,逻辑上的CHS参数乘积所得到的总扇区数都小于LBA(注意,此LBA非彼LBA,下面会说明)所给出的总扇区数,而且剩余的扇区数都不到该模式下每柱面的扇区数,也就是不足以构成一个柱面。因此,我认为CHS和LBA算法的不同只是表现在ATA接口层面上,而在BIOS层面上所显示出的各个模式的各个CHS参数都是以ATA接口的LBA总扇区数为基础进行换算的,而且是以柱面为单位分配的,所有这些柱面相加的总扇区数不超过LBA给出的总的扇区数,不足的部分省略。
说了那么多的LBA和CHS,我认为有必要说明一下,不然的话很可能会引起混淆
我认为有两个LBA的概念,一个是ATA层次上的 LBA ,也就是这个硬盘内部的可线性寻址的最大扇区数,我认为这就是这块硬盘的最大可用扇区数;而另一个 LBA 是指在BIOS层面上,也就是BIOS向OS报告的它的寻址模式。
同样,有两个CHS概念,一个是指
CHS模式 ,也就是BIOS的一种寻址方式;而另一个是
CHS参数 ,是所有模式下都要用到的柱面、磁头、扇区数的参数。
到此为止,我认为我们可以暂且得出一个结论,也就是我在表格下面的第一段话。对于这个结论我没有什么理论依据和实际实验来证明其正确性,只能通过纸面上的一些数据来“自圆其说”。关于两个LBA和CHS的概念也是我自己分析的结论,同样没有什么理论基础。现在,尽管还有许多细节问题没有搞清楚,比如 PC Tools 5.0 的逻辑定位问题,但我认为我们还是取得了一定的进展。真是非常感谢所有参与讨论和关注此问题的朋友,特别是 fdsiuha 。同时也希望有更多的朋友能提供试验数据和提出理论假设,也希望有功底深厚的大师能不惜赐教。
[
Last edited by DOSforever on 2005-11-1 at 16:48 ]