当前位置: 首页 > news >正文

访问的网站显示建设中济南seo排名优化推广

访问的网站显示建设中,济南seo排名优化推广,武昌网站建设,原创作文网站本文以Cortex-A53处理器为例,通过访问 处理器中的内部存储单元(tag RAM和dirty RAM),来读取cache line 中的MOESI信息。 Cortex-A53提供了一种通过读取一些系统寄存器,来访问Cache 和 TLB使用的一些内部存储单元的机制…

本文以Cortex-A53处理器为例,通过访问 处理器中的内部存储单元(tag RAM和dirty RAM),来读取cache line 中的MOESI信息。
Cortex-A53提供了一种通过读取一些系统寄存器,来访问Cache 和 TLB使用的一些内部存储单元的机制。这个功能可以探查出当缓存中的数据与主存中的数据不一致时存在的问题。
此外,A64模式和A32模式的读取方式不同:
当处理器处于A64模式时,先通过一些只写(write-only)寄存器来选择具体的cache line和内存地址,然后通过只读寄存器来读取具体的tag信息。下图为相关寄存器以及相关操作指令,需要注意的是,这些操作只在EL3时可用,如果在其他模式下使用这些指令,将会进入Undefined Instruction 异常。
在这里插入图片描述
当处理器处于A32模式下时,先通过一些只写(write-only)CP15寄存器来选择具体的cache line和内存地址,然后通过只读CP15寄存器来读取具体的tag信息。下图为相关寄存器以及相关操作指令,需要注意的是,这些操作只在EL3时可用,如果在其他模式下使用这些CP15指令,将会进入Undefined Instruction 异常。
在这里插入图片描述
接下来,本文以Cortex-A53的Data cache为例,读取其某个cache line的tag信息,其具体的步骤很简单,分为两步:

  1. 写入Data Cache Tag Read Operation Register,写入的内容为具体的Set和way信息,通过way index和set index来定位到想要读取的cache line。
  2. 读取相应的 Data Register 0 和 Data Register 1寄存器,通过对Data Register寄存器里面的数据进行解码,来获取tag 信息。
    其他信息,比如Data cache 的data信息Instruction Cache的data或者tag信息,以及TLB的data信息,都可以用这种方式读取得到。

Step1:将Set/way信息写入Data Cache Tag Read Operation Register

首先,我们需要从一个虚拟地址(VA)中解析出Set index信息。
下图为Cortex-A57的4-way组相连的32KB大小的data cache结构,其cache line大小也为64 bytes,从图中可知,一个VA可以被分成几个部分:Tag,Set index,word index以及byte index。其中Set index = VA[13:6]。
在这里插入图片描述
在另一个实例中,32KB大小的4-way组相连data cache,cache line大小为32 bytes,其Set index = VA[12:5]:
在这里插入图片描述
Cortex-A53的Data cache为4-way 组相连结构。假设其为32KB,一个cache line的大小为64 bytes,我们就可以求出该data cache中有 32 KB / 64 B / 4 = 2^7 = 128个set(组),也就是说至少需要7个bit才能完整解析出具体的set index。如下图所示,可以通过公式:

S = log2(Data cache size / 4).

来计算出Set index的范围:Set index = VA[12:6]。
由于是4-way 组相连结构,cache line 可以存在与任意一个way中,所以我们的cache way可能为0,1,2,3中任意一个数字。
求得了set和way的index后,需要对其进行编码,然后写入到Data Cache Tag Read Operation Register寄存器中。其编码规则如下图所示,只需将Set和way的值写入对应的bit中即可,其中Rd[5:3]为cahche double word数据的偏移量,由于本次示例是读取tag信息,所以Rd[5:3]为0即可。
在这里插入图片描述
所以我们要写入Data Cache Tag Read Operation Register的Rd的值可以通过以下代码获取:

unsigned int get_Rd_data(int * VA, way_num)
{unsigned int set_way_index = VA | 0x1FC0; //get way index, VA[12:6]set_way_index |= way_num < 30; //way_num could be 0,1,2,3 return set_way_index;
}

Rd中除了Set和way信息,其他值均为0,0x1FC0为VA[12:6]全为1的情况:
在这里插入图片描述
然后我们使用CP15寄存器将Rd的值写入,假设Rd为R0:

MCR p15, 3, r0, c15, c2, 0   ; r0 = get_Rd_data(VA,way_num)

Step2:读取Data Register 1和Data Register 0数据并解码

将Set/way信息写入Data Cache Tag Read Operation Register 后,相当于选择了想要操作的cache line,接下来我们将读取Data Register 1和Data Register 0的数据来获取该cache line里的tag信息,除了tag信息外,我们还可以从Data Register 1和Data Register 0两个寄存器中获取:

  1. MOESI 状态信息
  2. outer内存属性
  3. valid 信息
    可获得的信息具体见下图:
    在这里插入图片描述
    在这里插入图片描述
    需要注意的是,如果是想获取MOESI状态信息,则需要两个寄存器配合使用,即读取Data Register 0 [1:0]以及Data Register 1 [30:29] ,Data Register 0 [1:0]里的为来自Dirty RAM的部分状态信息,Data Register 1 [30:29]里的为来自tag RAM的部分MOESI信息,
    其具体的组合见下图:
    在这里插入图片描述
    比如读取到的Data Register 0 [1:0]为1,以及Data Register 1 [30:29]也为1,根据上图的组合关系,可知当前cache line的MOESI状态为 SharedDirty(O)。

示例代码如下:

; step 1: write set index and way num into Data Cache Tag Read Operation Register
MCR p15, 3, r0, c15, c2, 0   ; r0 = get_Rd_data(VA,way_num)
; step 2: read Data Register 1 and Data Register 0
MCR p15, 3, r1, c15, c0, 0   ;r1 =  Data Register 0 
MCR p15, 3, r2, c15, c0, 1   ;r2 =  Data Register 1 

参考文章:
DDI0500E_cortex_a53_r0p3_trm.pdf

http://www.wangmingla.cn/news/36381.html

相关文章:

  • 为什么企业需要建设网站?在线友情链接
  • 陕西网站建设公司哪有整站优化代理
  • 手机购物网站模板市场监督管理局投诉电话
  • 国外网站建设官网百度关键词推广怎么做
  • 网站建设仿站专业海外网站推广
  • 无锡信息网招聘武汉seo排名扣费
  • 做网站的要到处跑吗百度网站官网网址
  • 做视频网站技术壁垒在哪里推广员是做什么的
  • 申报网站百度关键词搜索排名多少钱
  • 建设银行网上流览网站东莞网络营销渠道
  • js 网站源码百度指数官网查询入口
  • 医疗网站建站2020年百度搜索排名
  • 广元商城网站开发北京seo服务商
  • 厦门做企业网站找谁百度提交工具
  • 网站跳转qq外链群发
  • 河北 石家庄 网站建设seo系统源码
  • 做网站不推广管用吗如何注册属于自己的网站
  • 动态网站设计成品百度登录账号首页
  • 提高网站浏览量台州关键词优化报价
  • 南川网站建设竞价推广是什么工作
  • 电商网站建设实验心得搜索引擎推广方式有哪些
  • 网站开发与设计多少钱一个网站广州seo网站推广优化
  • 微信怎么做一些微网站网站seo关键词优化技巧
  • 网站链接导出长尾关键词挖掘工具爱网站
  • 上海出啥大事了今天windows优化大师有必要安装吗
  • 商城网站如何建设优化设计方法
  • 可信的手机网站建设花西子网络营销案例分析
  • 邹城网站定制做推广的软件有哪些
  • 网站建设步骤 优帮云推广形式
  • 网站怎样做压力测试怎么接广告赚钱