使用 BIOS 中断进行保护模式是好是坏?

2 assembly operating-system interrupt nasm bootloader

我基于 MikeOS 引导加载程序(链接)制作了一个非常基本的引导加载程序。我使用 NASM 和 QEMU 进行组装和测试。我正在尝试为我的操作系统启用保护模式。因此,我开始在网上搜索更多详细信息并了解有关 BIOS 中断的更多信息。我偶然发现了维基百科并阅读了一篇文章......

许多现代操作系统(例如 Linux 和较新版本的 Windows)完全绕过内置 BIOS 中断通信系统,更喜欢使用自己的软件直接控制连接的硬件。最初的原因主要是这些操作系统以保护模式运行处理器,而调用 BIOS 需要切换到实模式并再次返回,而切换到实模式的速度很慢。然而,也有严重的安全原因不切换到实模式,并且 BIOS 代码在功能和速度上都有限制(来源:维基百科(链接))

维基百科上的文章说

.....主要是这些操作系统以保护模式运行处理器,而调用BIOS需要切换到实模式并再次返回,而切换到实模式很慢......
(来源:维基百科(链接))

根据我的理解,在保护模式下的程序中不建议使用太多BIOS中断all,对吗?如果我是对的,那么我的引导加载程序还使用许多 BIOS 中断在屏幕上打印字符......这是好是坏?如果不好,为什么?我需要进行哪些更改才能创建打印字符程序?

由于我想让我的操作系统进入保护模式,我很困惑是否应该使用 BIOS 中断?目前我已经制作了一个仅在屏幕上打印字符串的引导加载程序,目前我的引导加载程序中没有使用任何 BIOS 中断的任何其他功能。如果在保护模式下使用 BIOS 中断不好,那么当我在保护模式下加载内核时(当我创建它时:p),我应该如何处理打印字符串功能?

还,

许多现代操作系统(例如 Linux 和较新版本的 Windows)完全绕过内置 BIOS 中断通信系统,更喜欢使用自己的软件直接控制连接的硬件。(来源:维基百科(链接))

这些开发人员如何能够开发这些软件?这些软件是用汇编语言还是其他语言制作的?他们需要深厚的硬件软件知识吗?如果可以在我的操作系统中制作这些软件,那么我正在考虑添加这些...是否建议这样做,或者我应该只使用 BIOS 中断?

Imm*_*VBR 5

您可以在实模式下使用 BIOS 中断,但在进入保护模式或长模式后,您将无法像在实模式下那样使用 BIOS 中断。据我所知,这实际上是为了安全;保护模式的全部目的是增强安全性和稳定性(还消除了实模式中存在的许多限制),而长模式也比保护模式有自己的一系列好处(因为长模式适用于 64 位) )。

您有多种选择:

  1. 编写内核模式设备驱动程序以手动实现对该功能的支持,而不是依赖 BIOS 中断功能。
  2. 通过虚拟 8086 实现实现对实模式仿真的支持。我相信早期版本的 Windows(非常非常早期的版本)依赖于这一点,显然这就是为什么一些非常旧的版本有一些冻结错误,但我无法验证这是否确实如此,也无法验证 Microsoft 是否仍然使用虚拟 8086 实现为了任何东西。无论如何,虚拟 8086 实现将允许您执行 BIOS 中断,尽管您的内核处于保护模式,因为您可以模拟实模式。
  3. 从保护模式切换回实模式并返回。在一些英特尔文档中应该有更多关于此的信息,并且在线上有一些信息(例如操作系统开发维基,尝试搜索它),但这可能会导致问题,具体取决于操作系统内核的工作方式。至少可以说,你需要小心对待它......这很容易把事情搞砸,并且考虑到你已经提出了你的问题,以稳定的方式实施可能会非常棘手。

如果我是对的,那么我的引导加载程序还使用许多 BIOS 中断在屏幕上打印字符......这是好是坏?

如果您想在退出实模式(例如进入保护模式或长模式)后将字符打印到屏幕上,可以直接写入显存。只是让你知道。

回到讨论 BIOS 中断,这很好,因为在那个阶段您将处于实模式,这是允许您执行 BIOS 中断的地方。但是,如果您尝试在保护模式或长模式下执行此操作,它将无法工作(没有实模式仿真或暂时切换回实模式)。

BIOS 提供中断,让您能够依靠其内部功能来帮助您站稳脚跟,所以不,在实模式下使用 BIOS 中断也不错。

请参阅以下链接。

https://wiki.osdev.org/Real_Mode

https://wiki.osdev.org/Virtual_8086_Mode

https://en.wikipedia.org/wiki/Virtual_8086_mode

https://wiki.osdev.org/Protected_Mode

  • 关于第 2 点。你所说的冻结错误可能是Win9x 中常见的错误。不依赖于硬件中断(如视频中断)的 BIOS 调用并不是什么大问题,VM8086 任务非常适合(并且仍然)适合这项工作。当 BIOS 中断依赖于硬件中断(软盘驱动器、计时器、硬盘驱动器控制器等)时,就会出现问题。这些在 VM8086 任务中造成了问题,并且为了更加(但不是完全)稳定,通常必须阻塞。Int 13h(磁盘访问)对此尤其不利,这也是为什么 Windows 磁盘访问经常冻结 Win95 (6认同)
  • 只有当磁盘硬件的 32 位驱动程序可用并且可以在保护模式下运行时,情况才真正得到改善,从而消除了磁盘访问时 BIOS 中断的需要。 (6认同)