注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本课时主要介绍8259中断控制器的配置。由于其涉及的具体芯片细节较多,所以课程中简化了讲解。下面的文档也只概述相关的重点。

8259功能和结构

8259用于管理中断,最大只支持对8个中断进行管理。具体来说,外设的中断请求信号连接到IRQ?,然后再由8259进行处理,最后通过INT信号传递给处理器,产生中断请求信号。处理器在收到INT的请求信号后,跳转到对应的中断处理程序中执行。
image.png
硬件部分上,计算机内部已经配置完毕,使用两片8259级联,最多管理15种类型的中断。我们没有办法进行干预,所以只能关注对其相应的寄存器进行配置。
image.png
在对寄存器初始化时,需要分配对上述中的master和slave进行初始化。其中master对应的端口起始地址为0x20,slave对应的端口起始地址为0xA0。芯片的手册中给出了初始化流程和相应的寄存器格式说明。
image.png
8259的工作模式较为复杂,本课程只做了非常简单的配置,不考虑中断嵌套、优先级等问题。具体配置如下:

  • 主片:边缘触发,级联、起始中断序号为0x20,IRQ2上有从片,普通全嵌套、非缓冲、非自动结束、8086模式
  • 从片:边缘触发,级联、起始中断序号为0x28,连接到主片的IRQ2上,普通全嵌套、非缓冲、非自动结束、8086模式

具体寄存器格式,见下方参考资料中的手册。

参考资料

  • 8259数据手册(在课程提供的资料下载中有8259.pdf文档)
  • osdev关于8259的文档:https://wiki.osdev.org/PIC
  • LINUX内核完全剖析:基于0.12内核 第180页(在课程提供的资料下载中有pdf文档)