gpt4 book ai didi

linux-kernel - 内核空间和内核栈有什么关系?

转载 作者:行者123 更新时间:2023-12-04 16:07:42 26 4
gpt4 key购买 nike

我知道内核空间是操作系统核心执行和提供服务的内存部分,而用户空间是用户程序运行的地方。我还知道进程在其地址空间中有自己的堆栈、堆、数据和文本部分。但是我对user stackkernel stack 的概念感到困惑。我的问题是:

  1. 我之前提到的进程栈是否由用户栈和内核栈组成?
  2. 内核堆栈是内核空间的一部分吗?
  3. 这两个堆栈是否在进程的虚拟内存地址中分开?
  4. 代码段中:void main(){user_mode_call(); system_call()} 两次调用的栈帧分别驻留在用户栈和内核栈中吗?


感谢您抽出宝贵时间,任何相关文献和链接也将有所帮助!
(我的问题可能很幼稚,但我会在知道如何以更专业的方式提出问题后尽快更新)

最佳答案

栈结构通常由处理器指定。每个进程通常每个处理器模式(用户、内核 + 处理器使用的任何其他)每个进程有一个堆栈,每个处理器有一个中断堆栈(另一个内核堆栈)。

Does the process stack I mentioned before consist of user stack and kernel stack?

没有。必须保护内核堆栈免受用户模式访问。

Is kernel stack part of the kernel space?

它可能是或可能是用户空间中 protected 内存。

Are the two stacks separated in a processes' virtual memory address?

是的。

In the code segment: void main(){user_mode_call(); system_call()} do the stack frames of the two calls reside in user stack and kernel stack respectively?

“代码段”是一种教学结构。两者的堆栈帧都在用户堆栈中。系统调用调用一个包装函数,该函数设置寄存器值,然后导致将处理器切换到内核模式的异常。那时,大多数处理器将默认堆栈更改为内核模式堆栈。必须将参数传递给系统调用,因为在内核模式下无法通过 SP 寄存器直接访问用户堆栈。

关于linux-kernel - 内核空间和内核栈有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040948/

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