在x86上發送IPI后,內存寫入是否可見?

我讀過《英特爾64和IA-3 2體系結構SDM卷3A,9.2內存排序》,但有一個問題一直困擾著我。

如果我首先寫入內存地址,然后用x2APIC發送處理器間中斷(IPI),這意味著發送IPI不需要寫入內存(只需使用wrmsr)。另一個核心接收IPI并讀取內存,它會讀取正確的值嗎?

For example:

最初x=0

Processor 0:

mov [ _x], 1
wrmsr       # use x2APIC to send IPI

Processor 1:

# resive IPI, in the interrupt service routine:
mov r1, [ _x]

是否允許r1=0?

? 最佳回答:

這是一個有趣的問題。從表面上看,人們可能會認為,由于WRMSR是一條序列化指令,它會刷新前面的內存寫入,一切都很好。即便如此,引用手冊:

這些指令迫使處理器完成前一條指令對標志、寄存器和內存的所有修改,并在獲取和執行下一條指令之前將所有緩沖寫入內存。

(Emphasis mine)

它沒有說明發送IPI的順序,因為這是當前指令的一部分,而不是下一個指令。因此,從理論上講,這意味著另一個核心可以執行mov r1, [ _x],而始發核心仍然忙于刷新內容,但考慮到目標核心需要為可能具有更高延遲的中斷提供服務,這是非常不可能的。

正如@harold提到的,這一點是沒有意義的,因為WRMSR并不總是序列化的。閱讀我最初遺漏的腳注:

WRMSR到IA32_TSC_DEADLINE MSR(MSR索引6E0H)和X2APIC MSR(MS R索引802H到83FH)沒有序列化。

因此,絕對不能保證對x的寫入被刷新。

主站蜘蛛池模板: 78成人精品电影在线播放日韩精品电影一区亚洲 | 精品国产一区二区三区四区| 在线观看精品一区| 亚洲电影唐人社一区二区| 一区二区三区免费在线观看| 亚洲熟女综合一区二区三区| 精品一区二区三区在线成人| 一区二区三区国产| 国产综合无码一区二区辣椒| 麻豆视传媒一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 成人乱码一区二区三区av| 国产一区二区三区免费看| 国产精品乱码一区二区三| 国产日韩一区二区三区| 激情内射亚洲一区二区三区| 无码人妻精品一区二区三| 国产激情视频一区二区三区| 色婷婷AV一区二区三区浪潮| 国产凹凸在线一区二区| 狠狠色成人一区二区三区| 中文字幕一区二区三| 国内精品无码一区二区三区 | 色狠狠一区二区三区香蕉| 久久精品一区二区国产| 风间由美性色一区二区三区 | 国产99久久精品一区二区| 亚洲午夜电影一区二区三区| 国产香蕉一区二区在线网站| 亚洲AV噜噜一区二区三区| 婷婷亚洲综合一区二区| 日韩视频在线观看一区二区| 国产福利电影一区二区三区,亚洲国模精品一区 | 中文字幕亚洲综合精品一区| 亚洲香蕉久久一区二区三区四区| 精品少妇人妻AV一区二区三区| 人妻在线无码一区二区三区| 国产成人av一区二区三区在线 | 国产精品无码一区二区在线观| 精品国产免费观看一区| 国产精品视频一区二区三区不卡|