热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机体系结构——储存层次

计算机体系结构——储存层次计算机的储存层次定义了计算机如何储存数据,一种典型的储存层次为:代号名称说明L0寄存器寄存器的数据从内存缓存中获取数据L1
计算机体系结构——储存层次

计算机的储存层次定义了计算机如何储存数据,一种典型的储存层次为:

代号名称说明
L0寄存器寄存器的数据从内存缓存中获取数据
L1芯片内高速缓存( SRAM )L1 缓存从 L2 缓存获取数据
L2芯片外缓存( SRAM )L2 缓存从内存中获取数据
L3主存( DRAM )主存从本地硬盘获取数据
L4本地存储硬盘储存计算机产生的数据或者从网络中获取数据
L6远程储存包括网络分发文件系统, Web 服务等

这些储存结构从上到下依次:

  • 容量递增;
  • 价格递减‘;
  • 速度递减;
  • 体积递增。

储存层次中的缓存

储存层次第 k 层是第 k+1 层的缓存,缓存的主要作用是将那些在 k+1 层经常使用的数据块复制到第 k 层,这样就可以提高访问的速度。

缓存命中

当程序想要获取第 j 个数据块,发现第 k 层缓存缓存了这个数据块称为缓存命中。

一个好的程序通常需要具有好的缓存友好性,分为:

  1. 时间缓存友好性,指程序应该在短时间内访问同一个变量。
  2. 空间缓存友好性,程序应该连续访问数据,而不是跨越访问数据。

上面两点都能提高缓存命中的概率。

缓存失效

当程序想要获取第 j 个数据块,发现第 k 层缓存没有缓存第 j 个数据块,进而要从第 k+1 层获取第 j 个数据块,称为缓存失效。

如果第 k 层的缓存空间使用已满,这时需要用第 j 个数据块去覆盖某个数据块。被覆盖的数据块称为牺牲数据块,觉得被覆盖的数据块取决于缓存替换算法。例如,随机缓存替换随机选取一个数据块进行替换, LRU 缓存算法将替换距最后一次访问时间距离现在最长的那个数据块。

缓存失效的类型

如果第 k 层缓存是空的,即没有任何数据块,称为冷缓存。此时的缓存失效类型称为强制失效或者 冷失效 ,这种缓存失效持续时间不长,常发生在缓存预热之前。

第 k 层的储存通常比第 k+1 层小的很多,如何在第 k 层放置数据块和定位数据块成了一个严峻的问题。通常来说,使用一种取余策略,即将第 k + 1层第 i 个数据块放在第 k 层的第 imod4i \mod 4imod4 的位置上,假如第 k 层有 4 个可用的位置。

这种策略引发了一种 冲突性失效的缓存失效 的类型,例如程序连续访问 0,8,0,8,0,8 恰好这两个数据块共用一个缓存位置,那么每次查询缓存的时候都被另外一个占用,缓存永远无法发挥作用。

最后一种,当程序反复使用一段内存,但是这段内存大于缓存区的长度,那么这段内存将会重复载入缓存区,造成 容量缓存失效


推荐阅读
author-avatar
佳品h空投
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有