CSAPP--第六章:存储器层次结构学习

重要思想:编写出数据项存储在层次结构中,较高地方的程序。

  • **学习目标:SRAM、DRAM、ROM存储器及旋转和固态存储器。
    重点关注高速缓存存储器cache。

随机访问存储器(Random-Access Memory):
  • 静态RAM(SRAM):
    (速度快,价格高,用于高速缓存,一般为几M。)
    SRAM用双稳态的存储器单元,每个单元有6个晶体管,可以无限期保持两个电压中的状态之一。
    具有扛干扰性。
    静态RAM的双稳态示意图

  • 传统的动态RAM(DRAM):
    而动态RAM结构,由细节到宏观,如下图所示。
  • 访问数据步骤:
    1:传送一个地址A到内存控制器
    2:控制器随即访问数据,选择指定的模块(module)k
    3:k模块将地址A转化成(i,j)形式。
    (i为行row,j为列column)
    4:将8个DRAM芯片,都访问其(i,j),得到8个字节(8位),依次组成64位。
    具体从单个DRAM芯片中得到字节的方式,如下图2。


    1

    2

    3

  • 增强的DRAM:
    主要在传统结构上,进行优化,而得到一系列的改进结构。
    依性能排序为:
    1-快页模式: FPM DRAM
    (Fast Page Mode)
    2-拓展数据输出: EDO DRAM
    (Extended Data Out)
    3-同步DRAM: SDRAM
    (Synchronous同步)
    4-双倍数据速率同步DRAM: DDR SDRAM
    (Double Data-Rate):
    根据预取缓冲区大小划分: DDR1 DDR2 DDR3。

  • 非易失性存储器:
    DRAM和SRAM,如果断电就会丢失信息。从这方面来说,属于易失的(volatile)。
    而非易失性存储器,即使断电之后,仍然可以存储信息。
    他们整体上都被成为只读存储器ROM(Read Only Memory)。
    ROM设备中,有基本的程序:固件,用来翻译cpu的输入输出请求。
    以可重写次数和重写机制分为:
    1:PROM(programmable)
    存储单元有熔丝,可以用高电流熔断一次。
    2:EPROM(erasable programmable)
    利用了光学物理设备进行写入,清零是用紫外线照射存储单元。
    可擦除重编程次数:1000数量级。
    3:EEPROM(electrically erasable)
    类似EPROM,但不需要格外物理设备,而是在电路卡上编程。
    可擦除编程数:10 0000数量级。
    闪存(flash memory)便是基于EEPROM结构。
    及基于闪存的固态硬盘。

访问主存的方式:

cpu和主存连接方式:
cpu--总线接口--系统总线--I/O桥--内存总线--主存
(I/O桥连接了I/O总线,由磁盘,显卡等共享)


整体流程

movq A,%rax 示例
  • 磁盘:
    磁盘结构:由盘片、面、磁道、扇区和传动臂组成。
    磁盘封装了一个固件:磁盘控制器,用以将实际地址转化成连续的逻辑块

磁盘结构

访问磁盘:
每一个逻辑块,会被翻译成:(盘片,磁道,扇区)三元组,对应唯一物理扇区。
读取时,读写头会将数据保存在控制器的缓冲区里,然后复制到内存中。

访问磁盘时间分为三个阶段:

1:寻道,将传动臂移到指定磁道。
时间平均通常为3-9ms。

2:旋转,磁盘转到指定的扇区。
Tmax=(1/RPM) //以m为单位要乘以60
Tavg=1/2 * Tmax

3:读写,对扇区(指定为512个字节)进行读写。
用每转耗时,除以扇区数。
T=Tmax / 扇区数。



连接I/O设备:

说明:系统总线和内存总线都与cpu相关,
而I/O总线与CPU无关。
如intel的外部设备互连PCI总线,其连接了磁盘、显卡、键盘、鼠标、USB(通用串行总线)。
PCI(Peripheral Component Interconnect )。
下图为CPU,内存,I/O设备简单抽象连接图:



  • 访问磁盘:

CPU使用:内存映射I/O 技术来向I/O发射命令。
下图说明:
a.cpu发出三次指令:
1 命令:读。及其他参数如是否中断指令。
2 磁盘的逻辑块地址。
3 读出放到某个内存地址。
b.磁盘控制器接受命令,并读取定逻辑块,将值传送到内存。
此步骤不需要CPU参与,称为DMA(直接内存访问)。
c.当内容安全存储到主存上后,磁盘控制器会发生给cpu一个中断信号,来通知cpu。


  • 固态硬盘SSD:
    (Solid State Disk)
    与磁盘区别:
    1:底层硬件为闪存而非磁盘,闪存分为b个块,每个块内又有一定数量的页,页内存放512~4k个字节。
    2:以闪存翻译器(控制器)代替磁盘控制器。

说明:闪存读取比写入快,因为:

1:必须已经格式化即擦除的块,才能在页写入数据。擦除块需要1ms左右时间。
但块进行一次擦除,其内页不需要擦除即可写入一次。

2:写入位置若已有数据,则需要将整个块的有用数据全部拷贝到已经被擦除的块,才能再进行写入。

下面是闪存的结构示意图和速度指标:
(IOPS是每秒I/O次数)

抽象结构

各项数值

近年cpu与各存储器性能、价格示意图:



存储器层次结构:

(memory hierarchy)

  • 原则:基于缓存思想
    根据局部性(locality)思想,缓存可以作为实现的桥梁。
    如:
  • 空间局部性:如数组,以步长1访问(每次索引加一),具有良好的空间局部性。
    此时若高速缓存不命中,而下一层命中。则会提取包含多个元素的一整块,到高速缓存。因而下次访问的时间也会大大缩减。
  • 时间局部性:频繁地访问某元素。
    高速缓存可以保存该元素在高层次中,相比每次从内存提取,能大大提高速度。

越靠近cpu,缓存容量越小,速度越快,价格越贵。


存储器层次结构

  • 对于任意两层缓存(k,k+1)之间:

传输方式:以块进行传输。
在指定两层,块大小相同。而层次结构里,越高,则块的大小越小。

  • 缓存命中与不命中:(读取)
    缓存命中(cache hit):当需要的数据,在k层的块内时,缓存命中。
    缓存不命中(cache miss):当需要的数据,在k层找不到,此时缓存不命中,会到k+1层寻找。


    缓存原理

不命中的种类:
①冷不命中(cold miss):k层是空的,
②容量不命中(capacity miss):如程序中,需反复访问同一数组的元素,此时缓存太小,不能够处理这个工作集。
③冲突不命中(conflict miss):缓存足够,但是k层中的某块地址,被k+1层以某种规则映射,即两个块都会映射到同一个地方。
如规则为mod 4时:程序反复需要块0,块4。
1:先请求块0,此时k层没有,从k+1层取出放在k层指定位置,并取出元素返回给cpu。
2:cpu又请求块4,又会不命中从下一层调,然后保存并返回值,此时又覆盖了块0。
3:cpu又请求块0,又会不命中。这就是冲突不命中。


  • 缓存管理:
    可以由软件、硬件、或者两者结合,如下图

  • SRAM高速缓存结构示意图:
    cpu发出的地址的,高速缓存是如何翻译,并判断出指定地址的?
  • 高速缓存采取(S,E,B,m)结构:
    S:高速缓存内部分为S个组(0,S-1)。
    E:每个组内部又有E个行。
    B:每个行包括:1个有效位,t个标记位,一个块(B个字节,可以理解为字节数组)
  • 与地址的对应:
    传入地址为:t个标记位,s个组数位,b个偏移位。
    t标记位一一对应;
    s个数组位指出指定组——共S=2^s个组;
    b位指出字节偏移位——共B=2^b个字节。
    如下图:


高速缓存实现:
以下模型均假设内存和cpu间,只有一个L1高速缓存。

  • 直接映射高速缓存:
    最简单模型。E为1,即每组一行。
    步骤①:由s位找到指定组。
    步骤②:访问唯一行的有效位。
    步骤③-1:有效位为1,匹配标志位t,若相等,由b在块中,找到偏移位,取出指定数量字节,返回给cpu。
    步骤③-2:有效位为0,则访问内存,从内存得到一个数据块,将其放到指定组,取出字,返回给cpu。


    直接映射抽象流程
  • E路相联高速缓存:
    每组有E行。
    步骤与直接映射类似,找到组后,对每一行进行遍历,命中则返回值,否则访问内存。


    2路相联高速缓存
  • 全相联高速缓存:
    仅有一组,包含了C/B行,C为容量(仅包含块数据,不包含标志位和有效位)。


    全相联高速缓存

ps:为什么用中间位当做s组索引?↓



写命中与不命中:

  • 写命中会执行:
    直写:当某层写命中后,会更新块内指定内容,然后往更低层继续写。
    写回:当某层命中后,也会更新写入到块内,但是不会直接写入更低层,除非该行会被替换时。(需要附加硬件判断该行是否被修改过。)
  • 写不命中会执行:
    写分配:从更低层读入块,然后更新块内内容。
    非写分配:直接写入到更低层,而不对该层进行修改更新。
    说明:
    写回和写分配,都更利于局部性实现,但会需要格外硬件,使要替换驱逐该行时,会将该行复制更新到更低层中。

  • cpu与高速缓存


    三层cache封装到cpu中

    层次结构

    影响参数

    ps:存储器山的实验,暂时没进行,以后可以看csapp家庭作业,山的代码已经下载到OSstudy/soft里了。

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