gpt4 book ai didi

x86 - (写内核)如何修改中断描述符表?

转载 作者:行者123 更新时间:2023-12-02 03:23:20 24 4
gpt4 key购买 nike

我正在编写一个小内核,只是为了稍微研究一下底层的东西。现在,它在 Virtual Box 中启动,我可以在屏幕上显示文本、分配一些内存以及其他非常基本的事情。它是用 C++ 和一点汇编语言编写的。

我想探索的事情之一是多任务处理背后的机制。据我了解,事情是这样的:

  1. 内核初始化中断描述符表,以便定期(例如一毫秒)发出中断并调用内核中定义的例程。
  2. 当调用例程时,它可以决定将代码/数据段和堆栈指针设置为另一个程序上下文的代码/数据段和堆栈指针,即“上下文切换”。

所以,它在概念上看起来很简单,但我知道细节会更加复杂。我在网上找到了一些东西,但术语差异很大,并且这些示例似乎来 self 没有的上下文(例如来自 Linux 内核)。

但是,设置描述符表的方法似乎是这样的:

  1. 向 PIC 发送一些数据(outb 等)以对其进行初始化。
  2. 在内存中准备一个中断表,其中包含指向所需例程的函数指针,请注意这些函数能够充当信号处理程序。
  3. 使用 lidt 加载表格。

但是,我找不到太多关于具体做这些事情的信息,或者这是否正确。有人有资源供困惑的内核编写者使用吗?

最佳答案

当您的 PC 启动时,BIOS 对 PIC 进行编程,将 IRQ0 到 IRQ15 绑定(bind)到 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”(Ralf Brown 的中断列表)可能会有很大帮助。

Intel 和 AMD CPU 文档中描述了 IVT/IDT 设置。一切都在那里。不是最令人愉快的阅读,而是最详细和权威的。

有许多自制操作系统爱好者等的网站,您可以在其中找到更多详细信息和代码片段。

关于x86 - (写内核)如何修改中断描述符表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com