我无法在任何地方找到这些信息。无论我看哪里,都能找到关于当你进入“main”(无论是什么入口点)时栈的样子的引用,这将是程序参数和环境,但我正在寻找的是系统如何设置栈以与switch_to宏配合使用。第一次切换任务时,它需要在由“tsk->thread->esp”指向的堆栈上具有EFLAGS、EBP、GCC保存的寄存器以及schedule()函数的返回地址,但我弄不清楚内核如何设置这个栈,因为它让GCC使用输出参数保存通用寄存器(使用内联汇编)。
我只涉及x86 PC。我正在研究Linux调度/进程系统,为我自己尝试编写的小内核而做准备,但我搞不明白我错过了什么。我知道我错过了某些东西,因为Slackware在我的计算机上运行就证明了调度程序正常工作:P
编辑:我表述得似乎很糟糕。我正在寻找有关如何设置任务内核栈的信息,而不是任务用户栈的设置。更具体地说,是由tsk->thread->esp指向的堆栈,并且 "switch_to" 切换到它。