|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
常用的存储器,存储周期需要100ns~200ns,在每次进行存储访问时,处理器都需要等待存储器将数据准备好,或者等待数据写入成功后才能继续执行,这样CPU更多的时间是处于等待状态。高速缓冲存储器(cache)和写缓冲区(write buffer)介于CPU和存储器之间,用于提高存储访问的性能。
在具有cache功能的存储系统中,cache被和划分成和存储器大小相同的块。当CPU对存储器访问时,地址首先送入 cache中,cache检查地址是否和自身已有的地址匹配,如命中,则从 cache 中读/写数据,否则从实际的存储器中读/写数据。Cache的容量是有限的,当cache容量已满时,可通过某种算法替换不常用的 cache 。由于程序的执行具有局部性的特点,在进行 cache操作时,一般都把临近地址的内容调入到cache,可提高cache的命中率。
在MMU的页表项中有C、B控制位,可以控制读/写缓存的属性。C位控制读缓冲,当C=1时,使能读缓冲。B位控制写缓冲,当B=1时,使能写缓冲。
Cache的存储缓冲作用对于程序员来说是透明的,cache的使用可以大大的提高系统的性能。在ARM920T中,cache分为两个独立的块,即Icache(指令缓冲)和Dcache(数据缓冲)。Dcache共有16KB,分为512块,每块包含32个字节(即8个字)。每块包含两个修改标志位(分别对应高4个字节和低4个字节)和一个有效位。在cache进行替换时,是以块为单位进行的。在使能cache并允许写缓冲时,CPU进行写操作,若命中,则处理器仅修改cache中对应地址的内容,并把修改标志位置为有效,并非对实际存储器进行操作。当cache由于替换算法或者是应用程序发出清除Dcache内容指令,而将某一块替换出cache后,协处理器对修改标志位进行检查,如有效,则将当前cache中内容写入实际存储器。
由上可知,cache未命中时,因在cache中进行地址匹配,延长访问时间,将会降低系统的性能。在ARM系统中引入了cache内容锁定技术,以降低这种不利影响。Cache内容锁定就是将关键代码和数据预取到cache中,设置一定的属性,使发生cache块替换时,这些关键代码和数据不被替换掉。在实时操作系统中,要不断的发生定时中断以及进行任务切换(每秒钟几十次到上百次),将这些关键代码进行cache锁定从一定程度上可以提高CPU的性能。
虽然cache有很多好处,但cache的使用也需注意很多问题,不当的使用会引起意想不到的问题。在ARM存储系统中,I/O空间和存储器空间统一编址。对I/O的操作与普通存储空间操作是相同的。在使用cache,并允许读/写缓冲时,向一个I/O空间写入数据,实际上并非真正写入到了I/O口,只是对cache中的内容进行了更新,只有该块被替换掉后才能执行真正的写I/O口地址的操作,特别是如果对同I/O口写进行多次写数据,只有最后一次的才是有效的;类似的,对I/O进行读操作,期望进行多次读操作返回不同的值,由于cache缓冲作用,每次返回的值都是从cache中取得的。因此对 I/O 空间的操作便不能使用 cache 技术。
使用cache后,必然对同一地址的内容保存有多个副本,如保存在读缓冲区中,写缓冲区中,实际存储器中。使用MMU建立了一套虚拟地址到物理地址的映射关系之后,假设此时A1地址的内容保存在cache中。当虚拟地址到物理地址映射关系发生变化时,物理地址A1中的内容却尚未更新,在映射关系变化前,需要先清空cache中内容,再重新映射。
|
|