我正在编写一个小内核,只是为了解决一些低级别的问题。现在,它在Virtual Box中启动,我可以在屏幕上显示文本,分配一些内存,以及其他非常基本的东西。它是用C ++和一点点asm编写的。
我想探索的一件事是多任务背后的机制。据我了解,它是这样的:
所以,它在概念上似乎很简单,但我知道细节会更加毛茸茸。我发现了一些在线的东西,但是术语变化很大,而且这些例子似乎来自我没有的上下文(比如在Linux内核中)。
但是,设置描述符表的方式似乎是这样的:
outb
以及什么不是)以初始化它。lidt
。但是,我找不到具体做这些事情,或者这是否正确。有没有人为困惑的内核编写者提供资源?
答案 0 :(得分:6)
当您的PC启动时,BIOS会对PIC进行编程,使IRQ0到IRQ15绑定到int 8到int 0Fh和int 70h到int 77h。这对于实际地址模式是可以的,其中BIOS运行并且MSDOS工作。
但是在切换到保护模式时需要更改此映射,因为一些重要的例外是在int 8到int 0Fh(最值得注意的是,#GP,#SS,#PF)。您希望这样,因为您希望能够轻松区分来自定时器和实时时钟,键盘和鼠标,磁盘和I / O端口(串行和并行)的这些异常和硬件中断。
这可能是您已经概述的第一步。因此,在线查看" PIC中断重映射"或类似的东西。此外,下载8259芯片(PIC)的一些规格,以更好地了解您正在做什么以及它实际如何工作。 " HelpPC"是一个很好的旧参考,包含有关各种PC硬件的一些信息。
还有" PCGPE" (PC游戏编程百科全书)和" RBIL" (拉尔夫·布朗的中断名单)可能会有很多帮助。
IVT / IDT设置在Intel和AMD CPU文档中有所描述。它就在那里。不是最愉快的阅读,但最详细和权威。
有许多家庭酿造操作系统爱好者等网站,您可以在其中找到更多详细信息和代码片段。
答案 1 :(得分:6)
这个问题的答案太大了,不适合这里。我将建议两种能为您提供必要知识的资源:
如果您真的想了解这些内容,我建议您阅读OSDev中的文章,尝试自己编写所有内容。从启动,屏幕输出,pic和irq处理开始。如果您遇到困难,请使用本教程。