【问题标题】:Writing disk sector, numbers of sectors to write question写磁盘扇区,写扇区数问题
【发布时间】:2019-12-05 06:00:52
【问题描述】:

我正在尝试创建自己的非常基本的操作系统,并且我正在尝试弄清楚磁盘的写入和读取是如何工作的。 我使用this website 作为参考。

如果每个磁道的扇区数为 17,为什么 AL 会上升到 128? 如果我将 AL 设置为 20,将 CL 设置为 1 并写入一个 (512 * 19) 字节的字符串,因为第 18 和 19 扇区不存在,那么最后的 1024 字节将去哪里?

【问题讨论】:

  • 它将转到下一个磁头的扇区 1,然后是下一个柱面。阅读c/h/s disk geometry。此外,如果可能,请使用 LBA。
  • @Jester 假设 SPT 为 18,可能在一张可能不支持扩展磁盘功能/LBA 的软盘上(尽管其他类型的驱动器会支持它-CDROM/硬盘等)。多轨不能保证在真实硬件上跨柱面边界工作,尽管模拟器要宽容得多。
  • 虽然大多数软盘介质是每磁道 18 和 9 个扇区,但也可以有更多(微软的 MDF 格式是每磁道 21 个扇区),并且硬盘上每磁道的扇区数可以更高.写入(或读取)的扇区数限制为 128 与 PC 上的 x86 20 位段:偏移分段(在实模式下)有关。一个段可以寻址 64KiB(65336 字节)。 128 * 512(每扇区字节)= 65536。
  • 该文档似乎有误。扇区号可以是 1 到 63(含),而不是 1 到 17(含)。每个磁道有 18 个扇区的磁盘将允许 1 到 18(含)之间的值

标签: assembly x86-16 bios osdev


【解决方案1】:

如果您要求写入“N 个扇区,从 {柱面、磁头、扇区} 的扇区开始”并且您要求写入的扇区数在不同的磁道上;那么:

  • 对于某些计算机上的某些设备; BIOS支持“多轨”,当你到达上一轨结束时会自动切换到下一轨

  • 对于某些计算机上的某些设备; BIOS不支持“多轨”,当你到达上一条轨道的末尾时会返回错误

请注意,该 BIOS 功能的其他(可能更好)引用(例如 http://www.ctyme.com/intr/rb-0608.htm )没有说明 128 个扇区的限制;并且很可能(在某些情况下)您可以写入 255 个扇区。

另请注意,对于软盘有时(尤其是对于不太常见的媒体格式 - 例如“1680 KiB”格式),BIOS 不知道磁道上有多少个扇区(它只是将命令推送到软盘控制器并报告软盘控制器返回的任何错误),因此不支持多轨。对于这些情况,我隐约记得 BIOS 数据区域中的某种“驱动器参数表”,该软件(例如古代 MS-DOS)篡改以纠正 BIOS 使用的信息(使用来自“BPB”结构的值软盘)。

也没有针对磁盘更改的通知/指示/保护。这意味着如果用户弹出软盘并在驱动器中放入不同的软盘,您将不知道,您的软件会在不知道的情况下丢弃错误的软盘。

最后(由于最大大小限制)对于硬盘驱动器,在 1990 年代旧功能已被弃用,并被一组较新的磁盘 IO 功能(使用 64 位 LBA 地址且不使用 CHS 寻址)取代) 称为“int 0x13 扩展”。软盘不会发生这种情况。所以你最终需要为不同类型的设备使用不同的代码(使用不同的功能)。

当然,BIOS 从来都不是真正的正式标准(更像是一群随机制造商试图相互模仿的集合);现在软盘和BIOS都死了(由CD和USB闪存代替,由UEFI代替);所以所有的“复古计算恐怖”都可以(并且已经被许多人)遗忘了;现在很难找到任何最新信息(例如影响各种计算机的“BIOS 错误”列表)。

【讨论】:

  • 我认为值得注意的是,Multitrack 不能保证跨柱面边界工作,但前提是轨道在同一个柱面上。许多模拟器不在乎,但在真实硬件上,通常情况下多轨读取跨柱面会失败。
  • @MichaelPetch:我总是将我的读/写分成“仅单轨”(然后“仅当错误太多时才回退到单扇区”以增加最终成功的机会- 软盘是出了名的不可靠)。
  • 同意,保持读取到同一磁道内(避免多磁道)通常是最好的选择(无论是在最坏的情况下读取一个扇区还是计算磁道上剩余的扇区数并阅读那么多)
  • 我注意到他链接到的文档似乎是错误的。它说 CL(扇区号)中的值是 1 到 17。应该是 1 到 63。RBIL 是正确的。我知道他为什么一直在问题中谈论“17”。
  • 注意:我记得“HelpPC”是一个提供超链接帮助系统的 DOS 实用程序。我认为它在 1990 年代(当 Internet 和 HTML 变得普遍时)被放弃了,但看起来有人通过将旧实用程序的内容转换为 HTML 来回收它。当然,RBIL 也是如此(实际的软件包带有用于浏览原始文本信息且没有 HTML 页面的实用程序)。
猜你喜欢
  • 2012-09-02
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2010-12-17
  • 1970-01-01
  • 2014-12-21
  • 2019-01-29
相关资源
最近更新 更多