Bus,Exclusive access,memory attribute
指令LDREX,STREX是在armv6中新加的指令,配合AMBA3--AXI中的lock[1:0]信号。
在Atomic Access一节中是这么规定的:ARLOCK[1:0]/AWLOCK[1:0]信号为2'b00-------Normal access
ARLOCK[1:0]/AWLOCK[1:0]信号为2'b01-------Exclusive access
ARLOCK[1:0]/AWLOCK[1:0]信号为2'b10-------Locked access
exclusive的操作相对于lock操作的优点是:只根据返回的resp来确定原子操作是否正确,不会影响interconnect的性能。
对于Exclusive access,从slave的角度来看,首先slave必须支持Exclusive的访问,具体slave必须有一些monitors 来记录收到exclusive访问时的,
ARID/AWID,ARADDR/AWADDR,ARSIZE/AWSIZE,ARLEN/AWLEN。总之必须保证访问的master和地址完全的一致。
其中的ARID/AWID由arm core来决定,如果是core0,ARID/AWID一般就是0。
从master的角度来看,master要发出一个exclusive的访问必须,先发出exclusive read后再发出exclusive write来完成一次exclusive的访问。
1)对于exclusive访问,正确的response是EXOKAY。而由于有的slave不支持exclusive的访问后直接忽视掉lock信号,此时就会
返回OKAY信号。
2)在exclusive read之后,slave仍可在该地址接收normal write,此时如果exclusive指定的地址中的数据已经改变,则slave不
会再下次exclusive write的时候,返回EXOKAY,取而代之会返回OKAY,表示出错了,此时write的值也不会写入。
3)在一次exclusive read会后,可以不等exclusive write,直接再发出exclusive read,这样slave monitor的地址就会改变,
相当于发起一个新的exclusive操作。
exclusive的操作,不能是cache的属性。
在slave端,monitor的最小的地址是length*size,同样也可以monitor一个比这个乘机更大的地址空间,但是这样可能会使本来正确的
exclusive access却报出了错误。
对于lock操作,主要需要interconnect保证只有特定ID的master可以访问一个特定的slave地址,直到同一ID的master发出一个unlock的操作接收到。
一个master可以开始一个read/write的lock sequence,但这时必须保证没有其他的outstanding的transaction等待完成。
当一个master开始一个lock的transaction时,必须保证没有其他的locked的transaction还没有完成。
master必须保证一个locked transaction sequences中,最多只有两个transaction,同时在lock操作的过程中,
所有的transaction都必须是同样的ID,一个lock的sequence,以最后一个unlock的transaction结束。ARLOCK/AWLOCK信号无效。
LDREX和STREX指令可以用在多个处理器和共享内存系统之间,实现进程间的通信。
LDREX表示从储存器加载数据,相当于读操作,
如果该物理地址有共享TLB属性,则LDREX会将该物理地址标记为由当前处理器独占访问,并且清除该处理器对其他任何物理地址的任何独
占访问标志。然后将该物理地址标记为一个未完成的exclusive访问。
如果该物理地址没有共享TLB属性,直接将该物理地址标记为一个未完成的exclusive的访问。
void ldrex32(WORD addr, WORD *data)
{ asm("ldrex r2, [r0]"); asm("str r2, [r1]"); }
STREX表示向存储器储存数据,相当于写操作,
如果该物理地址没有共享TLB属性,如果该执行处理器中有一个已标记未访问完成的exclusive操作时,STREX会进行储存,result返回0。
如果该执行处理器无一个已标记未访问完成的exclusive操作时,STREX不会进行储存,result返回1。
如果该物理地址有共享TLB属性,如果该执行处理器中有一个已标记独占访问的未访问完成的exclusive操作时,STREX会进行储存,
result返回0。
如果该执行处理器中无一个已标记独占访问的未访问完成的exclusive操作时,STREX不会进行储存,
result返回1。
void strex32(WORD addr, HALF data, WORD *result)
{ asm("strex r3, r1, [r0]"); asm("str r3, [r2]"); }
AXI中的memory attribute属性,由AxCache信号来指定,0-3bit分别代表Bufferable,Cacheable,Read Allocate,Write Allocate。
AxCache[0],Bufferable,只针对写操作,表示interconnect,或者其他类似component,可以先返回resp,之后再
写向final distination。
AxCache[1],1) 与RA,WA配合,控制cache;
2) 表示transaction的属性,可以在中间被更改,对于write操作,很多的write操作可以进行merge。
对于read操作,表示该地址可以被prefetch。
AxCache[2],Read之后更新到cache line中。
AxCache[3],Write的时候,cache line中也保存最新的值。
Bus,Exclusive access,memory attribute的更多相关文章
- Bus memory attribute
根据程序的局部性原理,在主存与CPU之间设置的一个高速的容量较小的存储器,叫做cache. ARM cache架构由cache存储器和写缓冲器(write-buffer)组成.其中Write_buff ...
- IEEE 802.11p (WAVE,Wireless Access in the Vehicular Environment)
IEEE 802.11p(又称WAVE,Wireless Access in the Vehicular Environment)是一个由IEEE 802.11标准扩充的通讯协定.这个通讯协定主要用在 ...
- access基本操作(c#操作,远程连接,执行sql,加密,备份)
前言 最近项目用到了access,是的就是access,工作在桌面型的小数据库应用还是会用到的,如果你确定永远不会遇到access的操作,请忽略此篇文章 1.vs配置access 既然是数据库,就少不 ...
- Mysql创建新用户后无法登录,提示 Access denied for user 'username'@'localhost' (using password: YES)
MySQL创建新用户后无法登录,提示 Access denied for user 'username'@'localhost' (using password: YES) ,多半是因为存在匿名用户, ...
- access数据库用sql语句添加字段,修改字段,删除字段
用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...
- 打开office2010里面的access,总是提示要配置Office single image
刚安装了,office2010,打开里面的access时,总是提示要配置Office single image,但打开word和excel没问题,很是不舒服 在网上找到N种方法,试下来还是不行. 后来 ...
- 显示刚刚添加的最后一条数据,access,选择语句,select
显示刚刚添加的最后一条数据,access,选择语句,select select top 1 * from s1 order by id desc
- Delphi 异或,英文为exclusive OR,或缩写成xor
异或,英文为exclusive OR,或缩写成xor 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: a⊕b = (¬a ∧ b) ∨ ...
- 发布网站,报Access to the path is denied的解决办法
错误: Server Error in '/' Application.---------------------------------------------------------------- ...
随机推荐
- 使用sql语句删除数据库中重复的数据
在数据库中有一批数据,但是由于数据入库之前某些不当的操作引入了一些重复的数据,需要将这些重复的数据删除.数据的结构大概是下面的样子 CREATE TABLE [dbo].[aaa]( [id] [in ...
- C#取得Web程序和非Web程序的根目录的N种取法
取得控制台应用程序的根目录方法方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.BaseDi ...
- Flask详解
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- Django之form组件is_valid校验机制
#先来归纳一下整个流程 #()首先is_valid()起手,看seld.errors中是否值,只要有值就是flase #()接着分析errors.里面判断_errors是都为空,如果为空返回self. ...
- em 单位
借 Lea verou 的话: 当某些值相互依赖时,应该把它们的相互关系用代码表达出来. 通常情况下,我们会希望字号和其他尺寸能够跟父元素的字号建立关联,此时em就很好的表达了这种关系. 在CSS V ...
- Python面向对象之成员修饰符
对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...
- 洛谷P2178 品酒大会【后缀数组】【单调栈】
题目描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加. 在大会的晚餐上,调酒师 Rainb ...
- 2018-2019-2 20165330《网络对抗技术》Exp6 信息搜集与漏洞扫描
目录 基础问题 相关知识 实验目的 实验内容 实验步骤 实验总结与体会 实验目的 掌握信息搜集的最基础技能与常用工具的使用方法. 返回目录 实验内容 各种搜索技巧的应用 使用搜索引擎 搜索网址目录结构 ...
- 自定义maven插件
之前虽然一直知道maven插件是可以自定义的,不过一致没有用过.最近接触到了swagger项目中的codegen自动生成代码的功能,并且在codegen源码中,也是存在maven插件功能的,所以自己就 ...
- 20144306《网络对抗》MAL_免杀原理与实践
一.基础问题回答 1.杀软是如何检测出恶意代码的? (1)特征码:类似于人的生物特征,恶意代码可能会包含一段或多端数据能代表其特征.杀软一般会对文件内容进行静态扫描,将文件内容与特征库进行匹配,来检测 ...