话说以前读前辈大牛们的书的时候,总会遇到一些不懂的名词,那时对那些名词完全是不知所云,甚是痛苦。随着学习的深入,虽然有很多知识仍然不明白是什么意思,但是一些东西却在不断学习的过程中逐渐明白了。这段时间在学习了万木杨老师的《大话处理器》之后,学习到了以前不甚明白的几个名词,于是乎便想和大家来一起分享一些名词。

 

  1. Cache

         Cache这个名词相信大家经常会听到,也可能都明白是什么意思,但是由于我们后面的几个名词都是建立在Cache概念的基础上,所以还是简单介绍下。

        大家都知道处理器的工作频率是很高的,但是内存的工作频率却增长缓慢,在我们大家的个人电脑上,不出意外的话,2者都是差了一个数量级的。我们知道程序和数据都是存储在内存中的,既然内存的工作效率大大低于CPU的工作效率,势必会引起CPU性能的恶化。为了解决这种这种“不协调”的问题,于是乎在处理器内部使用一些SRAM(Static Random Access Memroy)作为缓存①,来提高处理器访问程序和数据的速度②③,当然Cache的容量与内存相比还是非常小的。


  2. Write through(写通)

        Write through策略是指每次CPU修改了Cache中的内容④,Cache则会立即更新内存的内容。


  3. Write back(写回)     

        Write back策略是指内核修改Cache的内容后,Cache并不会立即更新内存中的内容,而是等到这个Cache line⑤因为某种原因需要从Cache中移除时,Cache才会更新内存中的数据⑥。   

        Write through由于有大量的访问内存的操作,效率较低,大多数处理器都使用Write back策略。


  4. DMA    

     Cache要等到CPU访问数据时,才从内存中将数据取进来,而此时CPU只能等待。如果处理器内部有可寻址存储器⑦,就可以通过软件控制DMA(Direct Memory Access)将以后需要的数据提前搬到处理器内部,这样就省去了不少CPU的等待时间。DMA是处理器中专业负责数据搬移的模块。 

         wKiom1QRPbiRZncLAAC24poWcIc843.jpg (若无法打开请参照附件)   

    通过上图可以看出,使用DMA的方式,程序中的执行时间要比用Cache的方式少。


 

 


注释部分

①通常我们内存用的是DRAM,这种存储器速度一般,但是成本较低,SRAM在速度上要比DRAM要快,但是成本也高出很多。


②Cache之所以能对CPU数据读取进行提速,主要是因为时间局部性和空间局部性。

时间局部性:如果某个数据被访问,那么在不就的将来它很可能再次被访问。eg:循环

空间局部性:如果某项数据被访问,那么它相临的数据很可能可能很快就被访问。eg:数组


③现在的处理器都采用了多级Cache组织形式,来达到性能和成本之间的平衡。通常L1 Cache和内核同频率,以保证CPU读数据的读取速度,次级Cache频率则会越来越低


④CPU中处理的数据完全来自于Cache,当然,Cache中的数据则是来自于内存。


⑤整个Cache空间被分成了N个line,每个Cache line通常是32byte、64byte等,Cache line是Cache和内存交换数据的最小单位


⑥Cache line中的dirty标志用来表示数据有没有被CPU修改。当dirty表示为1时,表示Cache的内容被修改,和内存的内容不一致,当该Cache line被移除时,数据需要被更新到内存,dirty表示为0(称为clean),表示Cache的内容和内存的内容一致。

    Cache line 


dirtyvalidtagblock


⑦在x86处理器中,处理器内部的存储器全部作为Cache用,不纳入存储空间的编址,Cache对程序员是透明的,Cache完全又处理器硬件来管理,程序员不需要关心Cache。而在DSP等性能要求很高的嵌入式处理器中,处理器内部的存储器一部分作为Cache,另一部分作为可寻址存储器,程序员可以直接访问这部分空间。