33-36 : 深入浅出x86中断机制

背景

我们知道使用0x10号中断,可以在屏幕上打印一个字符。

33-36 : 深入浅出x86中断机制_第1张图片

问题

系统中的 中断 究竟是什么?

生活中的例子

来看一个生活中例子:

33-36 : 深入浅出x86中断机制_第2张图片

33-36 : 深入浅出x86中断机制_第3张图片

33-36 : 深入浅出x86中断机制_第4张图片

小狄的工作方式

  1. 在处理紧急事务的时候,不回应同事的技术求助。
  2. 老板的召唤必须回应,不能耽搁。
  3. 处理完老板的召唤后,继续处理之前的紧急事务。
  4. 同事的技术求助继续不回应

中断的概念和意义

33-36 : 深入浅出x86中断机制_第5张图片

处理器与外设的拓扑结构

33-36 : 深入浅出x86中断机制_第6张图片

中断与外设

  1. 中断是一种处理器与外设进行通信的机制。
  2. 用于 “通知”处理器外部有 “重要事情”发生
  3. 一般情况下,中断需要被处理器响应

本质

操作系统是中断驱动的死循环。

33-36 : 深入浅出x86中断机制_第7张图片

处理器、中断、操作系统内核之间的关系。

中断的分类

33-36 : 深入浅出x86中断机制_第8张图片

  1. 外部中断:由外部设备发出来的中断,比如:网卡、键盘、鼠标等。这些外部设备向处理器发出来的中断,都叫做外部中断。
  2. 内部中断:由处理器自己内部发出来的中断。当然这些中断由代码产生的,所以说 也叫做软中段。异常:处理器是逐条逐条指令执行的,这个时候碰到了一个非法不合理的指令码,这个时候处理器知道怎么样去执行吗?当然不知道怎么去执行,所以处理器就报了一个异常。

33-36 : 深入浅出x86中断机制_第9张图片

33-36 : 深入浅出x86中断机制_第10张图片

处理器的外部中断

33-36 : 深入浅出x86中断机制_第11张图片

处理器的内部中断

33-36 : 深入浅出x86中断机制_第12张图片

问题

处理器接受到中断请求之后,如何具体的对中断进行处理?就是中断服务程序(Interrupt Service Routine)

中断服务程序(Interrupt Service Routine)

33-36 : 深入浅出x86中断机制_第13张图片

中断处理流程

33-36 : 深入浅出x86中断机制_第14张图片

Linux中断处理方式

33-36 : 深入浅出x86中断机制_第15张图片

33-36 : 深入浅出x86中断机制_第16张图片

思考

中断与对应的服务程序间如何建立关联?在代码层面如何进行转移?

实模式下的中断处理

-使用中断向量表映射不同中断与中断服务程序

-中断向量表(Interrupt Vector Table)

        起始于物理地址0,长度为 1KB

        每个单元4字节,连续256个单元

        每个单元存放一个中断服务程序的入口地址

中断向量表就是一个指针数组,这个数组里面存放的是:中断程序的入口地址。

中断向量表(IVT)

33-36 : 深入浅出x86中断机制_第17张图片

中断响应与处理

33-36 : 深入浅出x86中断机制_第18张图片

  1. 产生中断,外部设备向CPU发送一个中断,通过 INTR引脚,向处理器发送一个中断请求。
  2. 处理器通过 INTA 这个引脚 去响应这个中断信号。
  3. 外部设备将 中断向量 TYPE 发送给处理器。
  4. 处理器有了中断向量 TYPE,那么就去 查找中断向量表 IVT
  5. 在中断向量表中,就可以查找到 对应的中断服务程序的地址。
  6. 有了中断服务程序的地址,那么直接 CALL就行

思考?

实模式下的中断向量表(IVT) 和 中断服务程序(ISR) 需要操作系统内核来建立吗?

在实模式下,中断向量表(IVT) 和 中断服务程序(ISR) 并不是由操作系统内核来建立的。

实模式下的中断处理

计算机上电

33-36 : 深入浅出x86中断机制_第19张图片

BIOS做的事情

33-36 : 深入浅出x86中断机制_第20张图片

33-36 : 深入浅出x86中断机制_第21张图片

保护模式下的中断处理

33-36 : 深入浅出x86中断机制_第22张图片

中断门描述符(Interrupt Gate)的定义

33-36 : 深入浅出x86中断机制_第23张图片

中断描述符表(IDT)

33-36 : 深入浅出x86中断机制_第24张图片

保护模式下的中断处理

33-36 : 深入浅出x86中断机制_第25张图片

33-36 : 深入浅出x86中断机制_第26张图片

33-36 : 深入浅出x86中断机制_第27张图片

注意事项

33-36 : 深入浅出x86中断机制_第28张图片

思考

不同外设如何向处理器发送中断信号?当多个外设同时产生中断时,如何进行处理?

中断代理-8259A

想象中的连接方式

33-36 : 深入浅出x86中断机制_第29张图片

中断处理器的代理(8259A)

33-36 : 深入浅出x86中断机制_第30张图片

8259A是专门为处理器设计的中断管理芯片

33-36 : 深入浅出x86中断机制_第31张图片

8259A芯片的内部结构

33-36 : 深入浅出x86中断机制_第32张图片

33-36 : 深入浅出x86中断机制_第33张图片

33-36 : 深入浅出x86中断机制_第34张图片

中断响应流程

33-36 : 深入浅出x86中断机制_第35张图片

8259A工作方式

33-36 : 深入浅出x86中断机制_第36张图片

33-36 : 深入浅出x86中断机制_第37张图片

8259A的数据连接方式

33-36 : 深入浅出x86中断机制_第38张图片

中断优先方式

33-36 : 深入浅出x86中断机制_第39张图片

中断嵌套方式

33-36 : 深入浅出x86中断机制_第40张图片

中断屏蔽方式

33-36 : 深入浅出x86中断机制_第41张图片

中断结束方式

33-36 : 深入浅出x86中断机制_第42张图片

8259A控制编程

8259A够用吗?

33-36 : 深入浅出x86中断机制_第43张图片

33-36 : 深入浅出x86中断机制_第44张图片

问题:如何具体的设置和控制 8259A ?

33-36 : 深入浅出x86中断机制_第45张图片

ICW1:初始化8259A连接方式和中断触发方式

33-36 : 深入浅出x86中断机制_第46张图片

ICW2:设置起始中断向量(IRQ0 对应的中断向量)

33-36 : 深入浅出x86中断机制_第47张图片

ICW3:指定主从 8259A 的级联引脚

33-36 : 深入浅出x86中断机制_第48张图片

ICW4:初始化 8259A 连接方式 和 中断触发方式

33-36 : 深入浅出x86中断机制_第49张图片

实例分析

你可能感兴趣的:(#,x86中断)