我可以更喜欢LBA而不是操作系统开发中的CHS



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

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

  • chs wording
  • lba致辞

我读到CHS几乎所有BIOS都支持CHS,但问题在于它可以在最大的8GB解决,并且使用LBA纠正了此缺点。

说过,我想问一些问题:

问题1:

最好选择哪种方案?如果CHS,有什么办法可以在8GB标记上方访问?

问题2:

在lba中,我如何能够从(例如)分区4?

加载一个扇区

IE:我将如何找到第四个分区的起始块?


注意:场景发生在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。通常,硬盘驱动器上的第一个扇区是一个分区扇区,其中包括一个分区表(通常为其中4个),哪个是活动的。分区引导代码通常将自身重新定位(Microsoft重新定位到00000H:00600H),并在MBR中从活动分区中读取为00000H:07C00H:然后跳到MBR代码。

>

最新更新