【问题标题】:Which addressing mode to be used to access disk?访问磁盘使用哪种寻址方式?
【发布时间】:2017-05-02 17:57:57
【问题描述】:

我正在学习操作系统开发,并且处于初级阶段。我创建了一个简单的引导加载程序。要访问磁盘上的其他文件(例如 HDD 或 USB 驱动器),我应该使用哪种寻址模式?(CHS 或 LBA 或 INT 13h 扩展名)。

这些寻址模式中哪一种是非常有效的(也就是说,可以用于大多数驱动器)?

谢谢

【问题讨论】:

  • 哪种寻址模式?? INT 13h BIOS 函数对文件系统一无所知,只知道原始磁盘 I/O。您正在编写一个必须实现文件系统的操作系统。
  • 那么,我应该使用什么?

标签: assembly x86 kernel bootloader disk-access


【解决方案1】:

首先,INT13h 扩展是 API 的扩展,而不是 HD 寻址方法。


您必须确定是使用 BIOS 还是直接访问硬件。
使用 BIOS 是不切实际的,因为它提供 16 位接口。但是,它非常易于使用。在这种情况下,您将使用 LBA 作为寻址方法。

LBA 是 CHS,就像弧度是度数一样。 这是一个更自然的单位,它打破了 504 MiB 和 7.9 GiB 的限制。 有little reason to use CHS。 CHS 是 HDD 在公共市场上传播之前的历史产物。

如果您打算使用直接硬件访问,那么您只能使用 LBA。在撰写本文时,当前的 ATA/ATAPI 8 Command Set 已弃用 CHS:

在标准 ATA/ATAPI-5 及更早版本中,定义了 CHS 转换。此翻译已过时,但如果 实施它应按照 ATA/ATAPI-5 中的定义实施。

但是,通过直接硬件访问来访问磁盘还没有完全实现,您至少需要一个基本的 PCI/PCIe 或 USB 总线驱动程序来访问磁盘控制器,一个主机控制器驱动程序(可以是 IDE , AHCI, NVMe 用于 PCI/PCIe 设备)向磁盘和驱动程序发出命令,以实现这些命令使用的协议(例如 SCSI and variantsATA/ATAPIMMCUMS 等等开)。

所以我相信你会使用 INT13h 扩展,在这种情况下,最好的寻址方法是 BIOS 提供的 64 位 LBA。

【讨论】:

  • 如果您使用 BIOS 读取真正的软盘介质,大多数控制器不支持软盘设备上的 LBA(通过扩展 BIOS 服务)。我不会说绝对没有理由。我在活动系统中仍然有一个非 USB 软盘驱动器,它不支持软盘上的 LBA。从技术上讲,如果您知道您的代码将在标准软盘介质上运行,那么使用 CHS 可能是一个合理的选择。
  • 好点@MichaelPetch!谢谢,我根据您的见解更新了答案。
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 2016-12-10
  • 2014-03-11
  • 1970-01-01
  • 2014-11-13
  • 2010-10-20
  • 2011-05-23
  • 2017-05-11
相关资源
最近更新 更多