在操作系统开发中,我可以更喜欢 LBA 而不是 CHS 寻址吗?

Can I prefer LBA to CHS addressing in Operating System Development?

我正在开发一个简约的操作系统。我创建了一个在 Master Partition Table 中查找活动分区的 MBR。我面临的问题是 将扇区加载到内存中

关于加载扇区,我遇到了两种方案,

我读到几乎所有的 BI 都支持 CHSOS,但问题在于它最多可以解决 8GB 并且这个缺点已通过 LBA 纠正。

说了这么多,想请教几个问题:

问题一:

选择什么方案最好?如果是 CHS,有什么办法可以访问 8GB 以上的内存吗?

问题二:

在 LBA 中,我如何才能从(比如说)分区 4 加载一个扇区?

即:我怎样才能找到第4个分区的起始块号?


注:场景发生在16 bit real mode


谢谢。

OS : Ubuntu

编译器:CC

使用BIOS扩展读取功能,它使用64位LBA(Sata驱动器将使用LBA的低48位)。

INT 13 - IBM/MS INT 13 Extensions - EXTENDED READ
       AH = 42h
       DL = drive number
       DS:SI -> disk address packet
Return: CF clear if successful
           AH = 00h
       CF set on error
           AH = error code
           disk address packet's block count field set to number of blocks
             successfully transferred

Format of disk address packet:
Offset Size     Description
 00h   BYTE     10h (size of packet)
 01h   BYTE     reserved (0)
 02h   WORD     number of blocks to transfer
 04h   DWORD    -> transfer buffer
 08h   QWORD    starting absolute block number  (LBA)

问题提到了MBR。通常,硬盘驱动器上的第一个扇区是一个分区扇区,其中包含 table 个分区(通常为 4 个),并且其中一个是活动的。分区引导代码通常会自行重定位(微软重定位到00000h:00600h),将活动分区的MBR读入00000h:07c00h,然后跳转到MBR代码