linux內存管理 (二) [硬件3][概念] SMP-Consistency之內存順序模型1

內存順序模型解讀

內存順序模型解讀
	內存順序解讀:
		到底我們看到的內存生效的順序是怎麼樣的?這個就叫內存順序模型。

		程序順序 : 			程序給出的指令的執行順序(一般涉及到讀寫內存),這代表程序員的意欲。// 程序員從代碼中直觀看出來的順序
		內存讀寫順序 :		內存真的寫入數據的順序 , 內存的讀寫,到 設備顯示 邊際作用(也就是生效,被觀察到發生更改) 有一定的時間間隔
		觀察(生效)順序 : 	這是各個CPU(包括寫入的cpu)看到的在內存中發生的順序,請注意了,這不是內存真的寫入數據的順序,而是所有的“觀察者”看到的內存中發生更改的順序。

		一般來說,寫會導致邊際作用,也就是會產生效果(例如,值發生變化,例如,串口上一個數據發出.)
		一般來說,讀也會但是很少導致邊際作用,也就是會產生效果.(例如,讀fifo,能將fifo清空一個字節或者多個字節.)

	強內存順序:
		是一種靠向程序順序的順序模型。所謂Total,就是說,內存(在寫操作上)是有一個全局的順序的(所有人看到的一樣的順序),就好像在內存上的每個Store動作必須有一個排隊,一個弄完才輪到另一個,這個順序和你的程序順序直接相關。所有的行爲組合只會是所有CPU內存程序順序的交織,不會發生和程序順序不一致的地方。x86和SPARK都用了這個內存模型。
		這個方式對程序員更友好,但對芯片實現者不友好,因爲如果用戶沒有這個順序要求,CPU爲了TSO的承諾,有執行資源也只能瞪眼看着,這影響效率。

	弱內存順序:
		是把是否要求強制順序這個要求直接交給程序員的方法,CPU默認是弱內存順序.
		換句話說,CPU不去保證這個順序模型(除非他們在一個CPU上就有依賴),程序員要主動插入內存屏障指令來強化這個“可見性”。也沒有一個全局的對所有CPU都是一樣的Total Order。

ARMv6 的內存順序模型

  • 概念
	內存類型屬性簡介: // 內存區域的分類概括  // 相互排斥 
		• Normal
			Normal是等冪的,具有以下特性:???
				•可以重複寫入事務,而不會產生任何邊際作用
				•重複讀取事務返回寫入正在讀取的資源的最後一個值
				•如果中斷,可以重新啓動事務
				•多字節訪問不需要是原子的,並且可以重新啓動或重放
				•可以支持未對齊的訪問
				•可以先合併事務要訪問目標內存系統
				•讀取事務可以預取其他內存位置,而不會產生任何邊際作用。
		• Device
		• Strongly Ordered.
			系統外圍設備映射內存 在ARMv6中定義爲Device或者Strongly Ordered.系統外圍設備(I/O)通常符合不同的訪問規則;
				I/O訪問的示例如下:
					•連續訪問添加(寫入)或刪除(讀取)排隊值的FIFO
					•訪問可用作中斷確認的中斷控制器寄存器,更改控制器本身的狀態
					•用於設置正常內存區域定時(和正確性)的內存控制器配置寄存器
					•內存映射外設,其中訪問內存位置會在系統內造成邊際作用。
			
				爲了確保系統的正確性,訪問規則比對Normal的限制更嚴格:
					•訪問(讀和寫)可能會產生邊際作用
					•事務不能重複,例如,從異常返回時
					•必須維護事務編號、大小和順序
  • 實現
相關內存屬性是
		1.內存類型屬性
			根據 程序順序 與 觀察(生效)順序 之間的相關關係 的不同 , 分爲三種類型
		2.shared屬性
		3.MMU/MPU相關屬性
			一些屬性與ARMv6的MMU相關。一般來說,這些也可以應用於基於MPU的系統。
			Domain 和 access permission
		4.不同種類的存儲系統的屬性,在不同的章節有描述
			 CACHE
			 write buffers
			 TCM

其他

  • ARMv6 中的 強順序內存和設備內存 區別及相同

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章