Cashe位于CPU和内存之间,是一种极快的内存缓冲区,特点是容量小、价格小、速度快。Cashe包含一个地址的列表以及它们的内容。随着处理器不断引用新的内存地址,cashe的地址列表也一直处于变化中,所有对内存的读取和写入操作都要经过Cashe。 首先数据请求到达Cashe,如果数据存在Cashe中,则立即被提取,否则Cashe会向内存传递请求,将数据换到Cashe中。(是不是觉得很熟悉的过程) Sun当前使用2种类型的Cashe: 1)全写法:每次写入Cashe时同时写入内存中,保证二者的一致性。 2)写回法:先写入Cashe,当Cashe中已写过的地方还要写时,则将该地方原来的内容写入内存。(注意,Cashe的写入并不是按顺序执行,按特定算法写入,故写回到内存不一定发生在Cashe存满的时候) Cashe的组成: line:行是对Cashe进行访问的单位,每行由2各部分组成:一个数据部分以及一个标签(用于指定它所表示的地址) block: 行内的数据部分称作块,它保存来回移动于内存和Cashe之间的字节数据。一个典型的块为32字节。 Cashe: 一个Cashe(一般64K或1M)由许多行组成,为了提高速度,Cashe的位置离CPU很近,而且内存系统和总线经过高度优化,尽可能地提高大小等于Cashe块的数据块的移动速度。 可以通过以下程序来检验Cashe的效果:
![]() 可见二者的时间差异不是一般的大。其原因是source和destination的大小都正好是Cashe容量的整数倍,导致每次对内存的引用都无法击中Cashe,使CPU的利用率大大降低,因为它不得不等待常规的内存操作完成。 |
|