为什么需要汇编来启动任何操作系统内核

2024-02-03

我正在读书如何编写一个简单的操作系统 http://mikeos.berlios.de/write-your-own-os.html,其中说:

对于您的第一个操作系统,您最好坚持使用 MikeOS 中使用的汇编语言。它更加冗长且不可移植,但您不必担心编译器和链接器。除了,你需要一些汇编来启动任何操作系统.

Why is assembly启动内核所需的代码?为什么不只是c code?

我在一些实现中看到的是assembly文件仅调用外部定义的某个函数c文件除了设置一些幻数之外。

汇编的使用是否与处理真实的物理内存而不是处理虚拟内存的抽象有关?

EDIT

程序集是否用于加载内核text-section讲话0x100000真实记忆?


除了 dwelch 关于进行初始设置的回答之外,还有一些指令和操作非常特定于处理器架构,不属于 C 等可移植语言。

例如,在 x86 上您需要启用保护模式 http://en.wikipedia.org/wiki/Protected_mode or 长模式 http://en.wikipedia.org/wiki/Long_mode,你需要设置一个中断描述符表 http://en.wikipedia.org/wiki/Interrupt_Descriptor_Table,你需要设置一个全局描述符表 http://en.wikipedia.org/wiki/Global_Descriptor_Table- 其中每一项都涉及专门的指令,仅当您拥有 x86 CPU 时才有意义。将这些特定于 Intel 的指令放入在其他 CPU 上运行时可能不需要它们的编程语言中是没有意义的。当然,其他 CPU 也有自己的相同概念形式,但这些概念根本不适用于 x86。

内核中汇编的另一个常见用途是原子操作 http://en.wikipedia.org/wiki/Compare-and-swap- 尽管这些已经开始进入高级语言规范(我想到了 C++11)。即便如此,这些的实现将需要使用汇编,并且内核将希望拥有完全的控制权(您不能使用用户模式实现可能使用的一些更高级别的等待原语——因为在新的内核中,这些抽象不会尚不存在或什至以相同的形式存在)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么需要汇编来启动任何操作系统内核 的相关文章

随机推荐