Chinaunix首页 | 论坛 | 博客
  • 博客访问: 456967
  • 博文数量: 362
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-26 17:08
文章分类

全部博文(362)

文章存档

2015年(362)

我的朋友

分类: 嵌入式

2015-12-10 23:56:40

原文地址:S3C2440中Cache的作用 作者:

    基于程序访问的局部性,在主存(内存)CPU通用寄存器之间设置一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据主存调入这个存储器,供CPU在一段时间内使用,对提高程序的运行速度有很大作用。这个cache一般称为高速缓存
 
Cache两种写方式:
①写穿式(Write Through)也叫直写式
任一CPU发出写信号送到Cache的同时,也写入主存,保证主存的数据同步更新。优点是操作简单,但由于主存速度慢,降低了系统的写速度并占用了总线的时间。
②回写式(Write Back)
数据一般只写到Cache,这样可能出现Cache中的数据得到更新而主存中的数据不变(数据陈旧)的情况。此时可在Cache中设一个标志地址及数据陈旧的信息,只有当Cache中的数据被换出或强制进行”清空“操作时,才将原更新的数据写入主存响应的单元中,保证了Cache和主存中数据一致。
 
Cache两个操作
①”清空“(clean):把Cache或Write buffer中已经脏的(修改过,但未写入主存)数据写入主存
②”使无效“(Invalidate):使之不能再使用,并不将脏的数据写入主存。
 
S2C2440内置了指令Cache(ICaches)、数据Cache(DCaches)、写缓存(Write buffer),需要用到描述符中的C位(Ctt)和B位(Btt)
1)指令Cache(ICaches)
   系统刚上电或复位时,ICaches中的内容是无效的,并且ICaches功能关闭。往Icr位(CP15协处理器中寄存器1的第12位)写1可以启动ICaches,写0停止ICaches.
   ICaches一般在MMU开启后使用,此时描述符的C位用来表示一段内存是否可以被Cache若Ctt=1,允许Cache,否则不允许。如果MMU没有开启,ICaches也可以被使用,此时CPU读取指令时所涉及的内存都被当做允许Cache.
ICaches关闭时,CPU每次取指都要读取主存,性能低,所以通常尽早启动ICaches
ICaches开启后,CPU每次取指时都会先在ICaches中查看是否能找到所用指令,而不管Ctt是0还是1。如果找到成为Cache命中,找不到称为Cache丢失,ICaches被开启后,CPU的取指有如下三种情况:
①Cache命中且Ctt为1时,从ICaches中取指,返回CPU
②Cache丢失且Ctt为1时,CPU从主存中取指,并且把指令缓存到Cache中
③Ctt为0时,CPU从主存中取指
2)数据Cache(DCaches)
  与ICaches相似,系统刚上电或复位时,DCaches中的内容无效,并且DCaches功能关闭,Write buffer中的内容也是被废弃不用的。往Ccr位(CP15协处理器 中寄存器1的第二位)写1启动DCaches,写0停止DCaches。Write buffer和DCaches紧密结合,额米有专门的控制来开启和停止它.
  与ICaches不同DCaches功能必须在MMU开启之后才能被使用。
DCaches被关闭时,CPU每次都去内存取数据。
DCaches被开启后,CPU每次读写数据时都会先在DCaches中查看是否能找到所要的数据,不管Ctt是0还是1,找到了成为Cache命中,找不到成为Cache丢失。
通过下表可知DCaches和Write buffer在Ccr,Ctt,Btt各种取值下,如何工作,Ctt and Ccr 意为 Ctt与Ccr进行逻辑与后的值.

 使用Cache时需要保证Cache、Write buffer的内容和主存内容一致,保证下面两个原则:
①清空DCaches,使主存数据得到更新
②使无效ICaches,使CPU取指时重新读取主存
在实际编写程序时,要注意如下几点:
①开启MMU前,使无效ICaches,DCaches和Write buffer
②关闭MMU前,清空ICaches、DCaches,即将”脏“数据写到主存上
③如果代码有变,使无效ICaches,这样CPU取指时会从新读取主存
④使用DMA操作可以被Cache的内存时,将内存的数据发送出去时,要清空Cache;将内存的数据读入时,要使无效Cache
⑤改变页表中地址映射关系时也要慎重考虑
⑥开启ICaches或DCaches时,要考虑ICaches或DCaches中的内容是否与主存保持一致
⑦对于I/O地址空间,不使用Cache和Write buffer
 
阅读(410) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~