gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:22:37 25 4
gpt4 key购买 nike

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

Many modern operating systems (such as Linux and newer versions of Windows) bypass the built-in BIOS interrupt communication system altogether, preferring to use their own software to control the attached hardware directly. The original reason for this was primarily that these operating systems run the processor in protected mode, whereas calling BIOS requires switching to real mode and back again, and switching to real mode is slow. However, there are also serious security reasons not to switch to real mode, and the BIOS code has limitations both in functionality and speed ( Source: wikipedia ( Link ) )

维基百科上的文章是这么说的

.....primarily that these operating systems run the processor in protected mode, whereas calling BIOS requires switching to real mode and back again, and switching to real mode is slow......
( Source: wikipedia ( Link ) )

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

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

另外,

Many modern operating systems (such as Linux and newer versions of Windows) bypass the built-in BIOS interrupt communication system altogether, preferring to use their own software to control the attached hardware directly. ( Source: wikipedia ( Link ) )

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

最佳答案

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

您有多种选择:

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

If I'm right, then my boot loader also uses many BIOS interrupts to print characters on screen... Is it good or bad ?

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

回到讨论 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

关于assembly - 使用 BIOS 中断进行保护模式是好是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50967859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com