背景
我们知道使用0x10号中断,可以在屏幕上打印一个字符。
问题
系统中的 中断 究竟是什么?
生活中的例子
来看一个生活中例子:
小狄的工作方式
- 在处理紧急事务的时候,不回应同事的技术求助。
- 老板的召唤必须回应,不能耽搁。
- 处理完老板的召唤后,继续处理之前的紧急事务。
- 同事的技术求助继续不回应
中断的概念和意义
处理器与外设的拓扑结构
中断与外设
- 中断是一种处理器与外设进行通信的机制。
- 用于 “通知”处理器外部有 “重要事情”发生
- 一般情况下,中断需要被处理器响应
本质
操作系统是中断驱动的死循环。
处理器、中断、操作系统内核之间的关系。
中断的分类
- 外部中断:由外部设备发出来的中断,比如:网卡、键盘、鼠标等。这些外部设备向处理器发出来的中断,都叫做外部中断。
- 内部中断:由处理器自己内部发出来的中断。当然这些中断由代码产生的,所以说 也叫做软中段。异常:处理器是逐条逐条指令执行的,这个时候碰到了一个非法不合理的指令码,这个时候处理器知道怎么样去执行吗?当然不知道怎么去执行,所以处理器就报了一个异常。
处理器的外部中断
处理器的内部中断
问题
处理器接受到中断请求之后,如何具体的对中断进行处理?就是中断服务程序(Interrupt Service Routine)
中断服务程序(Interrupt Service Routine)
中断处理流程
Linux中断处理方式
思考
中断与对应的服务程序间如何建立关联?在代码层面如何进行转移?
实模式下的中断处理
-使用中断向量表映射不同中断与中断服务程序
-中断向量表(Interrupt Vector Table)
起始于物理地址0,长度为 1KB
每个单元4字节,连续256个单元
每个单元存放一个中断服务程序的入口地址
中断向量表就是一个指针数组,这个数组里面存放的是:中断程序的入口地址。
中断向量表(IVT)
中断响应与处理
- 产生中断,外部设备向CPU发送一个中断,通过 INTR引脚,向处理器发送一个中断请求。
- 处理器通过 INTA 这个引脚 去响应这个中断信号。
- 外部设备将 中断向量 TYPE 发送给处理器。
- 处理器有了中断向量 TYPE,那么就去 查找中断向量表 IVT
- 在中断向量表中,就可以查找到 对应的中断服务程序的地址。
- 有了中断服务程序的地址,那么直接 CALL就行
思考?
实模式下的中断向量表(IVT) 和 中断服务程序(ISR) 需要操作系统内核来建立吗?