Linux内核源码中断机制

本文详细介绍了Intel x86处理器的中断和异常机制,包括256种中断向量的分类、中断控制器8259A的工作原理以及Linux内核对中断向量的分配。中断向量用于识别中断源,异常和非屏蔽中断不可屏蔽,而屏蔽中断的向量可编程。Linux使用中断向量0x80实现系统调用。此外,还讲解了中断描述符表IDT在实模式下的作用和门描述符的类型。
摘要由CSDN通过智能技术生成

一、中断向量
Intel x86系列微机共支持256种向量中断,为使处理器较容易地识别每种中断源,将它们从0–255编号,即赋予一个中断类型码n,Intel把这个8位的无符号整数叫做一个向量,因此也叫中断向量。

所有256种中断可分为两大类:异常和中断。异常又分为故障和陷阱,它们的共同特点是既不使用中断控制器,也不能被屏蔽。中断又分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI),所有I/O设备产生的中断请示(IRQ)均引起屏蔽中断,而紧急的事件(硬件故障)引起的故障产生非屏幕中断。

非屏障中断的向量和异常的向量是固定的,而屏蔽中断的向量可以通过对中断控制器的编程来改变。

Linux对256个向量分配如下:

  • 从0-31的向量对应于异常和非屏蔽中断;
  • 从32-47的向量分配给屏蔽中断;
  • 从48-255的向量用来标识软中断。Linux只用其中一个(128或0x80向量)用来实现系统调用。当用户态下的进程执行一条int Ox80汇编指令时,CPU就切换到内核态,并开始执行system_call()内核函数。

Linux内核源码中断机制配套视频教程

二、外设可屏蔽中断
Intel x86通过两片中断控制器8259A来响应15个外中断源,每个8259A可管理8个中断源。第1级(称主片)的第2个中断请示输入端,与第2级9258A(称从片)的中断输出端INT相连。通过图形描述如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

与中断控制器相连的每条线叫做中断线,要使用中断线,就得进行中断线的申请就是IRQ,把申请一条中断线称为申请一个IRQ或者是申请一个中断号。IRQ线是从0开始顺序编号的,因此,第一条IRQ线通常表示成IRQ0,IRQn的缺省向量是n+32;IRQ和向量之间的映射可以通过中断控制器端口进行修改。

中断控制器8259A执行操作:

  • 1、监视中断线,检查产生的中断请求(IRQ)信号;
  • 2、如果在中断线上产生了一个中断请求信号;
  • a. 把接受到的IRQ信号转换成一个对应的向量;
  • b. 把这个向量存放在中断控制器的一个I/O端口,从而允许CPU通过数据总结读此向量。
  • c. 把产生的信号发送到CPU的INTR引脚----即发出一个中断操作;
  • d. 等待,直到CPU确认这个中断信号,然后把它写进可编程中断控制器(PIC)的一个I/O端口;此时,清INTR线。
  • 3、返回到第一步。

Linux内核源码中断机制配套视频教程

三、异常及非屏蔽中断

异常就是CPU内部出现的中断,也就是说,在CPU执行特定指令时出现的非法情况。非屏蔽中断就是计算机内部硬件出错时引起的异常情况。

中断描述符表:

在实地址模式中,CPU把内存中从0开始的1K字节作为一个中断向量表。表中的每个表项占4个字节,由两个字节的段地址和两个字节的偏移量组成,这样构成的地址便是相应中断处理程序的入口地址。

在实模式下,中断向量表中的表项由8个字节表示,中断向量表也改叫做中断描述符表IDT,其中的每个表项叫做一个门描述符,“门“的含义是当中断发生时必须通过这些六,然后才能够进入相应的处理程序。

其中类型占3位,表示门描述符的类型:

  1. 任务门(task gate)
  2. 中断门(interrupt gate)
  3. 陷阱门(trap gate)
  4. 系统门(system gate)

Linux内核源码中断机制配套视频教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值