我正在编写一个小内核,只是为了稍微了解一下低级的东西。现在,它在 Virtual Box 中启动,我可以在屏幕上显示文本、分配一些内存以及其他非常基本的事情。它是用 C++ 和一点 asm 编写的。
我想探索的一件事是多任务处理背后的机制。据我了解,它是这样的:
- 内核初始化中断描述符表,以便周期性地(例如毫秒)发出中断并调用内核中定义的例程。
- 当例程被调用时,它可以决定将代码/数据段和堆栈指针设置为另一个程序的上下文,即“上下文切换”。
所以,它在概念上似乎很简单,但我知道细节会变得更加复杂。我在网上找到了一些东西,但术语变化很大,而且这些例子似乎来自我没有的上下文(比如来自 Linux 内核)。
但是,设置描述符表的方式似乎是这样的:
- 将一些数据发送到 PIC(
outb
以及其他)以对其进行初始化。 - 在内存中准备一个中断表,其中包含指向所需例程的函数指针,注意这些函数能够成为信号处理程序。
- 用 加载表
lidt
。
但是,我找不到太多关于专门做这些事情的信息,或者这是否正确。有没有人有困惑的内核编写者的资源?