搜索
bottom↓
回复: 8

请问怎么去了解cache(另外咨询学习mips的方法)-不知道这个问题发到哪里比较合适,权衡了

[复制链接]

出0入0汤圆

发表于 2010-10-4 22:23:44 | 显示全部楼层 |阅读模式
一直以来都在单片机的范围内晃悠,从51到cortex-m3,自认为了解的不错。

换了一个工作,开始接触mips,虽然工作不需要了解太多关于体系结构的问题,但是基于个人爱好还是希望能把所有问题都搞清楚。

最迷惑的就是cache。d-cache 和i-cache两种。也就是指令缓存和数据缓存。

查询关于cache的叙述,不外乎就是以下内容

a 都是说cache的出现是为了解决cpu访问内存带来的瓶颈,把cpu常用到的数据放到cache里面,从cpu访问内存就可以用访问cache代替,

b 当cache没有相关的数据的时候再启动cache的读操作,把相关的内存中的数据读到cache里面。

c 向cache里写数据分写回和写通两种模式。

d 一些关于同步内存和cache的相关方法。

但是我想问以下问题:

1 关于数据cache:cache与内存的数据通信是谁控制的,cpu读写数据的时候,怎么知道cache里面有没有相关的数据。
2 关于指令cache:谁控制要执行的指令从内存中拷贝到指令cache里面。(执行的指令是直接从程序存储器中拷贝到指令cache还是从程序存储器里面拷贝到内存,然后再从内存拷贝到cache)
3 谁决定了要从内存中拷贝那些数据或者那些指令到cache,就是当前执行的指令决定么?

以下可能和cache没有太多关系,但是由于我不懂,一起问在这里了。
4 cache和mmu有什么关系么?
5 虚拟地址和实际地址的转换参照什么标准?说参照什么标准完成虚拟地址和到实地址的转换?
6 不同的应用程序怎么就能映射到不同的实地址了?

确实不了解,所以问的问题可能有点乱(可能问题本身就有问题),希望高手能够不吝赐教。我也想知道,关于上面的问题,看那些资料或者书籍比较好?希望高手能够推荐一些,感谢。



ps:
再发个牢骚,国内翻译的资料真太差劲了,看了所有关于mips的译作,真的是惨不忍睹,真的,不知道怎么能出版的,说的真的不是中国话,虽然是由中文写出来的。

出0入0汤圆

发表于 2010-10-4 23:04:53 | 显示全部楼层
看来要去看体系结构了,你得把结构说明,是X86,还是ARM

出0入0汤圆

 楼主| 发表于 2010-10-5 15:44:40 | 显示全部楼层
兄弟,不是说是mips了么

出0入85汤圆

发表于 2010-10-5 16:26:28 | 显示全部楼层
网上的:cache的基本原理
  CPU与cache之间的数据交换是以字为单位,而cache与主存之间的数据交换是以块为单位。一个块由若干定长字组成的。当CPU读取主存中一个字时,便发出此字的内存地址到cache和主存。此时cache控制逻辑依据地址判断此字当前是否在 cache中:若是,此字立即传送给CPU;若非,则用主存读周期把此字从主存读出送到CPU,与此同时,把含有这个字的整个数据块从主存读出送到cache中。由始终管理cache使用情况的硬件逻辑电路来实现LRU替换算法

按这个说法,cache应该是CPU自己处理的,再说,好像没有控制cache的指令,我们也干涉不了,它与缓冲有点类似

出0入0汤圆

发表于 2010-10-9 10:55:58 | 显示全部楼层
可参考
arm嵌入式系统开发--软件设计与优化(arm system developer‘s guide:designing and optimizing system software) 【12章 高速缓冲存储器cache】

出0入0汤圆

发表于 2010-10-9 11:24:07 | 显示全部楼层
see mips run linux
有中文版啊,还不错的,也有电子书。

出0入0汤圆

发表于 2014-8-27 09:14:46 | 显示全部楼层
Huaan 发表于 2010-10-5 16:26
网上的:cache的基本原理
  CPU与cache之间的数据交换是以字为单位,而cache与主存之间的数据交换是以块 ...

写的不错。

出0入0汤圆

发表于 2014-8-27 09:45:23 | 显示全部楼层
本帖最后由 dr2001 于 2014-8-27 09:51 编辑

"1 关于数据cache:cache与内存的数据通信是谁控制的,cpu读写数据的时候,怎么知道cache里面有没有相关的数据。"
建议看一些计算机体系结构的书。

= Cache和内存的数据交换是Cache自己的控制器控制的。
= 从CPU内核的接口往外看(看向内存方向),是无法直接观察到Cache的存在的,即,Cache是一个透明的中间层。CPU在发起读/写请求时,不知道Cache中是否存在相关数据。

= CPU可以通过特定的寄存器(不同的CPU方法不一定类似),间接了解到Cache的状态,并加以控制。
如果假定CPU无法通过任何手段(访问Cache控制器的手段)了解到Cache的信息,那么CPU依然可以通过配合MMU及DMA控制器,用内存访问延迟,DMA等等手段探知Cache的存在性,甚至了解到Cache的行为细节。该探知的过程类类似于:先了解别人的Cache是怎么设计和工作的,然后假定这个Cache也是那么干的,设计一系列特定的测试例进行黑箱观测,看结果是否符合预期。

"2 关于指令cache:谁控制要执行的指令从内存中拷贝到指令cache里面。(执行的指令是直接从程序存储器中拷贝到指令cache还是从程序存储器里面拷贝到内存,然后再从内存拷贝到cache)"
3 谁决定了要从内存中拷贝那些数据或者那些指令到cache,就是当前执行的指令决定么?

= Cache控制器决定Cache Fill操作。
可以简单把Cache看做二端口黑箱,一边CPU(上游端口),一边下级Cache/内存(下游端口)。Cache Fill只是从面向下游的端口抓数据;从哪个地址抓,抓多少数据,由Cache控制器根据上游端口的请求(当前的,过去的,etc)以及Cache自己的特性(Cache Line的大小,等)决定。至于下游端口连到哪里,那不是Cache管的,是架构决定的。

4 cache和mmu有什么关系么?
Cache是数据的缓存机制;MMU负责内存地址映射和访问权限管理。
他们最有关系的地方是Cache和MMU在地址映射的先后顺序,对一些事情有影响。

5 虚拟地址和实际地址的转换参照什么标准?说参照什么标准完成虚拟地址和到实地址的转换?
6 不同的应用程序怎么就能映射到不同的实地址了?

地址映射是MMU干的,所以,标准就是MMU的Spec。具体的映射方案由MMU的地址映射表提供,表的其结构由MMU的Spec决定,OS去操作那个表即可。

每个进程拥有自己独立的地址映射表,就可以了。OS在后台维护物理内存块的分配。


再发个牢骚,国内翻译的资料真太差劲了,看了所有关于mips的译作,真的是惨不忍睹,真的,不知道怎么能出版的,说的真的不是中国话,虽然是由中文写出来的。
文档看英文的吧。。。译作不是了解原理的人翻译的话,基本上没办法把事儿说明白。

出0入0汤圆

发表于 2014-8-27 09:46:54 | 显示全部楼层
Huaan 发表于 2010-10-5 16:26
网上的:cache的基本原理
  CPU与cache之间的数据交换是以字为单位,而cache与主存之间的数据交换是以块 ...

Cache是独立于内核的,但是CPU可以通过特定的接口控制。ARM AA32上是CP15的伪协处理器指令。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 06:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表