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

时间:2017-03-14 13:18:05

标签: assembly operating-system kernel x86-16 bootloader

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

关于装载行业,我遇到了两个方案,

  • CHS致辞
  • LBA致辞

我读到几乎所有BIOS都支持CHS,但问题在于它可以解决最近8GB这个问题并且LBA已经解决了这个缺点。

说到这些,我想问一些问题:

问题1:

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

问题2:

在LBA中,我如何能够从(例如)分区4加载扇区?

ie:我如何能够找到第4个分区的起始块号?

注意:该方案发生在16 bit real mode

感谢。

操作系统:Ubuntu

编译器:CC

1 个答案:

答案 0 :(得分:2)

使用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代码。