【计算机基础】存储器层次 Memory hierarchy
Memory Hierarchy
- 我们是如何构建指令 / 数据存储器的?
- 内存时序
- 为什么Memory hierarchy有效?
- 存储器技术
- Cache的基本原理
- Cache访问
- 访问缺失
- Cache性能的评估和改进
- 减少cache miss的方法
- 替换块的选择
- Cache ABC
- 访问缺失分类 Classifiying Misses
我们是如何构建指令 / 数据存储器的?
以64位Arm处理器为例,内部有32个寄存器
Register file? Flip-flop构建
- 32个64-bit 寄存器 -> 2Kb = 256Bytes
- 可以使用多端口,bigger and slower but still ok
Instruction / data memory? 也是Flip-flop构建
each instruciton address has 64 bits
-> 2^64 addressible unit
-> 2^64 bytes -> 2^4 Exbi-bytes = 16EB (不可能的
“Primary” instruction / data memory 是单端口的SRAM
“Primary” = 在数据通路中
只包含了一个memory的动态的子集
缺失的部分到下一级内存查找
内存时序
对于内存元件M来说:
Access:从M中读或写
Hit:从M中获取所需数据
Miss:M中找不到所需数据
- 必须从其他的部分得到
- 没有“miss in register file” 的概念
Fill:将数据放到M
%_miss = miss rate(未命中率) :#misses / #access
t_hit:从M中读或写数据所用时间
t_miss:将数据送到M所用时间
表现评估:平均访问时间(average access time)
t_avg = t_hit + %_miss * t_miss
Problem: 很难在同一结构中做到低 t_hit 和低 %_miss
大内存的结构 -> 低%_miss、高t_hit
因为内存大所以找到所需数据的概率较高,未命中率低
但寻找数据的时间相应会提高
小内存的结构 -> 高%_miss、低t_hit
因为内存小所以找到所需数据的概率较低,未命中率高
寻找数据的时间降低
Solution: 使用Memory hierarchy,即存储器分层,中间以总线相连
M1 <-> M2 <-> M3 <-> M4 <-> M <->
- 层次越高:内存越小 -> 高%_miss、低t_hit
- 层次越低:内存越大 -> 低%_miss、高t_hit
M1中存储最频繁访问的数据,
M2中存储M1 + next most frequently 访问的数据
为什么Memory hierarchy有效?
时间局部性
最近被访问的指令/数据更可能在短时间内被访问
空间局部性
最近被访问的指令/数据附近的指令/数据更可能在短时间内被访问
所以,存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。存储器的容量和访问时间随着离处理器距离的增加而增加
存储器技术
DRAM
SRAM
Flash
是一种电可擦除的可编程制度存储器(EEPROM)
磁盘
Cache的基本原理
直接映射(direct mapped):每个存储器地址仅仅对应到cache的一个位置。
几乎所有的直接映射cache都使用以下的映射方法:
(块地址) mod (cache中的块数)
主存地址0-31被映射到cache的相同位置,该cache有8个字,所以地址X被直接映射到cache字X mod 8,即低log2(8) = 3位都被用作cache索引(index)。所以地址00001、01001、10001、11001都对应于cache中第101块。
由于cache中的每个位置对应于主存中多个不同的地址,所以我们在cache中增加标记(tag) 。标记包含了地址的高位(如上图的高两位),用于判断cache中的字是否就是所请求的字。
还有几位偏置位(offset bits) 用来确定字中的byte
除此之外,cache中还需要增加一个有效位(valid bit) 来标识一个块是否含有一个有效地址。
所以,cache的地址可以分为三个部分:
offset bit:最低 log2(block-size in bytes) bits
Index:接下来log2(number-of-sets) bits
Tag: 剩下的所有位
(valid bit不在地址中)
Example cache:
8 sets, 32-bit words = 4-byte blocks, 16 bit address
-> 8 sets = 3 bits index
-> 4-byte blocks = 2 bits offset
-> 16 - 3 - 2 = 11 bits of tag
Cache访问
下面是对一个容量为8 blocks的空cache进行9次访问的一个序列(5-bit address, 3-bit index) 暂时不包括offset bits
访问缺失
当出现访问缺失(cache miss)的时候,由两部分来处理:处理器控制单元(Cache controller)和进行初始化主存访问和重新填充cache的独立控制器。
如果cache不命中,那么它需要存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中
Cache性能的评估和改进
减少cache miss的方法
直接映射(direct mapping):一个块只能放到cache中一个明确的位置。是一种极端的情况
另一种极端的情况:
全相联(fully associative):一个块可以被放置在cache中的任何位置,因此需要检索cache中所有的项,所以全相联只适合块数较少的cache。
介于直接映射和全相联之间的设计是组相联(set associative):块可以放置到cache中的部分位置(至少两个)。一个块首先被直接映射到一个组,然后检索该组中所有的块是否匹配。
For example:在直接映射的方式下,主存块12只能放置在cache中唯一的块中,该块为(12 mod 8)= 4。在两路组相联cache中,有四个组,主存块12必须放在第(12 mod 4)= 0组中,主存块可以放在该组的任何位置。在全相联的方式下,块地址为12的主存块可以放在cache中8个块的任意一块。
提高相联度的好处在于它通常能够降低缺失率,缺点则是增加了命中时间。
替换块的选择
当直接映射的cache发生缺失时,被请求的块只能放置于cache的唯一位置,而原先占据那个位置的块就必须被替换掉。
在组相联的cache中,被请求的块放置在什么位置需要进行选择,因此替换哪一块也需要进行选择。
在全相联cache中,所有的块都可能被替换。
- 最常用的方法是最近最少使用(Least Recently Used,LRU)法,被替换的块是最久没有使用的那一块。
对于一个两路组相联cache,跟踪组中两个数据项的使用情况可以这样实现:在每组中单独保留一位,通过设置该位指出哪一项被访问过。
当相联度提高时,LRU的执行就变得困难。
- Random 随机选一项被替换
- FIFO
- NMRU(not most recently used)
Cache ABC
- Associativity
Decreases conflict misses
Increases t_hit
- Block size
Increases conflict misses
Decrases compulsory misses
little effect on t_hit, may exacerbate t_miss
- Capacity
Decreases capacity misses
Increases t_hit
访问缺失分类 Classifiying Misses
Compulsory(cold) : 从来没见过这个地址 -> block size ⬆️
Capacity :cache太小了 -> cache size ⬆️
Conflict:cache相联度太低 -> associativity⬆️
【计算机基础】存储器层次 Memory hierarchy相关推荐
- 深入理解计算机系统——第六章 The Memory Hierarchy
深入理解计算机系统--第六章 The Memory Hierarchy 6.1 Storage Technologies 6.1.1 Random Access Memory Nonvolatile ...
- Linux学习-计算机基础
Linux 学习-计算机基础 一.描述计算机的组成及其功能. 计算机系统是由硬件(Hardware)和软件(Software )两部分组成. 硬件: 从硬件基本结构上来讲,计算机是由运算器.控制器.存 ...
- 关于计算机网络传输介质 下列叙述正确的是,《计算机基础》习题1-7
4. 算法的基本结构中包括( ) A.顺序结构 B.选择结构 C.循环结构 D.逻辑结构 5.关于Excel图表的数据源,下列叙述不正确的是( ) A. 可以修改图表的数据源 B. 图表的数据源必须是 ...
- B站收藏6.1w+!这门课拯救你薄弱的计算机基础
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个对计算机基础一无所知的蒟蒻... 作为一个所谓的计算机科班出身的人来说,特别难为情的是自己的计算机基 ...
- 计算机基础-计算机硬件
一 为何要学习计算机基础 python是编程语言,即python是语言 语言有英语.法语.葡萄牙语等,但凡是语言,都是用来沟通的介质. 程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机 ...
- B站收藏 12.5w+!GitHub 标星 6.6k+!这门神课拯救了我薄弱的计算机基础
大家新年好呀,我是你们的 猫哥,我又回来啦 ~ 相信大家过年都过得开心吧 过得开心,那么就开始学习了哈 ~ 前言 作为一个所谓的计算机科班出身的人来说,特别难为情的是自己的计算机基础很差,相信这不是少 ...
- php计算机基础知识,计算机基础知识①
计算机基础知识 1. 计算机基础知识 硬件 运算器 \ ---> 中央控制器,也就是CPU[Central Process Unit],它是最核心的硬件 控制器 / 存储器 Storage \- ...
- 计算机基础- -应用和硬件的关系
计算机基础- -应用和硬件的关系 文章目录 计算机基础- -应用和硬件的关系 一.应用和硬件的关系 1.支持硬件输入输出的IN指令和OUT指令 2.测试输入和输出程序 3.外围设备的中断请求 4.用中 ...
- 计算机基础--认识CPU
计算机基础- -认识CPU 文章目录 计算机基础- -认识CPU 一.CPU是什么 二.CPU实际做什么 三.CPU的内部结构 1.程序编译执行的过程 2.CPU是寄存器的集合体 计算机语言 汇编语言 ...
最新文章
- 链表问题15——将搜索二叉树转换成双向链表
- node开启子线程_真Node多线程
- OLTP与OLAP是什么?OLTP与OLAP的主要区别是什么?
- 年末裁员事件背后的启示录(1)
- 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )
- Ubuntu cocos2d-x 3.13版本游戏开发学习系列3 Cocos2d-x的坐标系
- Servlet获取Web应用程序的初始化参数
- .NET 反编译调试神器:dnSpy了解一下
- 8.0.22Mysql的详细安装
- oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型
- Netty工作笔记0066---Netty核心模块内容梳理
- java io类型_Java NIO之Java中的IO分类
- 十五、移动端vw+rem等比缩放布局开发的详细步骤:包含px与rem的单位换算、二倍图以及如何使用UI给的设计稿等(开发工具HBuilder)
- 截止失真放大电路_聊一下三极管截止、放大和饱和3种工作状态
- bzoj5294: [Bjoi2018]二进制(线段树)
- stm32增量式编码器使用流程
- 古诗词鉴赏,断句的重要性
- 思科模拟器(Cisco Packet Tracer7.2.1)安装过程
- WiFi共享精灵文件传输新功能:金币话费领不停
- 2018年高德地图POI全国数据下载
热门文章
- vue.js2.0 新手开发_VueJs2.0建议学习路线
- layui table 单元格适应宽高
- PHP中的des加密类
- 软件测试和系统试验,实验四 软件系统性测试
- idea创建文件自定义注释
- python守护多线程_Python守护进程(多线程开发)入门实例
- 黑苹果挂载不了分区_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!...
- qq第三方登录注册php,QQ第三方登录PHP
- php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题
- python 简单网页_Python爬虫 (一):爬取一个简单的静态网页