进程尝试执行非法指令后如何终止?

进程尝试执行非法指令后如何终止?

当进程执行非法指令(例如除以零,或尝试访问禁止的内存空间)时,CPU 会检测到这种情况,然后 CPU 会保存它必须保存的内容,并将 IP(指令指针)更改为负责该特定错误的 OS 例程的地址。然后进程会异常终止(或不会?)。

我想知道两件事:
1. 尝试执行非法指令的进程是否总是异常终止?
2. 终止是由 OS 还是 CPU 执行的?

答案1

  1. 不。
  2. CPU发生异常,则CPU将控制权移交给OS。

我们称这个事件为“异常”。DivisionByZero 就是一个典型的异常。

CPU 使用操作码而不是完整的进程/软件进行操作。操作系统将下一个操作码传输给 CPU。如果 CPU 响应的是异常,操作系统将处理接下来的操作:终止或继续运行。进程还可以设置操作系统来自己管理异常,在这种情况下,CPU 异常由操作系统接收并转发给进程,然后进程可以管理下一步。

但这是一个非常复杂的话题,很难用几句话来概括。

相关内容