gpt4 book ai didi

linux - Linux 内核线程的调度或抢占是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:42 25 4
gpt4 key购买 nike

据我所知,与用户空间线程/进程相比,linux 内核线程没有自己的地址空间。内核线程不会上下文切换到用户空间,但内核线程是可调度和可抢占的。所以我的问题是,如果内核线程没有地址空间,那么内核线程的切换/抢占是如何工作的?

最佳答案

内核线程 基本上执行一个函数。它们是使用 kernel_thread() 函数创建的,该函数接收要执行的函数的地址、该函数的参数和一些克隆标志作为参数。

这个函数实质上调用了一个通用的do_fork(),将内核模式堆栈的地址传递给它,copy_thread() 将在其中找到 CPU 寄存器的初始值内核线程

基本上 kernel_thread() 以以下方式构建堆栈:

  • ebxedx 寄存器将由 copy_thread() 设置为值 fn参数
  • eip 将被设置为一个小例程,它将加载参数并调用 fn

这样新的内核线程开始执行fn(arg)

如您所见,内核线程通过 fn 的地址知道要执行什么代码。这个函数通常已经在内核的某个地方定义,通过设置 eip 指向那里,这样内核线程就知道要执行的指令。不需要文本段,因为不需要将可执行文件映射到内存区域。

关于linux - Linux 内核线程的调度或抢占是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21438357/

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