第6章 存储器层次结构

学习目标

  • SRAM和DRAM的构成与区别
  • 磁盘存储的结构以及磁盘容量,扇区读取时间的计算
  • 认识局部性原理
  • 认识存储器结构层次发挥的巨大作用
  • 深入理解高速缓存存储器的读取和写入

随机访问存储器

随机存取存储器(RAM,Random-Access Memory)有两种类型:SRAM和DRAM,SRAM非常快,不需要定期刷新,通常用在处理器作缓存,但是比较贵;DRAM需要刷新,通常用作主存。无论是SRAM还是DRAM,一旦不通电,所有的信息都会消失。
静态RAM


SRAM将每个位存储在一个双稳态(bistable)的存储器单元里。
每个单元是用一个六晶体管电路来实现的。它可以无限期地保持在两个不同的电压配置(configuration)或状态(state)之一。
动态RAM


DRAM将每个位存储为对一个电容的充电。

分类 |每位晶体管数|相对访问时间|持续的?|敏感的?|相对花费|应用
---| -------|--------|-----|---|---
SRAM|6 |1X|是|否|100X|高速缓存存储器
DRAM|1 |10X|否|是|1X|主存,帧缓存区

磁盘存储

磁盘以扇区大小的块来读写数据。对扇区的访问时间主要有三个部分:

  • 寻道时间 seek time
  • 旋转时间 rotational time
  • 传送时间 transfer time

磁盘的访问时间是SRAM的40000倍,是DRAM的2500倍。

设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程,这个过程称为直接存储器访问(Direct Memory Access,DMA)

固态硬盘 Solid State Disk

固态硬盘是一种基于闪存的存储技术。一个SSD由一个或多个闪存芯片和闪存翻译层(flash translation layer)组成,闪存芯片替代传统磁盘中的机械驱动器,而闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色,将对逻辑块的请求翻译成对底层物理设备的访问。

局部性

局部性原理(principle of locality):计算机程序倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。这种倾向性,就叫做局部性原理。

  • 时间局部性(Temporal Locality):如果一个信息正在被访问,那么近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。
  • 空间局部性(Spatial Locality):在最近的将来用到的信息很可能与现在正在使用的信息在空间地址上是临近的。
  • 循序局部性(Order Locality):在典型程序中,处转移指令外,大部分指令是顺序执行的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因。

举个简单的例子:

int sumvec(int v[N]){
        int i,sum = 0;
    
    for(int i=0; i < N; i++)
        sum += v[i];
    return sum;
}

sum 在每次循环迭代中都被引用一次,对 sum 来说就具有良好的时间局部性。数组 v 的访问是连续的,具有良好的空间局部性。

局部性小结:

  • 重复引用一个变量的程序有良好的时间局部性
  • 对于步长为k的引用模式的程序,步长越小,空间局部性越好
  • 对于取指令来说,循环有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好

存储器结构层次

一种介质的速度越快就会越贵,同时也消耗更多的电量,所以一般容量比较小。而CPU与内存之间的差距越来越大,好的程序都会尽可能利用局部性。而根据这些特性,引申出了安排存储的方式,称为金字塔式存储体系(Memory Hierarch)。



存储器的中心思想:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。利用局部性原理,程序会倾向于访问第k层的数据,而非第k+1层,这样就减少了访问时间。

缓存类型 缓存内容 缓存位置 延时(时钟周期) 管理者
寄存器 4-8字节的字 CPU内核 0 编译器
TLB 地址翻译 芯片TLB 0 内存管理单元
L1缓存 64字节的块 芯片L1缓存 4 硬件
L2缓存 64字节的块 芯片L2缓存 10 硬件
虚拟内存 4KB的页 主存 100 硬件+操作系统
缓冲区缓存 文件的部分内容 主存 100 操作系统
磁盘缓存 磁盘扇区 磁盘控制器 100,000 磁盘固件
网络缓冲区缓存 文件的部分内容 本地磁盘 10,000,000 NFS客户端
浏览器缓存 网页 本地磁盘 10,000,000 网络浏览器
Web缓存 网页 远程服务器磁盘 1,000,000,000 Web代理服务器

缓存未命中的类型:

  • 强制性失效(Cold/compulsory Miss):CPU第一次访问响应缓存块,缓存中肯定没有数据,这是不可避免的
  • 冲突失效(Conflict Miss):在直接相联或组相联的缓存中,不同的缓存由于索引相同相互替换,引起的失效叫做冲突失效
    • 假设这里有 32KB 直接相关联的缓存
    • 如果有两个 8KB 的数据需要来回访问,但是这两个数组都映射到相同的地址,缓存的大小足够存储全部的数据,但是因为相同地址发生冲突需要来回替换,发生的失效全是冲突失效(第一次访问失效依旧是强制性失效),这时缓存并没有存满。
  • 容量失效(Capacity Miss):有限的缓存容量导致缓存放不小而被替换,被替换出去的缓存块再被访问,引起的失效叫容量失效。

深入理解高速缓存存储器 Cache Memory

高速缓存存储器是由硬件自动管理的SRAM内存,CPU会先从这里找数据,其所处的位置如蓝色部分所示:



高速缓存存储器由三个关键部分组成:

  • S表示集合(set)数量
  • E表示数据行(line)的数量
  • B表示每个缓存块(block)保存的字节数目

如图所示:


所以缓存中存放数据的空间大小为B×E×S
实际上可以理解为三种层级对应关系,对应不同的索引,这样分层的好处是:通过层级关系简化搜索需要的时间,并且和字节的排布也是一一对应的(之后介绍缓存的时候就体现的更加明显)。

当处理器需要访问一个地址时,会先在高速缓冲存储器中进行查找,查找的过程我们首先在概念上把这个地址划分成三个部分:



读取


具体在从缓存中读取一个地址时,首先我们通过set index确定要在那个set中寻找,确定后利用tag和同一个set中的每个line进行对比,找到tag相同的那个line,最后再根据block offset确定要从line的那个位置读起。

当E = 1时,也就是每个set只有一个line的时候,称之为直接映射高速缓存(Direct Mapped Cache),如下图所示:


直接映射高速缓存的过程分为三步:组选择、行匹配、字抽取。
如果缓存不命中,那么它需要从存储器层次结构的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。
写入


整个存储层级中,不同的层级可能会存放同一个数据的不同拷贝(如L1,L2,L3,主内存,硬盘)。如果发生写入命中的时候(也就是要写入的地址在缓存中有),有两种策略:

  • Write-through:命中后更新缓存,同时写入到内存中
  • Write-back:直到这个缓存需要被置换出去,才写入到内存中(需要额外的 dirty bit 来表示缓存中的数据是否和内存中相同,因为可能在其他的时候内存中对应地址的数据已经更新,那么重复写入就会导致原有数据丢失)

在写入 miss 的时候,同样有两种方式:

  • Write-allocate:载入到缓存中,并更新缓存
  • No-write-allocate:直接写入内存中,不能载入到缓存

这四种策略通常的搭配是:

  • Write-through + No-write-allocate
  • Write-back + Write-allocate

其中第一种可以保证绝对的数据一致性,第二种效率会比较高(通常情况下)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容