|
CHS模式对应的是真正的地址,而一般硬盘的磁头数为2或4,所以有了262/514M(按1024算为256/512M)的限制。
===================
LBA是硬盘FireWare挪用磁头数对超过1024柱面进行换算,虚拟出逻辑磁头号和逻辑柱面号。
=======
然而INT 13H的02和03号功能地址格式为—
DH=磁头号、CL的bit7—bit6=柱面号bit9—bit8 bit5-bit0=扇区号、CH柱面号的bit7—bit0,于是有了8.4G的限制。
***事实上分区表项1—3和5—7就是对应于此的***
=======
分区表项格式:
0:分区激活标志
1:开始磁头号
2~bit7—bit6:开始柱面号的bit9—bit8
bit5-bit0:开始扇区号
3:开始柱面号的bit7—bit0
4:分区使用的系统标记
5—7:结束地址(格式和1—3类似)
8—11:分区之前的扇区总数
12—15:分区所占的扇区总数
在早期DOS(和WINNT)的分区和格式化好像只对1—3和5—7进行解释,所以也就有了柱面号不能大于1023的情况和8.4G(按1024来算是8G)的限制。
后来的则优先对8—11进行优先解释,地址转换交给分区引导及它的BPB和操作系统,也就突破了8.4G限制。(对于8G以上它会把5-7填充为FE,FF,FF)
但它只用了4字节来表示,远远没有达到能支持LBA48(6字节)的标准,所以一定会有2TB的限制,这就是兼容的代价。
对Vista没研究,或许它已经改了(可能这就是它不再兼容FAT的缘故吧)。
====================
而扩展INT 13H使用的数据包格式:
WORD InfoSize; // 数据包尺寸 (26 字节)
WORD Flags; // 信息标志
DWORD Cylinders; // 磁盘柱面数
DWORD Heads; // 磁盘磁头数
DWORD SectorsPerTrack; // 每磁道扇区数
QWORD Sectors; // 磁盘总扇区数
WORD SectorSize; // 扇区尺寸 (以字节为单位)
很显然,INT 13H扩展可以读取的将是一个接近天文数据的容量2的32x32x32x16次方字节(2048D,目前最大也就定义到DB了)。
====================
然而不少早期的HDC可能为了节省成本,只用了28bits(和网上的说法有点不同的是nf2的HDC是支持LBA48的,现在的全乱转载,连错误也照抄@_@)来表示磁盘地址,于是有了137G(按1024来算是128G)的限制。
现在一般采用48bits,可访问2的48次方x512字节(128P),已经很大了,但比起扩展INT 13H来说依然是小太多了。
====================
INT 19H其实只对MBR有AA55H的限制,并没有分区表项的说法,分区表项实际上是操作系统为了兼容搞出来,等于是自我限制。
将来分区表项也许会用6字节表示分区位置,6字节表示分区长度(建议装有Vista的把MBR和NTFS分区的boot$传上来便于分析),这也许就是LBA48的本意吧,超过LBA48将是16字节分区表项的末日(也许该用32字节了)。
====================
linux的GPT格式不再是局限于分区表项,它使用后面的1个扇区来表达,早就突破的干干净净。
Vista分区表项好像不太一样(2T之内是一样的),据说采用混合格式的分区表项,另外FDISK不能创建大于2T的分区。
[ 本帖最后由 netwinxp 于 2008-5-20 01:22 PM 编辑 ] |
|