我正在阅读其手册中grub的多重引导规范。在阅读本手册时,我发现了一个规范。此规范提及如#34;当引导加载程序调用32位操作系统时,操作系统映像必须在需要时立即创建自己的堆栈。"。我不了解此规范,为什么操作系统需要创建堆栈。
答案 0 :(得分:3)
这是一个规范。规范通常会“保证”协作组件可以依赖的状态,以及它可能 依赖的内容。
在这种情况下,规范说明加载的OS可能不会假设堆栈指针的内容引用可用作堆栈的存储区域。这并不意味着堆栈指针实际上不会指向可用作堆栈的内存区域(可能)。这意味着你最好不要依赖它,因为未来版本的加载器可以免费使用寄存器。当你的后续版本加载时,你的操作系统可能会崩溃。
话虽如此,也有可能还有其他原因。例如,在x86中,堆栈指针(RSP / ESP / SP)相对于SS段寄存器的内容进行解释。当改变模式 - 例如,实模式到保护模式 - 段寄存器的结构和解释发生变化;因此,在一种模式下有意义的堆栈指针值可能指向另一种模式中完全不同的存储区域(甚至没有有效的存储区域)。