我试图了解 linux 系统调用 sched_setaffinity() 的工作原理。这是我的问题here的后续内容。
我有这个指南,它解释了如何使用系统调用并且有一个非常简洁(工作!)的例子。
所以我下载了 Linux 2.6.27.19内核源代码。
我对包含该系统调用的行进行了“grep”,得到了 91 个结果。没有希望。
最终,我试图了解内核如何为特定内核(或处理器)设置指令指针。
我熟悉单核单线程程序的工作原理。有人可能会发出“jmp foo”指令,这基本上将 IP 设置为“foo”标签的内存地址。但是当一个有多个内核时,必须说“在内存地址 foo 处获取下一条指令,并将指令指针设置为2 号内核开始执行”。
在汇编代码中,我们在哪里指定执行该操作的内核?
回到内核代码:这里重要的是什么?文件 'kernel/sched.c' 有一个名为 sched_setaffinity() 的函数,但返回类型“long” - 这与它的手册页不一致。那么这里重要的是什么?这些模块中的哪些显示了发出的汇编指令?什么模块正在读取“task_struct”,查看“cpus_allowed”成员,然后将其转换为指令?(我还翻阅了 glibc 源代码——但我认为它只是调用内核代码来完成这项任务。)