中断笔记 一些常见的中断问题

中断简述:所谓中断就是指CPU在正常执行程序的时候,由于内部/外部事件的出发、或由程序预先设定而引起CPU暂时中止当前正在执行的程序,保存被执行程序相关信息到栈中,转而去执行为内部/外部事件、或由程序预先设定的事件的中断服务子程序,待执行完中断服务子程序后,CPU再获取被保存在栈中被中断的程序的信息,继续执行被中断的程序,这一过程叫做中断。

	CPU在执行指令时,通过代码寄存器CS和指令指针寄存器IP(instruction Pointer)
来确定要执行的下一条指令的内存地址。
	CS的全拼为“Code segment”,即代码段寄存器,对应于内存中的存放代码的内存区域,
用来存放内存代码段区域的入口地址(段基址)。
	EIP寄存器 : 用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行
的指令。 每次CPU执行完相应的汇编指令之后,EIP寄存器的值就会增加。
	EFLAGS寄存器 : 32位寄存器,包含一组状态、系统标志及控制标志。
每个标志由寄存器里一位表示。

中断和异常的概念区别
共同点:

	Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。

不同点:

中断(interrupt)是异步的事件,典型的比如由I/O设备触发;
异常(exception)是同步的事件,典型的比如处理器执行某条指令时发现出错了等等。
中断又可以分为可屏蔽中断和非可屏蔽中断,
异常又分为故障、陷阱和异常中止3种;

1、请详细描述中断的处理过程

中断处理过程:

请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。
(1)某一中断源向CPU发起中断请求,对于外部中断,CPU在当前指令最后一个时钟周期查询中断
请求信号的有效性,在系统开中断的情况下,CPU向中断源回送中断应答信号,系统进入中断响应
周期。(CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地
址,执行中断服务子程序);
(2)CPU响应中断后,将状态标志寄存器压入堆栈保护;
(3)再将其中的中断标志位清除从而关闭中断;
(4)CPU将当前CS(代码段地址)和IP(将要执行的下一条地址)压入堆栈保护断点;
(5)CPU确定提出请求的中断源,获得中断向量号,在对应的中断向量表获得中断入口地址,
	装入CS和IP中;
(6)保护当前程序的现场
   CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,
   eip,errorCode(如果是有错误码的异常)信息。
(7)中断服务程序处理完毕,恢复执行先前中断的程序
   在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。 
   程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行
(8)中断服务程序处理完毕,恢复执行先前中断的程序
   在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。
   程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行

2、中断源分类

中断源:所谓中断源,即引起中断的事件或原因,或发出中断申请的来源。

中断源可分为外部中断源和内部中断源两大类。

(1)外部中断源是指由CPU的外部事件引发的中断。主要包括:

①一般中、慢速外设,如键盘、打印机、鼠标等;
②数据通道,如磁盘、数据采集装置、网络等;
③实时时钟,如定时器定时已到,发中断申请;
④故障源,如电源掉电、外设故障、存储器读出出错以及越限报警等事件。

(2)内部中断源是指由CPU的内部事件(异常)引发的中断,主要包括:

①由CPU执行中断指令INTn引起的中断;
②由CPU的某些运算错误引起的中断,如除数为0或商数超过了寄存器所能表达的范围、溢出等;
③为调试程序设置的中断,如单步中断、断点中断;
④由特殊操作引起的异常,如存储器越限、缺页等。

3、中断发生的时候暂停当前任务的时候采用的是哪一种处理方式----保护现场,保护现场涉及到哪些数据和内容

主程序和中断服务子程序都要使用CPU内部寄存器等资源,
	为使中断处理程序不破坏主程序中寄存器的内容,
	应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。

4、中断的分类有哪些
从不同的角度来说,中断可以有三种分类方法。

①中断可以分为同步中断(synchronous)和异步中断(asynchronous)。
	**同步中断** 是在指令执行时由CPU主动产生的,受到CPU控制,其执行点是可控的。
	**异步中断** 是CPU被动接收到的,由外设发出的电信号引起,其发生时间不可预测。
②中断可分为硬中断和软中断。
	硬中断    :硬中断可以中断软中断。
		硬中断由硬件产生。每个设备或者设备集都有自己的IRQ(中断请求)。硬中断可以直接中断CPU。
	软中断    :软中断不会直接中断CPU。
		软中断是当前进程产生的。通常,软中断是一些对IO的请求。软中断仅与内核联系。
③中断可分为可屏蔽中断(Maskableinterrupt)和非屏蔽中断(Nomaskableinterrupt)。

5、恢复现场所涉及的操作有哪些

异常和中断
保留现场:
	通过push指令将寄存器中的值都压入到栈中
恢复现场:
	通过pop指令将栈中的值赋值给寄存器中
进程间切换
保留现场:
	通过创建并初始化一个结构体(structpt_regs该结构体中的属性,
	就是用来保存各个寄存器中的数据的),将该结构体中的所有数据直接memcpy到栈中,
	提高了效率
恢复现场:
	通过pop指令将栈中的数据重新还原到各个寄存器中
发布了3 篇原创文章 · 获赞 0 · 访问量 24
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览