为什么操作系统需要创建自己的堆栈?

Why Operating System need to create its own stack?

我正在阅读 grub 的多重引导规范 manual.While 我正在阅读这本手册,我发现了一个 specification.This 规范提及 "When the boot loader invokes the 32-bit operating system,operating system image must create its own stack as soon as it needs one."。我不知道理解这个规范,为什么OS需要创建堆栈。

这是一个规范。规范通常 "guarantees" 说明协作组件可以依赖什么状态,以及它可能 依赖什么。

在这种情况下,规范说明加载的 OS 可能不会假定堆栈指针的内容引用可用作堆栈的内存区域。这并不意味着堆栈指针 实际上指向可用作堆栈的内存区域(它可能)。这意味着您最好不要依赖它,因为加载程序的未来版本可以自由地将寄存器用于其他用途。然后,您的 OS 在被更高版本加载时可能会崩溃。

话虽这么说,但也可能有其他原因。例如,在 x86 中,堆栈指针 (RSP/ESP/SP) 是相对于 SS 段寄存器的内容进行解释的。当改变模式时——比如,实模式到保护模式——段寄存器的结构和解释发生变化;因此,在一种模式下有意义的堆栈指针值可能指向另一种模式下完全不同的内存区域(甚至没有有效的内存区域)。