gpt4 book ai didi

linux-kernel - 在linux内核中,数据结构thread_struct同时包含字段esp0和esp,有什么区别?

转载 作者:行者123 更新时间:2023-12-04 18:24:15 25 4
gpt4 key购买 nike

这是我的猜测:

esp0使用内核堆栈顶部地址初始化。当分配了内核堆栈时,并且在过程切换期间使用它来初始化tss-> esp0,以便当上下文从用户模式切换到内核模式时,可以找到内核堆栈; esp用于将内核堆栈的顶部保存在进程切换期间要调度的进程的顶部。

因此,一旦初始化,thread_struct中的esp0便不会更改。

我的猜测对吗?

最佳答案

thread_struct结构包含这些ESP字段中的两个,分别是esp0esp。但是,它们与tss_segment_32结构中的四个字段相关,分别是esp0esp1esp2esp

这些实际上存在于TSS中,因此很大程度上是Intel提供的东西,而不是Linus等人提供的东西。

关于TSS为什么包含它们,如果知道保护模型在x86下的工作方式,则数字是合乎逻辑的。实际上,它们是铃声级别(esp除外,它是铃声级别3,尽管实际上并没有真正地称为esp3)。

换句话说,它们包含要在您执行的环中使用的堆栈指针。由于Linux仅使用环0(内核模式)和环3(用户模式),因此esp0esp是唯一的需要保存的。



顺便说一句,我认为我见过的唯一使用另一个环的OS是OS / 2,它使用环2进行某些I / O操作。必须对允许执行这些操作的进程进行特殊标记,并且操作系统将在第2环中运行它们,以允许不受约束的I / O访问,而不允许关闭内核。

关于linux-kernel - 在linux内核中,数据结构thread_struct同时包含字段esp0和esp,有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com