rov*_*ghn 13 x86 kernel osdev context-switch interrupt-handling
我正在编写一个小内核,只是为了解决一些低级别的问题.现在,它在Virtual Box中启动,我可以在屏幕上显示文本,分配一些内存,以及其他非常基本的东西.它是用C++和一点点asm编写的.
我想探索的一件事是多任务背后的机制.据我了解,它是这样的:
因此,它在概念上似乎很简单,但我知道细节会变得更加毛茸茸.我发现了一些在线的东西,但术语变化很大,而且这些例子似乎来自我没有的上下文(比如Linux内核中的内容).
但是,设置描述符表的方式似乎是这样的:
outb
以及什么不是)以初始化它.lidt
.但是,我找不到具体做这些事情,或者这是否正确.有没有人有一个困惑的内核作家的资源?
当您的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"(拉尔夫布朗的中断列表)可能会有很大帮助.
英特尔和AMD CPU文档中描述了IVT/IDT设置.一切都在那里.不是最愉快的阅读,但最详细和权威.
有许多家庭酿造操作系统爱好者等网站,您可以在其中找到更多详细信息和代码片段.