我正在编写一个小内核,只是为了在低层次的东西上徘徊一下。现在,它在Virtual Box中启动,我可以在屏幕上显示文本,分配一些内存以及其他非常基本的东西。它是用C++编写的,有点asm。(编写内核)如何修改中断描述符表?
有一个问题我想探索的东西背后的多任务机制。据我所知,它是这样的:
- 内核初始化中断描述符表,使中断周期性发出(例如毫秒),并调用内核定义的程序。
- 当程序被调用,它可以决定设置的代码/数据段和堆栈指针的那些另一个程序的上下文中,的“上下文切换”。
所以,它在概念上看起来很简单,但我知道细节会变得更加多毛。我发现了一些在线的东西,但是术语差别很大,并且这些示例似乎来自我没有的上下文(例如来自Linux内核)。
然而,设置描述符表的方式似乎是这样的:
- 一些数据发送到PIC(
outb
和什么,而不是)来初始化它。 - 准备中断表在内存中,与函数指针到你想要的,小心的功能是能够被信号处理程序例程。
- 用
lidt
加载表格。
但是,我无法找到很多具体的做这些事情,或者这是否是正确的。有没有人有困惑的内核作家资源?
有趣的问题,这里是一个很酷的社区:http://www.osdever.net/不是它直接回答你的问题,但有一些有用的信息。 – 2012-04-29 04:51:29
在osdev.org上可以找到更好的社区(包括论坛和wiki,以及种类相关的irc频道 - #osdev @ irc.freenode.net)。 – Griwes 2012-04-29 13:14:06