我正在编写一个小内核,只是为了深入了解一些底层的东西。现在,它能够在虚拟盒子中启动,并且我可以向屏幕显示文本,分配一些内存以及其他非常基础的功能。这个内核是用C++和一些汇编语言编写的。
其中我想探索的之一就是多任务机制的原理。据我所知,它大致如下:
- 内核初始化中断描述符表,以便定期发出中断(例如每毫秒)并调用内核中定义的例程。
- 当调用该例程时,它可以决定将代码/数据段和堆栈指针设置为另一个程序上下文的值,即“上下文切换”。
因此,概念上似乎很简单,但我知道细节会非常复杂。我在网上找到了一些资料,但术语差异很大,而且示例似乎来自我没有的上下文(比如从Linux内核中)。
但是,设置描述符表的方法似乎是这样的:
- 向PIC发送一些数据(例如`outb`等)进行初始化。
- 在内存中准备一个中断表,其中包含指向要使用的例程的函数指针,同时确保这些函数能够成为信号处理程序。
- 使用`lidt`加载该表。
但是,我找不到有关具体执行这些操作的信息,或者这是否正确。有没有资源可以提供给一个困惑的内核编写者呢?