操作系统实验七:保护模式之中断测试实验

本文档详述了操作系统实验中的中断概念,包括中断门、陷阱门和中断向量号的区分,以及如何处理自动和被动产生的中断。实验中涉及8259A可编程中断控制器,介绍了其工作原理,并通过编写代码实现中断描述符表(IDT)和加载中断。实验流程包括切换到保护模式、设置GDT、加载IDT以及进行中断测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我对中断的理解:

    中断,顾名思义,就是在遇到特殊的情况时,停下当前正在做的事情,转去干其他(根据特殊情况预先设计好的)事情,完成后(并不一定非要)再继续之前做的事情。

   首先说说“去干其他(根据特殊情况预先设计好的)事情”。

   我们可以预先设计好256件事情(处理函数),然后使用0~255这256个编号(中断向量号)表示代指。“事情”根据是否可以再次打断(中断),分为中断门(不可以被打断)和陷阱门(可以再次被打断)。

   下面解释一下所谓的“遇到特殊的情况”,这个特殊的情况按照触发类型可以分为两类:

   自动产生:自动产生的意思就是程序自己根据需要自己主动触发的中断,也就是使用int指令+中断号触发的。对于所有的256个中断,都可以使用int指令触发。   

   被动产生:被动产生,就是系统硬性规定的,在遇到某种指定的情况,就触发对应中断向量号的中断。
具体而言如下表:(摘自《自己动手写内核系列_skelix》天衣有缝,有稍微修改)

中断向量号   触发原因
0x00           除零错
0x01           调试异常
0x02           非可屏蔽中断 (NMI)
0x03           断点 (INT 3 指令)
0x04           溢出 (INTO 指令)
0x05           越界 (BOUND 指令)
0x06           无效的指令
0x07           无协处理器
0x08           双重错误
0x09           协处理器越界
0x0A           无效的 TSS
0x0B           段不存在
0x0C           栈溢出
0x0D           通用保护异常(内存引用或其他检查保护),Windows 9x 蓝屏就是它的杰作
0x0E           页错误
0x0F           Intel 保留
0x10           协处理器错误
0x11-0x19      Intel 保留

需要说明的有两点:
    一.0x11~0x19这12个中断向量号, Intel预定了,但是并没有实际使用上,但将来可能会用到。因此我们可以在编写操作系统的使用直接拿来用,但是这样会有一定风险,要是Intel的下一代产品里使用了这些中断向量号,我们想要兼容它,就不得不修改代码将这几个中断向量号让出来。
    二.上表中触发的原因,基本都是程序运行时发生错误产生的(0x02号中断除外),可以称之为内部中断。与之相对应的称作外部中断的东西,就是由于计算机硬件(键盘,鼠标等)触发的。这些中断是可以屏蔽掉(忽略掉)的。想要响应这些中断,也需要分配相应的中断向量号才行。具体的内容就是下面要讲到的可编程中断控制器8259A。


可编程中断控制器8259A:

8259A分自从两块,每一块都可以接收8个不同触发事件的信号,具体如下:(摘自《自己动手写操作系统》于源)

主 8259A
序号        触发源头
IRQ0        时钟
IRQ1        键盘
IRQ2        来自 从 8259A
IRQ3        串口2
IRQ4        串口1
IRQ5        LPT2
IRQ6        软盘
IRQ7        LPT1

从 8259A
IRQ8        实时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值