学习操作系统P3 多处理器编程:从入门到放弃 (线程库;现代处理器和宽松内存模型)
啊
啊
啊
啊
操作系統會自動把線程放置在不同的處理器上
可以用top觀察CPU使用率
啊
啊
啊
啊
a
甚至連一個簡單的求和程序都做不對
a
匯編語言中的 lock: CPU的特性,通過總線加鎖,解決多處理器的并發問題
啊
啊
a
a
a
a
a
a
asm volatile("":::"memory"); 用來告訴編譯器這里不要優化
a
a
這里的 asm volatile("" : : "memory"); 的作用是:防止編譯器把 printf 放到 y = 1 前面
根據jyy畫出的狀態機所示,這個代碼有可能的結果只有
x = 0, y = 1;
x= 1, y= 0;
x = 1, y = 1;
無論如何不可能得到 x=0 y =0
a
然而,實際上,我們得到了 0 0,原因是什么呢?
啊
在CPU里,匯編指令會被翻譯成更小的 u OPs,并且重排
今天的處理器基本就是在 亂序執行 的框架下,不停做各種優化
啊
在執行到 movl $1, (x) 時,已經 cache miss
亂序處理器在等待 cache 的時候會繼續執行下一條指令,從而導致 多處理器間即時可見性的喪失
TODO: 這一段實話說看不懂,也許我應該做完CPU cache 的部分再來看
啊
ARM 和 RISC-V 的內存模型更差,很難保證內存的一致性
啊
解決方案:加上 mfence
mfence 保證內存寫入共享內存以后,才可以執行下一條指令
啊
啊
總結
以上是生活随笔為你收集整理的学习操作系统P3 多处理器编程:从入门到放弃 (线程库;现代处理器和宽松内存模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aop中的名词解释
- 下一篇: laravel 导入导出(实际上还是