将 BIOS 中断用于保护模式是好是坏?
Is it good or bad to use BIOS interrupts for protected mode?
我基于 MikeOS 引导加载程序 (Link) 制作了一个非常基本的引导加载程序。我正在使用 NASM 和 QEMU 进行组装和测试。我正在尝试为我的 OS 启用保护模式。因此,我开始在网上搜索更多详细信息并了解更多关于 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 ) )
据我了解,在保护模式下对 all
程序使用太多 BIOS 中断是不可取的,对吗?如果我是对的,那么我的引导加载程序也使用许多 BIOS 中断在屏幕上打印字符……这是好是坏?如果不好,为什么?我需要做哪些更改才能创建打印字符程序?
因为我想把我的 OS 设为保护模式,所以我很困惑是否应该使用 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 ) )
这些开发人员如何开发这些软件?这些软件是用汇编还是其他任何语言制作的?他们需要深入的硬件软件知识吗?如果可以在我的 OS 中制作这些软件,那么我正在考虑添加这些软件......是否建议这样做,或者我应该只使用 BIOS 中断?
您可以在实模式下使用 BIOS 中断,但在进入保护模式或长模式后,您将无法像在实模式下那样使用中断.据我所知,这实际上是为了安全;保护模式的全部意义在于加强安全性和稳定性(也消除了实模式中存在的许多限制),而长模式也比保护模式有其自身的一系列好处(因为长模式适用于 64 位).
您有多种选择:
- 编写内核模式设备驱动程序以手动实现对功能的支持,而不是依赖 BIOS 中断功能。
- 通过虚拟 8086 实现实现对实模式仿真的支持。我相信 Windows 的早期版本(真的,真的很早的版本)依赖于此,显然这就是为什么一些非常旧的版本有一些冻结错误,但我无法验证这是否确实如此,也无法验证微软是否仍在使用任何东西的虚拟 8086 实现。无论如何,虚拟 8086 实现将允许您执行 BIOS 中断,尽管您的内核处于保护模式,因为您可以模拟实模式。
- 从保护模式切换回实模式并返回。在某些 Intel 文档中应该有更多关于此的信息,并且在线上有一些信息(例如 OS Dev Wiki,尝试搜索它),但这可能会导致问题,具体取决于操作系统内核的工作方式。至少可以说,您需要小心处理它……它很容易把事情搞砸,而且考虑到您已经提出问题,以稳定的方式实施可能真的很棘手。
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
我基于 MikeOS 引导加载程序 (Link) 制作了一个非常基本的引导加载程序。我正在使用 NASM 和 QEMU 进行组装和测试。我正在尝试为我的 OS 启用保护模式。因此,我开始在网上搜索更多详细信息并了解更多关于 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 ) )
据我了解,在保护模式下对 all
程序使用太多 BIOS 中断是不可取的,对吗?如果我是对的,那么我的引导加载程序也使用许多 BIOS 中断在屏幕上打印字符……这是好是坏?如果不好,为什么?我需要做哪些更改才能创建打印字符程序?
因为我想把我的 OS 设为保护模式,所以我很困惑是否应该使用 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 ) )
这些开发人员如何开发这些软件?这些软件是用汇编还是其他任何语言制作的?他们需要深入的硬件软件知识吗?如果可以在我的 OS 中制作这些软件,那么我正在考虑添加这些软件......是否建议这样做,或者我应该只使用 BIOS 中断?
您可以在实模式下使用 BIOS 中断,但在进入保护模式或长模式后,您将无法像在实模式下那样使用中断.据我所知,这实际上是为了安全;保护模式的全部意义在于加强安全性和稳定性(也消除了实模式中存在的许多限制),而长模式也比保护模式有其自身的一系列好处(因为长模式适用于 64 位).
您有多种选择:
- 编写内核模式设备驱动程序以手动实现对功能的支持,而不是依赖 BIOS 中断功能。
- 通过虚拟 8086 实现实现对实模式仿真的支持。我相信 Windows 的早期版本(真的,真的很早的版本)依赖于此,显然这就是为什么一些非常旧的版本有一些冻结错误,但我无法验证这是否确实如此,也无法验证微软是否仍在使用任何东西的虚拟 8086 实现。无论如何,虚拟 8086 实现将允许您执行 BIOS 中断,尽管您的内核处于保护模式,因为您可以模拟实模式。
- 从保护模式切换回实模式并返回。在某些 Intel 文档中应该有更多关于此的信息,并且在线上有一些信息(例如 OS Dev Wiki,尝试搜索它),但这可能会导致问题,具体取决于操作系统内核的工作方式。至少可以说,您需要小心处理它……它很容易把事情搞砸,而且考虑到您已经提出问题,以稳定的方式实施可能真的很棘手。
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