又是中断(一)-概述

导言:本学期给软件工程专业大三开设《Linux内核分析》课程,教材使用的是《Linux操作系统原理与应用》,同时建议学生阅读 Linux内核之旅 网站上《深入分析Linux内核源代码》一书,网站上还给出了Linux2.6内核模块编程实例。最近讲到中断部分,建议学生阅读网站上电子杂志 第八章 关于中断的趣味描述。另外,在chenjifeng同学的 博客 上看到了关于中断的学习笔记,转载在此,有助于初学者从内核最新源代码的角度真正理解中断。

——————————————————————————————————————
中断概述:
什么是中断,简单地说就是CPU在忙着作自己的事情,这时候硬件(比如说键盘按了一下)触发了一个电信号,这个信号通过中断线到达中断控制器8259A,8259A接受到这个信号,向CPU发送INT信号申请CPU来执行刚才的硬件操作,并且将中断类型号也发给CPU,此时CPU就丢下自己正在做的事情,但不是随便丢到旁边而是保存了当前正在做的事情的相关资料,然后去处理这个申请,根据中断类型号找到它的中断向量(也就是中断程序在内存中的地址),然后去执行这段程序(这段程序是已经写好的,在内存中),执行完后再向8259A发送一个INTA信号表示我已经处理完你刚才的申请。这个时候CPU就可以继续做它刚才被打断做的事情了,这个时候刚才保存的相关信息就帮助CPU接着执行下面的程序,而不至于忘记自己刚才正在做什么。
上面说了一大堆关键词有四个:
中断源:这里的中断源是指打断CPU的事件,没有中断源中断无从谈起,它可以是硬件的也可以是软件的。
CPU:不用说中断就是要来用CPU来处理一些事情的
中断控制器8259A:硬件中断源与CPU之间的桥梁,没有它中断就无法被CPU所知道。
中断服务程序:你打断了CPU,CPU就得根据这个程序来为你办事

中断的分类:
上面概述中提到的中断只是中断家族中的一种叫硬件中断,总的来说可以将中断分为内部中断和外部中断,内部中断也叫异常,是由CPU产生的,当处理器执行时遇到了由于程序员编程而导致的错误指令时,如除数为0,这些就会产生内部中断,而外部中断(硬件中断)一般都是硬件所引起的中断比如说键盘等。
中断控制器8259A:


说中断不得 不说8259A,系统外设的中断都是由它来控制和管理的,图中是由两片8259A级联组成的,可以响应15个中断源。由图可以看出硬件接在8259A的中断请求线上。
中断号:
这里所说的中断号是指外部中断即硬件中断的编号,系统为每个“中断请求线”分配了一个号,x86采用了两个8259A,一共有15个中断号,但是随着外设的增加,这些肯定不能满足需求,所以就有了多个外设共享一个中断号。中断号是用来表明是那个设备产生了中断,比如作为时钟中断的IRQ0。这样CPU就可以知道是那个设备产生了中断从而去处理它。
中断向量:
Inter x86共支持256个向量中断,为了很容易的识别每种中断源将它们从0到255进行编号,Inter将这个整数叫做中断向量,Linux对这256个中断向量的分配如下:
0~31为异常和非屏蔽中断
32~47为可屏蔽中断(硬件中断)
48~255用来表示软中断,Linux只用了其中的一个(即128或0x80向量)作为系统调用。
前面所将的中断号与中断向量之间的关系是:中断号+32 = 中断向量。中断向量的作用将在下面介绍。
中断描述符表(IDT):一个表,也叫中断向量表,每个表项叫做门描述符(gate descriptor)占8个字节,简单的说是用来存放中断处理程序入口函数地址,当然还包括了一些其他信息。其作用就是当一个中断发生时我们根据它的中断号确定其中断向量,然后在此表中找到它的入口函数从而执行它。这个表存放在内存中的一片区域中,那么我们如何找到这个表呢?这就需要一个系统寄存器中断描述符寄存器IDTR,在系统初始化时有一条汇编指令LIDT便可将中断描述符表的地址装进IDTR中,IDTR48位,在低字(低16位)中装的是界限,在高双字(高32位)中装的是基址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值