在操作系统开发中,我可以更喜欢 LBA 而不是 CHS 寻址吗?
Can I prefer LBA to CHS addressing in Operating System Development?
我正在开发一个简约的操作系统。我创建了一个在 Master Partition Table
中查找活动分区的 MBR。我面临的问题是 将扇区加载到内存中 。
关于加载扇区,我遇到了两种方案,
- CHS 寻址
- LBA 寻址
我读到几乎所有的 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代码
我正在开发一个简约的操作系统。我创建了一个在 Master Partition Table
中查找活动分区的 MBR。我面临的问题是 将扇区加载到内存中 。
关于加载扇区,我遇到了两种方案,
- CHS 寻址
- LBA 寻址
我读到几乎所有的 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代码