内存层次结构是如何工作的

来源:互联网 发布:皇室战争卡牌数据库 编辑:程序博客网 时间:2024/05/06 05:06

 

    内存层次结构存在的惟一目的就是为了快速地访问大量内存。如果只需要很少的内存,那我们宁愿全部使用快速的静态RAM;如果速度不是问题,可以都使用虚存。内存层次结构的意义在于利用引用的空间局部性和引用的时间局部性原理,将经常被访问的数据放到快速的内存中,而将不经常访问的数据留在较慢的外存中。但是,在程序的执行过程中,常用与不常用的数据集是动态变化的,我们不能在程序启动的时候简单地将数据分布到内存层次结构的各个层中,然后在程序执行过程中保持不变;相反,不同的内存子系统需要能够适应变化,根据程序执行过程中引用的空间局部性与引用的时间局部性的变化而动态地在各个子系统之间移动数据。

    除了少数几个例外,大多数内存子系统访问都透明地发生在内存层次结构的一个层次与其下或其上紧邻的层次之间。

例如,CPU很少会直接访问内存,相反,当CPU请求内存中的数据时,L1 Cache会接管该访问。如果请求的数据在缓存中,那么L1 Cache 就将数据提供给CPU,并结束这次内存访问;如果请求的数据不在L1 Cache中,那么L1 Cache就将请求传递给L2 Cache

    如果L2 Cache有需要的数据,它就将数据返回给L1CacheL1 Cache再将数据返回给CPU。后续短时间内对这些数据的访问请求将由L1Cache而不是L2 Cache满足,因为当Cache缺失时,大多数Cache系统会读取主存中连续的一些字节(这块数据被称为Cache Line,例如80x86 CPU在一次高速缓存缺失时读取16到64个字节),现在L1 Cache已经有这些数据的副本了。

    如果L1 CacheL2 Cache都不包含需要的数据,那么请求被发送到主存。如果在主存中发现了请求的数据,那么主存子系统就将数据传递给L2 Cache,再由L2 Cache传递给L1 Cache,最后由L1 Cache传递给CPU。同样,数据现在已经在L1 Cache中了,因此,短时间内对这些数据的访问请求将由L1 Cache满足。

    如果数据不在主存中,而在虚存中,在某个存储设备上,那么操作系统会接管这次访问操作,从磁盘或其他设备(例如网络存储服务器)读取数据,并将数据传送到主存子系统。主存再通过Cache将数据传送给CPU,过程如前所述。

 

 

    --深入理解计算机

 

原创粉丝点击