我正在为raspi3编写内核,并使用QEMU4.0.0对其进行仿真
我知道在编写内核时,通常会有永远循环的代码。就我而言,我用以下方法自旋模拟了raspi3内核中的4个内核中的3个:
1: wfe
b 1b
在C主程序中,我的最后一个内核运行一个while(1)
循环,该循环仅呼应stdin击键
但是,在我看来,自旋锁内核的原因是它们不会执行不应执行的代码,即在Aarch64汇编内核文件中的更远的代码。我不能只是将内核发送到文件末尾,那里没有更多的指令要运行吗?
1:
//EOF
我尝试了这一点,然后编译并运行了它(至少在QEMU4.0.0中运行),但是现在我对指令指针什么也没做时到底会发生什么感到好奇。
当核心到达汇编文件末尾时会发生什么?会停止吗?它是否开始读取内存中的下一个内容?模拟器是否比我聪明,并且以真正的硬件不会为我处理?
答案 0 :(得分:2)
CPU从内存而不是文件运行代码。如果CPU“掉线”了加载到内存中的程序的末尾,它将开始尝试在程序之后从内存中执行代码。由于此内存可能不包含有效的代码,因此处理器可能会抛出无效的指令异常。但是,程序 之后的数据也可能同时是有效代码,并且该代码可能导致系统异常运行-因此,在程序末尾添加自旋循环是好主意。