Exception 中断和异常

Exception 中断和异常,exception,terminology,interrupt,Exception,Terminology,Interrupt,我在这里看到了几个关于的问题,其中一些问题暗示了,但没有一个能说明两者之间的联系 什么是中断 什么是例外?(请解释您所知道的每种语言的例外情况,因为存在一些差异) 异常何时为中断,反之亦然 中断是由硬件或特定CPU指令生成的CPU信号。这些导致中断处理程序被执行。诸如来自I/O硬件的I/O信号之类的东西会产生中断 异常可以被认为是中断的软件版本,它只影响其进程 我不确定确切的细节,但异常可以通过中断来实现。当你谈论中断和异常时,你通常谈论的是接近硬件级别的代码,中断和异常通常部分由硬件实现,部

我在这里看到了几个关于的问题,其中一些问题暗示了,但没有一个能说明两者之间的联系

  • 什么是中断

  • 什么是例外?(请解释您所知道的每种语言的例外情况,因为存在一些差异)

  • 异常何时为中断,反之亦然


    • 中断是由硬件或特定CPU指令生成的CPU信号。这些导致中断处理程序被执行。诸如来自I/O硬件的I/O信号之类的东西会产生中断

      异常可以被认为是中断的软件版本,它只影响其进程


      我不确定确切的细节,但异常可以通过中断来实现。

      当你谈论中断和异常时,你通常谈论的是接近硬件级别的代码,中断和异常通常部分由硬件实现,部分由软件实现

      中断是硬件中的一个事件(或在汇编中手动触发),它与处理程序向量相关联,可用于处理中断事件,如IO完成、IO错误(磁盘内存故障)、IO事件(例如鼠标移动)。当一些意外的中断发生时,中断常常会引起异常


      异常是一种意外行为,通常在使用硬件时,这些异常来自中断,并在软件中使用中断处理程序单独处理。在我们看来,编程语言几乎总是把它伪装成某种控制结构。

      一般来说,中断是某种硬件实现的陷阱。您为一个特定的中断(除以0,外设上的数据可用,计时器过期)注册一个处理程序,当该事件发生时,系统范围内的所有处理都将停止,您将快速处理该中断,然后继续处理。这些通常在设备驱动程序或内核中实现


      异常是一种软件实现的处理代码错误的方法。为特定(或常规)异常设置处理程序。当发生异常时,语言运行时将开始展开堆栈,直到它到达该特定处理程序的处理程序。此时,您可以处理异常并继续,或退出程序。

      iTrrupts基本上是由硬件驱动的,例如打印机指示它“缺纸”或网卡指示它已断开连接

      异常只是程序中的一种错误状态,由try/catch块检测到。比如:

      Try
         {
         ... various code steps that "throw exceptions" on error ...
         }
      catch (exception e)
         {
         print 'Crap! Something bad happened.' + e.toString()
         }
      

      这是一种捕获代码块中发生的“任何错误”的简便方法,因此您可以以类似的方式处理它们。

      中断预计会定期发生(尽管有时不是定期的)。。他们中断cpu,因为有重要的事情刚刚发生,需要立即处理


      例外情况应为规则的例外情况;这些都是由软件抛出的,因为发生了意想不到的事情,这是你尝试做点什么的机会,或者至少是优雅地崩溃。

      我将详细说明什么是中断,因为有一种关键类型的中断还没有人处理过:计时器

      但首先,让我退一步。当您得到一个中断时,您的中断处理程序(位于内核空间)会运行,通常会禁用中断,查看任何挂起的业务(处理刚刚到达网络的数据包,处理击键等),然后(请记住,此时我们仍在内核中)确定下一步应该运行哪个进程(可能是相同的,也可能是不同的,取决于调度程序),然后运行它

      在任何给定的时间,处理器上只运行一个进程。当您使用多任务操作系统时,它在它们之间切换的方式称为上下文切换——基本上,处理器的寄存器转储到内存中,流传递到新进程,当进程完成时,上下文切换到其他进程

      比如说,我写了一个简单的C程序,可以计算所有的数字,或者斐波那契序列,或者其他一些不停止的东西。或者更好的是:在一个while(1)循环中除了旋转什么都不做。系统上的其他进程是如何运行的?如果没有任何事情导致中断呢

      答案是,你有一个不断中断的计时器设备。这是阻止旋转进程关闭整个系统的原因。尽管我会注意到中断处理程序禁用中断,所以如果你做了一些无限期阻塞的事情,你可以关闭整个系统。

      异常 异常是指处理器执行不在其正常路径上的代码。这是正常操作的“异常”,基本上是通过代码和控制结构的线性移动。不同语言支持各种类型的异常,通常用于处理程序操作期间的错误

      打断 中断是硬件级别的异常(通常)。中断是处理器中的一个物理信号,告诉CPU存储其当前状态并跳转到中断(或异常)处理程序代码。处理程序完成后,恢复原始状态,处理可以继续

      中断始终是一种异常,即使是在预期的情况下。中断可能表示:

      • 错误,例如内存访问冲突
      • 操作系统需要执行一个操作来支持正在运行的程序,例如软件中断或内存分页请求
      • 硬件设备需要注意,例如接收到的网络数据包或空的传输缓冲区
      这些总是迫使处理器暂停其当前活动以处理引发的异常,只有在中断处理程序完成后才恢复