zoukankan      html  css  js  c++  java
  • 异常和中断的区别

    转:http://blog.chinaunix.net/uid-29025972-id-3889653.html

    1>异常:
     是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。同时异常也称为同步中断,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。
     a.产生的原因:
            程序的错误产生的,编程异常通常叫做软中断(eg:除数为0)
            内核必须处理的异常条件产生的(eg:缺页)
      产生的目的:
           Linux利用异常来达到两个截然不同的目的:
                ·给进程发送一个信号以通报一个反常情况
                ·管理硬件资源
          对于第一种情况,例如,如果进程执行了一个被0除的操作,CPU则会产生一个“除法错误”异常,并由相应的异常处理程序向当前进程发送一个SIGFPE信号。当前进程接收到这个信号后,
          就要采取若干必要的步骤,或者从错误中恢复,或者终止执行(如果这个信号没有相应的信号处理程序)。  
          对于第二种情况,内核使用两种异常来有效地管理硬件资源,相应的处理程序也就更复杂。在这种情况下,异常并不表示一种错误情况:
             ·用“设备不可用”异常来推迟装载浮点寄存器。
             ·用“缺页”异常推迟把新页框分配给进程。 
       异常又分为故障和陷阱。
     b.产生都不使用中断控制器,中断号由指令直接给出。不能被屏蔽。
     c.异常没有自己的进程上下文,会用到当前进程的进程上下文。
     d.在CPU执行一个异常处理程序时,就不再响应其他异常和中断请求服务.如果此时发生了一个异常,CPU不能去响应它,又不能把它的信息丢失该怎么办呢?
       这是就用到了堆栈,把所有的信息压入栈。等当前异常处理后,才从堆栈中取出信息再响应刚才的异常。
     e.X86处理处理器中大约有20种异常。Linux内核必须为每种异常提供一个专门的异常处理程序。

    2>中断:
     也称为异步中断。因此它是由其他硬件设备依照CPU时钟信号随机产生,即意味着中断能在指令之间发生。
     a.中断主要是响应外部硬件设备的。
     b.产生通过中断控制器,中断号是由中断控制器提供的(NMI硬中断中断号系统指定为02H)。
      中断又分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI)
           ·所用I0设备产生的中断请求均引起可屏蔽中断。
           ·硬件故障引起的故障则产生非屏蔽中断。
     c.中断使用自己的中断上下文,原来的进程上下文保持不变,而且可以返回中断之前所作的事件。
     d.在CPU执行一个异常处理程序时,就不再响应其他异常和中断请求服务.如果此时产生多个非屏蔽中断时,CPU的处理方法跟异常处理方法一样,使用堆栈。

  • 相关阅读:
    什么是 MyBatis?
    @RequestMapping 注解用在类上面有什么作用?
    如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
    SpringMVC 流程?
    SpringMVC 工作原理?
    什么是 SpringMvc?
    依赖注入的三种实现方式?
    什么是IOC
    spring的作用
    什么是spring框架?
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3308972.html
Copyright © 2011-2022 走看看