linux内核中内存障碍的目的

linux内核中内存障碍的目的,第1张

概述Robert Love说“set_task_state(task,state)将给定任务设置为给定状态.如果适用,它还提供内存屏障以强制在其他处理器上排序(这仅在SMP系统上需要)否则它相当于 task-> state = state 我的问题是: 内存屏障如何强制在其他处理器上进行排序? 罗伯特的爱是什么意思 – 为什么这需要? 他可能会谈论这个顺序是什么?他在这里谈论调度队列吗? 如果是这样, Robert love说“set_task_state(task,state)将给定任务设置为给定状态.如果适用,它还提供内存屏障以强制在其他处理器上排序(这仅在SMP系统上需要)否则它相当于
task-> state = state

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

罗伯特的爱是什么意思 – 为什么这需要?
他可能会谈论这个顺序是什么?他在这里谈论调度队列吗?

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

解决方法 为了挤出额外的性能,你的cpu会运行 Out of Order Execution,它可以按照与代码中给出的顺序不同的顺序运行 *** 作.优化编译器可以更改 *** 作的顺序以使代码更快.编译器编写者/内核类型必须注意不要改变期望(或至少符合规范,以便他们可以说你的期望是不对的)

这是一个例子

1: cpu1: task->state = someModifIEdStuff2: 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内核中内存障碍的目的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1018177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存