linux中断系列之中断简介(一)
2017-04-17 20:15
281 查看
第六章 - 第一节:中断简介
内核主要职责
管理系统中存在的各种设备,一般以一下两种方式管理:
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线上。
内核主要职责
管理系统中存在的各种设备,一般以一下两种方式管理:
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线上。
相关文章推荐
- Linux下的文件共享全攻略系列之一:Samba服务器简介与快速配置指南 推荐
- Linux下的MCU开发之AVR系列2-AVRDUDE的使用简介和AVR熔丝位
- Linux中断系列之中断或异常处理(四)
- 【Linux基础系列之】中断系统(2)-下半部
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
- Linux文件系统类型简介及支持的文件系统汇总--Linux入门到精通系列
- Linux系列教程(一)——Linux系统简介
- Linux 发行版简介系列:Debian
- Linux 发行版简介系列:Linux 是什么?
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- ACL权限简介与开启-linux系列32
- Linux 开关中断系列函数探究
- linux中断系列之中断子系统初始化(三)
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
- Linux 中断处理的小任务(tasklet)机制 简介
- linux 命令系列之 日志简介(74)
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
- 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
- Marvell xcat 系列交换芯片Linux下的中断机制