linux中断系列之中断简介(一)

第六章 - 第一节:中断简介
内核主要职责
管理系统中存在的各种设备,一般以一下两种方式管理:
1、轮询:内核一定周期访问设备,查询设备状态并进行处理, 设备请求不能及时处理,大量消耗CPU资源。
2、中断:设备在需要时通知内核,内核收到设备的请求后在做出相应处理,  即产生一种电信号,通过中断控制器发给CPU,CPU通知内核,内核再进行处理。提高CPU利用率。
一、中断分类
    1、同步中断:
  由CPU本身产生,又称内部中断,通常也成为异常。同步是指中断请求信号与代码指令之间同步执行,即一条指令执行完后,  而不是在执行期间发生中断。比如:执行除法指令,除数为0。
  异常包括故障、陷阱、中止
  故障:指在引起异常的指令之前,将异常通知给系统,故障处理结束后,返回引起异常的指令并执行。如被0除
  陷阱:指在引起异常的指令之后,将异常通知给系统,之后再执行处理程序,处理后进入下一条指令
  中止:产生中止时,正执行的程序不能被恢复执行,如硬件故障 
2、异步中断:有其他硬件设备产生,又称外部中断,通常称中断。通常用于只是设备的特定操作已经完成,与当前
  执行指令无关。
  中断包括:可屏蔽中断和不可屏蔽中断
  可屏蔽中断:即INTR,主要是外部I/O设备
  不可屏蔽中断:即NMI,比如掉电,必须无条件响应
二、PIC vs APIC 
1、可编程中断控制器(Programmable Interrupt Controller,PIC):只用于单处理器(UP)平台
  比如:8259A芯片,只能管理8个中断源,若需要更多,采用级联方式。传统只采用两个8259A级联,支持15个中断源  
  中断控制器与其他硬件设备相连的各条线被称为中断线。数目有限,所以需要在驱动程序中申请,得到后才能使用。
  中断线按照一定的顺序进行编号,这个编号即中断号。 
  中断产生时,若未被屏蔽,发送信号,然后CPU应答
2、高级可编程中断控制器(Advanced Programmable Interrupt Controller,APIC):MP多处理器,目前大多数UP和MP多用APIC
  由:本地高级中断控制器(LAPIC),位于CPU,负责将中断信号传递给指定的处理器,MP中,每个CPU都具有一个LAPIC。
      I/O高级中断控制器(I/OAPIC)负责收集来自IO设备的中断信号并分给LAPIC,系统中最多拥有8个IOAPIC, 典型的MP平台,有一个IOAPIC和多个LAPIC,所有LAPIC链接到IOAPIC上。
三、中断号 vs 中断向量
无论是终端还是异常,CPU响应过程一致,即根据中断所提供的中断向量,从中断描述表中获取相应处理程序的地址,然后执行。
中断号,当IO设备产生中断信号送给中断控制器时,与之关联的是一个中断号;当中断控制器将该信号传给CPU,则是一个中断向量
因此中断号与中断向量存在一对一映射关系。
四、中断描述符表
    实模式下,从地址0开始的1KB大小内存构成一个中断向量表,表中每一项4个字节,对应一个中断向量,保存改中断向量所对应的中断处理程序的入口地址
保护模式下,中断向量表,改名为中断描述符表(IDT),并允许在任意内存存放,CPU有专门存放IDT的起始地址的寄存器,其中IDT的每个表项被称为门描述符
五、门
1、386在保护模式下CPU有4种特权级(特权级0、特权级1、特权级2、特权级3),linux中只有两个,特权级0和特权级3,分别表示内核态和用户态
2、异常和中断引起CPU运行状态的改变,从用户态转为内核态。门的目的是在CPU希望进行状态切换时提供一种审查机制,保护系统运行。
3、门有四种:任务门、中断门、陷阱门、调用门。IDT包含前三种门
  任务门的本意用于任务切换,由于任务门远远不能表达任务所需表达的内容,所以Linux不用任务门进行任务切换。实际上,内核只有双重
  故障异常(中断向量8)使用到了任务门。
4、中断门和陷阱门
  16位段选择符,从全局段描述符(GDT)中获得异常或中断服务程序所处的段描述符,再加上32位段偏移量即可得到服务程序的地址。
  详情见:http://blog.csdn.net/q1007729991/article/details/52538080和http://www.blogfshare.com/gdt-ldt.html
  DPL指定了门的特权级,门的一边是CPU特权级,一边是目标代码段的特权级。中断到来后,进入服务程序前,此时只有CPL小于等于DPL才能进入门,
  进入门后,再次判断此时CPL只有大于或等于DPL时进入中断服务程序。此时目标代码段的DPL变成CPL,也就是说,通过门时,CPL只能保持或提升CPU
  的特权级,不能降低。
六、中断服务程序
必须在设备驱动程序中定义,并在使用request_irq函数申请IRQ线时,关联到所申请到的IRQ线上。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值