- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断基本知识中断向量Intelx系列微机共支持种向量
3.1 中断基本知识
3.1.1中断向量
Intel x86系列微机共支持256种向量中断,为使处理器较容易地识别每种中断源,将它们从0到256编号,即赋以一个中断类型码n,Intel把这个8位的无符号整数叫做一个向量,因此,也叫中断向量。所有256种中断可分为两大类:异常和中断。异常又分为故障(Fault)和陷阱(Trap),它们的共同特点是既不使用中断控制器,又不能被屏蔽。中断又分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI),所有I/O设备产生的中断请求(IRQ)均引起屏蔽中断,而紧急的事件(如硬件故障)引起的故障产生非屏蔽中断。
非屏蔽中断的向量和异常的向量是固定的,而屏蔽中断的向量可以通过对中断控制器的编程来改变。Linux对256个向量的分配如下:
从0~31的向量对应于异常和非屏蔽中断。
从32~47的向量(即由I/O设备引起的中断)分配给屏蔽中断。
剩余的从48~255的向量用来标识软中断。Linux只用了其中的一个(即128或0x80向量)用来实现系统调用。当用户态下的进程执行一条int 0x80汇编指令时,CPU就切换到内核态,并开始执行system_call( )内核函数。
外设可屏蔽中断
Intel x86通过两片中断控制器8259A来响应15个外中断源,每个8259A可管理8个中断源。第一级(称主片)的第二个中断请求输入端,与第二级8259A(称从片)的中断输出端INT相连,如图3.1所示。我们把与中断控制器相连的每条线叫做中断线,要使用中断线,就要进行中断线的申请,也就是IRQ(Interrupt ReQuirement ),因此我们也常把申请一条中断线称为申请一个IRQ或者是申请一个中断号。IRQ线是从0开始顺序编号的;因此,第一条IRQ线通常表示成IRQ0。IRQn的缺省向量是n+32;如前所述,IRQ和向量之间的映射可以通过中断控制器端口来修改。
图3.1 级连的 8259A的中断机构
并不是每个设备都可以向中断线上发中断信号的,只有对某一条确定的中断线拥有了控制权,才可以向这条中断线上发送信号。由于计算机的外部设备越来越多,所以15条中断线已经不够用了,中断线是非常宝贵的资源,所以只有当设备需要中断的时候才申请占用一个IRQ,或者是在申请IRQ时采用共享中断的方式,这样可以让更多的设备使用中断。
中断控制器8259A执行如下操作:
1.监视中断线,检查产生的中断请求(IRQ)信号。
2.如果在中断线上产生了一个中断请求信号:
a.把接受到的IRQ信号转换成一个对应的向量。
b.把这个向量存放在中断控制器的一个I/O端口,从而允许CPU通过数据总线读此向量。
c.把产生的信号发送到CPU的INTR引脚——即发出一个中断。
d.等待,直到CPU确认这个中断信号,然后把它写进可编程中断控制器的一个I/O端口;此时,清INTR线。
3.返回到第一步。
对于外部I/O请求的屏蔽可分为两种情况,一种是从CPU的角度,也就是清除eflag的中断标志位(IF),当IF=0时,禁止任何外部I/O的中断请求,即关中断;一种是从中断控制器的角度,因为中断控制器中有一个8位的中断屏蔽寄存器(IMR),每位对应8259A中的一条中断线,如果要禁用某条中断线,则把IRM相应的位置1,要启用,则置0。
3.1.3异常及非屏蔽中断
异常就是CPU内部出现的中断,也就是说,在CPU执行特定指令时出现的非法情况。非屏蔽中断就是计算机内部硬件出错时引起的异常情况。从上图可以看出,二者与外部I/O接口没有任何关系。Intel把非屏蔽中断作为异常的一种来处理,因此,后面所提到的异常也包括了非屏蔽中断。在CPU执行一个异常处理程序时,就不再为其他异常或可屏蔽中断请求服务,也就是说,当某个异常被响应后,CPU清除eflag的中IF位,禁止任何可屏蔽中断。但如果又有异常产生,则由CPU锁存(CPU具有缓冲异常的能力),待这个异常处理完后,才响应被锁存的异常。我们这里讨论的异常中断向量在0~31之间,不包括系统调用(中断向量为0x80)。
Intel x86处理器发布了大约20种异常(具体数字与处理器模式有关)。Linux内核必须为每种异常提供一个专门的异常处理程序。这里特别说明的是,在某些异常处理程序开始执行之前,CPU控制单元会产生一个硬件错误码,内核先把这个错误码压入内核栈中。
在表3.1中给出了Pentium模型中异常的向量、名字、类型及简单描述。更多的信息可以在Intel的技术文挡中找到。
表3.1 异常的简单描述
向量 异常名 类别 描述 0 除法出错 故障 被0除 1 调试 故障/陷阱 当对一个程序进行逐步调试时 2
非屏蔽中断
(NMI) /
为不
您可能关注的文档
最近下载
- 葡萄牙建筑遗产保护历程与策略研究.pdf
- 二级展开式直齿圆柱齿轮减速器毕业设计_任务书.doc VIP
- 2025年中国窄带滤光片行业投资前景及策略咨询研究报告.docx
- 《GA/T 2160-2024法庭科学 资金数据检验规程》.pdf
- 《老年护理》7第七章 老年人常见意外事件的预防和护理 教学课件.pptx VIP
- 管道工程分包单价表.docx VIP
- 妇产科课件—保留生育功能的宫颈手术.pptx
- 附页意见陈述书.pdf VIP
- 针对第一次审查意见通知书的意见陈述书.doc VIP
- [机械标准]GB∕T 31554-2015 金属和非金属基体上非磁性金属覆盖层 覆盖层厚度测量 相敏涡流法.pdf
原创力文档


文档评论(0)