gpt4 book ai didi

linux - linux内核中内存屏障的目的

转载 作者:IT王子 更新时间:2023-10-29 01:26:21 24 4
gpt4 key购买 nike

Robert Love 说“set_task_state (task, state) 将给定任务设置为给定状态。如果适用,它还提供内存屏障以强制对其他处理器进行排序(这仅在 SMP 系统上需要)否则它是相当于任务->状态=状态

我的问题是:内存屏障如何强制对其他处理器进行排序?

罗伯特·洛夫的意思是什么 - 为什么需要这样做?他可能在说什么命令?他是在谈论这里的调度队列吗?

如果是这样,SMP 中的每个处理器是否都有不同的调度队列?我很困惑

最佳答案

你的 CPU,为了挤出额外的性能,做 Out of Order Execution ,它可以按照与代码中给出的顺序不同的顺序运行操作。优化编译器可以更改操作顺序以使代码更快。编译器编写者/内核类型必须注意不要改变期望(或者至少要符合规范,这样他们才能说您的期望不正确)

举个例子

1: CPU1: task->state = someModifiedStuff
2: CPU1: changed = 1;
3: CPU2: if (changed)
4: CPU2: ...

如果我们没有设置状态的障碍,我们可以重新排序 1 和 2。由于两者都没有引用另一个,因此单线程实现不会看到任何差异。但是,在 SMP 情况下,如果我们重新排序 1 和 2,第 3 行可能会看到更改但状态不会更改。例如,如果 CPU1 运行第 2 行(但不是第 1 行),然后 CPU2 运行第 3 行和第 4 行,则 CPU2 将以旧状态运行,如果它随后被清除更改,则 CPU1 刚刚所做的更改将会丢失。

障碍告诉系统,在某个点,在 1 和 2 之间,它必须在继续之前使事情保持一致。

搜索“内存屏障”,您会发现一些好帖子:Memory Barriers Are Like Source Control Operations

关于linux - linux内核中内存屏障的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30914442/

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