深入理解Linux内核-中断和异常
2015-07-14 21:19
756 查看
Linux内核代码查看
引入信号的动机:
IRQ(Interrupt Request)如何引起中断:
80x86微处理器如何在硬件级处理中断和异常:
如果初始化中断结构必须的数据结构:
如何在软件级处理中断信号:
http://androidxref.com/
中断:被定义位一个事件,它能改变处理器执行指令的顺序。它对应硬件(CPU、其他硬件设备)电路产生的电信号。 同步中断:指令执行时CPU控制单元产生;称为同步,是因为只有在一条指令终止执行后CPU才回发出中断。也被称为异常
异步中断:其他硬件设备按照CPU时钟信号随机产生的。也被简称中断
中断的约束:1、中断必须尽快处理完成;中断一般被分两部分执行:关键而且紧急的部分,内核立即执行;其余部分内核稍后执行; 2、中断的处理必须能满足嵌套,即当正在处理一个中断时,另一个中断又发生了的情况,必须尽量支持 3、中断可以被禁止,但必须尽可能的限制使用 中断:可屏蔽中断、非屏蔽中断 异常:处理器探测异常(故障、陷阱、异常终止),编程异常
引入信号的动机:
IRQ(Interrupt Request)如何引起中断:
IRQ:能发出中断请求的硬件设备都又一条名为IRQ都输出线; IRQ line:与可编程中断控制器的硬件电路的输入引脚相连。 可编程中断控制器(IPC): 1、监视IRQ线,如果两条或者以上的IRQ线产生信号,选择引脚编号较小 2、如果只有一个引发信号 a、将它转化为对应的向量;b、将向量存放到中断控制器的IO端口,允许CPU通过数据总线读取;c、把引发信号发送到处理器的INTR引脚,即产生中断 d、等待,直到CPU通过吧这个中断信号写入可编程中断控制器的一个I\O端口来确认它,清除INTR线; 3、返回第一步。 I/O APIC(I/O 高级可编程中断控制器):
80x86微处理器如何在硬件级处理中断和异常:
异常处理程序的结构: 1、在内核堆栈中保存大多数寄存器的内容 2、用高级的c函数处理异常 3、通过ret_from_exception() 函数从异常处理程序退出。
如果初始化中断结构必须的数据结构:
内核启用中断前,必须把IDT(中断描述符表)的初始地址装到idtr寄存器,并初始化其中的每一项。系统初始化时就需要完成。 IDT的初始化: 1、当计算机还运行在实模式的时候IDT被初始化,由BIOS例程使用, 2、当linux接管之后,IDT被移到RAM的一个区域,进行二次初始化。 内核初始化的过程中,先用一个中断门填充IDT的256个表项,然后用有意义的陷阱和中断处理程序替换它。 完成初始化之后,对于每一个PIC确认的IRQ,IDT都有一个专门的中断门。
如何在软件级处理中断信号:
中断处理流程: 1、硬件通过IRQ线通知PIC 2、PIC将中断向量放到寄存器 3、处理器读取寄存器,存如RAM。由中断处理例程处理(ISR) 4、通知PIC 注意:内核启用中断之前,必须知道IRQ号与I/O设备之间的对应关系,否则内核不知道那个向量对应哪个设备,如果处理。 IRQ号与设备之间的对应关系,在初始化设备驱动程序的时候建立的。
相关文章推荐
- linux驱动之spi学习小结
- 烂泥:学习centos之快速搭建LNMP环境
- 烂泥:学习centos之快速搭建LNMP环境
- Linux下JDK的安装
- grep命令小结
- cdlinux可以安装在c盘
- Linux通过脚本绑定dhcp地址
- Linux 内核中 likely 与 unlikely 的宏定义解析
- Linux内存管理
- Linux中 ps aux 命令
- 七月十四日 Linux操作系统c语言学习笔记
- 动态壁纸给linux发行版添加活力背景
- cdlinux有一些优盘或者电脑是不支持的
- Linux内核源代码-目录结构
- CentOS系列操作系统的安装程序anaconda与其配置文件kickstart
- linux如果不进入window磁盘
- web项目部署到linux服务器出现的问题
- linux 下svn 命令详解
- Linux下mysql导出xls文件
- Linux C语言程序设计(六)——查找与排序