发生中断时CPU在中断允许的情况下,强制跳转至中断处理程序对该中断进行响应。
中断处理程序需要注意:
若是改写系统中断,尽量保存系统中断的原地址;
如果是自定义中断,需要注意是否允许多重中断,即能否被另一个中断(包括同一个中断号的相同中断)打断,若不希望被打断,应当在中断处理程序开始时关闭中断允许位IF(用CLI指令),并且在程序结束时开启中断位(用STI指令)。
另外,中断处理程序本身也是一个过程,也有可能出错,所以尽量不要在中断处理程序中产生错误,以免程序不可控。
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
中断流程图如下:
中断过程
按照事件发生的顺序,中断过程包括:
①中断源发出中断请求;
②判断当前处理机是否允许中断和该中断源是否被屏蔽;
③优先权排队;
④处理机执行完当前指令或当前指令无法执行完,则立即停止当前程序,保护断点地址和处理机当前状态,转入相应的中断服务程序;
⑤执行中断服务程序;
⑥恢复被保护的状态,执行“中断返回”指令回到被中断的程序或转入其他程序。
上述过程中前四项 *** 作是由硬件完成的,后两项是由软件完成的。
扩展资料
众所周知,处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然降低内核效率。
既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的 *** 作之后,再回过头来对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期对设备的状态进行查询,然后做出相应的处理。
不过这种方法很可能会让那个内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性的重复执行。更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动),这就是中断机制。
中断使得硬件得以与处理器进行通信。举个例子,在你敲打键盘的时候,键盘控制器(控制键盘的硬件设备)会发送一个中断,通知 *** 作系统有键按下。中断本质是一种特殊的电信号,由硬件设备发向处理器。
处理器接受到中断后,会马上向 *** 作系统反映此信号的到来,然后就由os负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器的时钟同步——换句话说就是中断随时可以产生。因此,内核随时可能因为新到来的中断而被打断。
不同的设备对应的中断不同,而每个中断都通过一个惟一的数字标识。因此,来自键盘的中断就有别于来自硬盘的中断,从而使得 *** 作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样, *** 作系统才能给不同的中断提供不同的中断处理程序。
在它执行程序的时候,如果有另外的事件发生(比如用户又打开了一个程序)那么这时候就需要由计算机系统的中断机制来处理了。
中断机制包括硬件的中断装置和 *** 作系统的中断处理服务程序。
让硬件在需要的时候再向内核发出信号。
参考资料来源:百度百科-中断机制
参考资料来源:百度百科-中断
程序中途跳出,和结束是两个不同的概念。
1 要使程序中途跳出,可以使用return语句,跳出该函数。
如
int fun(int n){
int i;
if(n<0) return -1;// 在n为负数下,提前退出该函数。
//执行正常功能。
for(i=0;i<n;i++)
printf("%d ", i);
}
2 要使程序提前结束, 可以调用exit()函数。
如
int fun(int n){
int i;
if(n<0) exit(-1);// 在n为负数下,提前结束程序。
//执行正常功能。
for(i=0;i<n;i++)
printf("%d ", i);
}
3 二者区别:
a) 使用exit函数,会结束整个程序。 而使用return只是结束当前函数,还会到主调函数处继续运行。
b) 在main函数中使用return语句,等效于调用exit函数,同样会结束程序。
c) 调用exit函数时,需要引用头文件stdlibh。
中断函数不用进行函数声明,可以写在MAIN函数前面也可以写在MAIN函数后面。
一、中断服务程序,处理器处理“急件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务程序。
二、当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。
三、实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源,单片机的中断系统一般允许多个中断源,当多个中断源同时向CPU请求中断时,就存在一个中断优先权的问题。通常根据中断源的优先级别,优先处理最紧急事件的中断请求源,即最先响应级别最高的中断请求。
四、保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。
五、分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。恢复被中断进程的现场,CPU继续执行原来被中断的进程。
据我所知所受影响的处了系统本身,其次直接受害的应该是硬盘,但是结束进程是程序中所必须用到的一个系统,所以其伤害能力可以说微乎其微,但是检测或者研究中并没有指出会对CPU进行损害,因为在结束进程的时候,CPU是不会受到任何影响的,如果在未响应的情况下结束进程可以使用,或者直接把打开的文件用进程关闭,在任何评估中都没有提到对CPU有影响,所以按照这些标准来看,可以排除出现大的影响。
以上就是关于什么是中断处理程序编写中断处理程序时要注意哪些问题全部的内容,包括:什么是中断处理程序编写中断处理程序时要注意哪些问题、在计算机系统中,请解释什么是中断,请用流程图画出一次中断处理流程、C语言~~~如何使程序中途结束、跳出~~~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)