将BIOS中断用于保护模式是好是坏?

时间:2018-06-21 11:47:57

标签: assembly operating-system nasm interrupt bootloader

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

  

许多现代操作系统(例如Linux和Windows的较新版本)完全绕过内置的BIOS中断通信系统,宁愿使用自己的软件直接控制连接的硬件。最初的原因主要是这些操作系统在保护模式下运行处理器,而调用BIOS则需要切换到实模式并再次切换,而切换到实模式的速度很慢。但是,出于严重的安全原因,请不要切换到实模式,并且BIOS代码在功能和速度上都有局限性(来源:Wikipedia(Link))

维基百科上的文章说

  

.....主要是这些操作系统在保护模式下运行处理器,而调用BIOS则需要切换到实模式并再次切换,并且切换到实模式很慢...
  (资料来源:维基百科(Link))

根据我的了解,建议不要在保护模式下为all过程使用大量的BIOS中断,对吗?如果我是对的,那么我的引导加载程序还会使用许多BIOS中断来在屏幕上打印字符...是好是坏?如果不好,为什么?以及创建打印字符过程需要做哪些更改?

由于要将操作系统设置为保护模式,因此我是否应该使用BIOS中断感到困惑?目前,我只制作了一个引导加载程序,该引导加载程序在屏幕上显示字符串,而目前,我的引导加载程序中没有使用任何BIOS中断的任何其他功能。如果将BIOS中断用于保护模式不是很好,那么在以保护模式加载内核时(当使它成为:p时)我应该对打印字符串功能做什么?

  

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

那些开发人员如何开发这些软件?这些软件是用Assembly还是任何其他语言制作的?他们需要深入的软硬件知识吗?如果可以在我的OS中制作这些软件,那么我正在考虑添加这些软件。...建议这样做,还是仅使用BIOS中断?

1 个答案:

答案 0 :(得分:4)

您可以在实模式下使用BIOS中断,但是进入保护模式或长模式后,将无法以与实模式下相同的方式进行操作。据我所知,这实际上是为了安全;保护模式的全部目的是增强安全性和稳定性(还消除了实模式中存在的许多限制),并且长模式比保护模式还具有自己的一套好处(因为长模式适用于64位) )。

您有几种选择:

  1. 编写内核模式设备驱动程序以手动实现对该功能的支持,而不是依靠BIOS中断功能。
  2. 通过Virtual 8086实现为实模式仿真提供支持。我相信Windows的早期版本(确实是真正的早期版本)都依赖于此,显然这就是为什么某些真正的旧版本存在一些冻结错误的原因,但是我无法验证这是否确实如此,或者Microsoft是否仍使用Virtual 8086实现为了任何东西。无论如何,尽管您的内核处于“保护模式”,因为可以模拟“实模式”,所以使用Virtual 8086实现仍可以执行BIOS中断。
  3. 从保护模式切换回实模式并返回。在某些英特尔文档中应该有关于此的更多信息,并且在线上有一些相关信息(例如,OS Dev Wiki,请尝试搜索它),但这可能会导致问题,具体取决于您操作系统的内核的工作方式。您至少要小心谨慎,至少可以说的...将事情弄糟,考虑到您所提出的问题,以稳定的方式实现它可能非常棘手。
  

如果我是对的,那么我的引导加载程序还会使用许多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