当进程执行非法指令(例如除以零,或尝试访问禁止的内存空间)时,CPU 会检测到这种情况,然后 CPU 会保存它必须保存的内容,并将 IP(指令指针)更改为负责该特定错误的 OS 例程的地址。然后进程会异常终止(或不会?)。
我想知道两件事:
1. 尝试执行非法指令的进程是否总是异常终止?
2. 终止是由 OS 还是 CPU 执行的?
答案1
- 不。
- CPU发生异常,则CPU将控制权移交给OS。
我们称这个事件为“异常”。DivisionByZero 就是一个典型的异常。
CPU 使用操作码而不是完整的进程/软件进行操作。操作系统将下一个操作码传输给 CPU。如果 CPU 响应的是异常,操作系统将处理接下来的操作:终止或继续运行。进程还可以设置操作系统来自己管理异常,在这种情况下,CPU 异常由操作系统接收并转发给进程,然后进程可以管理下一步。
但这是一个非常复杂的话题,很难用几句话来概括。