gpt4 book ai didi

linux - 如果 Linux 在多核 CPU 上运行,是否每个内核都有一个全局 "current"?

转载 作者:太空狗 更新时间:2023-10-29 11:36:05 26 4
gpt4 key购买 nike

有些书说

The current pointer refers to the user process currently executing. During the execution of a system call, such as open or read, the current process is the one that invoked the call.

如果多个进程同时在多核 CPU 上调用一个系统调用(相同或不同的系统调用),每个内核调用一个系统调用怎么办?内核是否需要多个“当前”全局变量?

最佳答案

如果您对这是如何实现的感到好奇:在 x86-64 上,每个 CPU 的 gs 选择器寄存器用于指向特定于该 CPU 的数据 block 。这使得使用一条指令访问该数据变得很容易。

正如 hobbs 指出的那样,current 是一个扩展为对内联函数的调用的宏,它通过一些其他内联函数和内联 asm,扩展为如下指令

movq %gs:current_task,%rax

将此 CPU 的 current 指针加载到 rax 寄存器中。这里的标签 current_task 是每个 CPU 数据 block 中 current 指针的偏移量,由链接器(或模块加载器)计算并填充。

您可以在 include/asm/percpu.h 中查看详细信息。

关于linux - 如果 Linux 在多核 CPU 上运行,是否每个内核都有一个全局 "current"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37518797/

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