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 中的 强顺序内存和设备内存 区别及相同

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