当 aarch64 汇编内核代码终止时会发生什么?

what happens when aarch64 assembly kernel code terminates?

我正在为 raspi3 编写内核并使用 QEMU4.0.0 对其进行模拟

我知道在编写内核时,您通常会有永远循环的代码。在我的例子中,我将 4 个模拟的 raspi3 内核中的 3 个自旋锁定为:

1:   wfe
     b    1b

并且在主 C 程序中,我有我的最后一个核心 运行ning 一个 while(1) 循环,它只是回显标准输入键击

然而,我想到自旋锁内核的原因是它们不执行它们不应该执行的代码,即在 Aarch64 汇编内核文件中进一步向下的代码。我不能将核心发送到文件末尾,那里没有更多的指令 运行?

1:
//EOF

我试过了,它编译了 运行(至少在 QEMU4.0.0 中是这样),但现在我很好奇当指令指针发现无事可做时到底发生了什么。

当内核到达程序集文件末尾时会发生什么?它停止了吗?它会开始读取内存中的下一个内容吗?模拟器是否比我更聪明并以真实硬件不会的方式为我处理它?

CPUs 运行 内存中的代码,而不是文件中的代码。如果 CPU "falls off" 程序结束时加载到内存中,它将开始尝试从内存中执行您程序之后的代码。由于此内存可能不包含有效代码,因此处理器可能会抛出无效指令异常。但是,您的程序 之后的数据也有可能恰好是有效代码,并且该代码可能会导致系统行为不可预测 - 因此在您的程序末尾添加一个自旋循环程序是个好主意。