1

我正在创建一个读取分区表并加载可引导分区的第一个扇区的基本 MBR。我对 CHS 和 LBA 寻址模式感到困惑。我在一个教程中读到除了兼容性原因外,CHS 或多或少都没有使用。所以,我选择使用 LBA(INT 13h 扩展)。要加载驱动器的扇区,我必须从该分区的分区表中读取 CHS 值。只有这样我才能将其转换为 LBA 并将其存储在“磁盘地址包”中。

我的疑问是,分区表中的 CHS 每个是 1 个字节。我应该直接取这个值并将其转换为 LBA(或)我必须先将其转换为,

Cylinder = 10 bits
Sector   = 6 bits
Head     = 8 bits

然后将其转换为LBA?

注意:我的 MBR 必须能够访问 HDD 和 USB 上的扇区 - 这就是动机。

操作系统:Ubuntu

组装者:气体

4

1 回答 1

2

分区表条目使用 CHS 仅是为了向后兼容非常旧的操作系统。
它们还有 LBA 地址字段:

 
 
                    MBR分区表的格式

 
 

请注意,这里使用 LBA32,因此对分区大小和位置有限制。引用维基百科:

由于块地址和大小使用 32 位存储在 MBR 的分区表中,因此使用具有 512 字节扇区(实际或模拟)的驱动器的分区的最大大小和最高起始地址不能超过 2 TiB-512字节(2,199,023,255,040 字节或 4,294,967,295 (232−1) 个扇区 × 512 (29) 个字节/扇区)。[2] 减轻这种容量限制是开发 GPT 的主要动机之一。

CHS 寻址也是如此。
使用 CHS 字段的操作系统的大小限制约为 8 GiB。
因此,如果您想与它们兼容,则需要保持在该限制之下。


LBA <-> CHS的转换公式在网上很容易推导出或找到,可以根据扇区号(即LBA)来考虑,在创建分区条目时转换成CHS(或者使用默认的1023、255、63)用于分区的管对于 CHS 来说太大了)。

在行的底部,使用 LBA 字段。
或者去GPT

于 2016-12-21T09:59:20.280 回答