gpt4 book ai didi

c - sched_setaffinity() 是如何工作的?

转载 作者:IT王子 更新时间:2023-10-28 23:54:16 24 4
gpt4 key购买 nike

我想了解 linux 系统调用 sched_setaffinity() 的工作原理。这是我的问题的后续问题 here .

我有this guide ,它解释了如何使用系统调用并有一个非常简洁(有效!)的示例。

所以我下载了 Linux 2.6.27.19 kernel sources .

我对包含该系统调用的行执行了“grep”,得到了 91 个结果。没有希望。

最终,我试图了解内核如何能够为特定内核(或处理器)设置指令指针。

我熟悉单核单线程程序的工作原理。可能会发出“jmp foo”指令,这基本上将 IP 设置为“foo”标签的内存地址。但是当有多个内核时,就必须说“从内存地址 foo 获取下一条指令,并设置内核编号 2 的指令指针以从那里开始执行。”

在汇编代码中,我们在哪里指定执行该操作的内核?

回到内核代码:这里重要的是什么?文件“kernel/sched.c”有一个名为 sched_setaffinity() 的函数,但返回类型“long”——这与其 manual page 不一致。 .那么这里重要的是什么?这些模块中的哪个显示发出的汇编指令?哪个模块正在读取“task_struct”,查看“cpus_allowed”成员,然后将其转换为指令? (我也翻阅了 glibc 源代码 - 但我认为它只是调用内核代码来完成此任务。)

最佳答案

sched_setaffinity() 只是告诉调度程序该进程/线程允许在哪个 CPU 上运行,然后调用重新调度。

调度程序实际上在每个 CPU 上运行,因此它有机会决定接下来在该特定 CPU 上执行什么任务。

如果您对如何实际调用其他 CPU 上的某些代码感兴趣,我建议您看一下 smp_call_function_single()。如果我们想在另一个 CPU 上调用某些东西,这会调用 generic_exec_single()。后者只是将函数添加到 objective-c PU 的调用队列中,并通过一些 IPI 强制重新安排。东西(如果队列为空)。

底线是:_jmp_ 指令没有实际的 SMP 变体。相反,运行在其他 CPU 上的代码相互协作以完成任务。

关于c - sched_setaffinity() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/766395/

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