【发布时间】:2018-11-30 17:54:49
【问题描述】:
我已经基于 MikeOS 引导加载程序 (Link) 制作了一个非常基本的引导加载程序。我正在使用 NASM 和 QEMU 进行组装和测试。我正在尝试为我的操作系统启用保护模式。因此,我开始在网上搜索更多详细信息并了解有关 BIOS 中断的更多信息。我偶然发现了维基百科并阅读了一篇文章....
许多现代操作系统(如 Linux 和更新版本的 Windows)完全绕过内置的 BIOS 中断通信系统,更喜欢使用自己的软件直接控制连接的硬件。造成这种情况的最初原因主要是这些操作系统在保护模式下运行处理器,而调用 BIOS 需要切换到实模式并再次返回,并且切换到实模式很慢。但是,不切换到实模式也有严重的安全原因,并且 BIOS 代码在功能和速度上都有限制(来源:维基百科(Link))
维基百科的文章是这样说的
.....主要是这些操作系统在保护模式下运行处理器,而调用BIOS需要切换到实模式再返回,切换到实模式很慢......
(来源:维基百科(Link))
根据我的理解,在保护模式下对all 程序使用太多的BIOS 中断是不可取的,对吗?如果我是对的,那么我的引导加载程序还使用许多 BIOS 中断来在屏幕上打印字符……是好是坏?如果不好,为什么?以及创建打印字符程序需要进行哪些更改?
由于我想让我的操作系统进入保护模式,我很困惑是否应该使用 BIOS 中断?目前我制作了一个仅在屏幕上打印字符串的引导加载程序,目前我的引导加载程序中没有任何其他使用任何 BIOS 中断的功能。如果在保护模式下使用 BIOS 中断不好,当我在保护模式下加载我的内核时(当我制作它时:p)我应该如何处理打印字符串功能?
还有,
许多现代操作系统(如 Linux 和更新版本的 Windows)完全绕过内置的 BIOS 中断通信系统,更喜欢使用自己的软件直接控制连接的硬件。 (来源:维基百科(Link))
这些开发人员如何能够开发这些软件?这些软件是用汇编语言还是其他语言制作的?他们需要深厚的软硬件知识吗?如果可以在我的操作系统中制作这些软件,那么我正在考虑添加这些软件......是否建议这样做,或者我应该只使用 BIOS 中断?
【问题讨论】:
-
所以在你的头脑中编译它并编写执行这些存储的 NASM 代码。即,将其视为伪代码,显示您需要写入的内存。
-
很简单的伪代码;如果您完全可以阅读C语法。但是你可以用
gcc -c -Os直接编译它,然后用Agner Fog 的objconv反汇编器将它反汇编成一个NASM 函数。 agner.org/optimize/#objconv -
即使在 MS-DOS 时代,当程序确实在实模式下运行时,许多应用程序还是直接写入视频内存,因为即使不切换模式,使用 BIOS 也很慢。而在原始 PC/AT 中使用的 286 中,没有可用于离开保护模式的机器指令。要退出保护模式,您必须重置处理器(激活重置引脚)并重新开始。这就是“切换到实模式很慢”的起源。当后来的处理器有了更好的方法时,人们已经学会了如何在没有 BIOS 的情况下相处。
-
不过在旁注中。回到 DOS 时代,EMM386、QEMM /386(Quarterdeck) 等 386 个内存管理器的出现。DOS 通常作为虚拟 VM8086 任务运行,内存管理器在后台有一个 VM8086 监视器。
标签: assembly operating-system nasm interrupt bootloader