【问题标题】:How processor detects that an exception has occurred?处理器如何检测到发生了异常?
【发布时间】:2014-08-03 14:19:09
【问题描述】:

处理器如何检测到发生了异常?这个检查点在哪里?处理器是否在每个 F-D-E 周期后进行异常检查或类似检查?如果它是特定于处理器的,它是如何在 arm 中发生的? 示例:当我们断言 IRQ 或 FIQ 线时,系统何时会检查该线?

【问题讨论】:

标签: arm computer-architecture processor


【解决方案1】:

每个处理器都会有硬件级别的标志寄存器(也称为状态寄存器)来表示异常。寄存器中的位将被硬连线以通知异常。接下来的指令将根据这些寄存器执行。

【讨论】:

  • 但是cpu什么时候去检查状态寄存器呢?它会在每个周期后检查异常吗?如果是这种情况,我无法在手臂的 13 个循环中看到任何异常检查。您可以查看此图以供参考i.stack.imgur.com/9dQt4.png
  • AFAIK 异常处理将硬连线在处理器本身上,因此不要认为您可以在开始下一条指令之前寻找检查异常的指令周期。我在 Hall 的 x86 书中读到了这一点。这对 ARM 来说应该没有什么不同。
【解决方案2】:

实际上没有任何检查点。可以在管道的任何阶段触发异常信号。举几个例子,在执行阶段被零除,在解码阶段出现未知指令等等......每当这些异常发生时,管道就会被刷新,并且程序计数器(PC)会更新为相应的地址向量表条目。底线是处理器不会定期检查是否存在异常。当发出异常信号时,它会立即处理。

【讨论】:

  • 感谢黑龙!但是处理器什么时候会去检查那个异常信号呢?
  • 它不会定期检查信号。当异常信号被置位时,这个过程在下一个时钟周期被触发。所以一个非常简单的时间线(可能有点不切实际,但仍然是一个很好的模型)就像 C0(时钟周期 0):异常信号断言,C1:刷新管道,C2:将 PC 设置为向量表条目地址并从该地址继续执行点
猜你喜欢
  • 2023-01-25
  • 2010-11-14
  • 2013-05-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2020-05-17
  • 2013-12-19
  • 2014-08-03
相关资源
最近更新 更多