层次结构存储系统 主要教学目标 理解CPU执行指令过程中为何要访存 理解访存操作的大致过程及涉及到的部件 了解层次化存储器系统的由来及构成

Slides:



Advertisements
Similar presentations
《微型计算机技术 及应用》 ( 第 4 版) —— 戴梅萼 史嘉权. 目标 深刻理解 牢固掌握 灵活应用.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
第四单元 100 以内数的认识
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
第 4 章存储器、存储管理和 高速缓存技术 4.1 存储器和存储部件 4.2 存储器的连接 4.3 微型计算机系统中存储器的体系结构 4.4 Pentium 的虚拟存储机制和片内两级存储管理 4.5 高档微机系统中的高速缓存技术 第一次课 第二次课 第三次课.
计算机系统结构 (第9讲).
第7章 存储系统.
2017年3月5日 单片机原理与应用 背景知识调查.
计算机系统结构 第五章 存储系统.
第三章 存储系统 现代计算机系统都以存储器为中心 在计算机运行过程中,存储器是各 种信息存储和交换的中心。
缓存(续).
实用操作系统概念 张惠娟 副教授 1.
第五章 存储层次 5.1 存储层次结构 5.2 Cache基本知识 5.3 降低Cache失效率的方法 5.4 减少Cache失效开销
5.5 减少命中时间 容量小、结构简单的Cache 第五章 存储层次
第五章 存储层次 5.1 存储器的层次结构 5.2 高速缓冲存储器基本知识 5.3 降低Cache不命中率的方法
第一章 行列式 第五节 Cramer定理 设含有n 个未知量的n个方程构成的线性方程组为 (Ⅰ) 由未知数的系数组成的n阶行列式
第四章 存储体系.
计算机组成原理第四章 知识点一:存储系统层次结构和评价方法 主讲教师:吴非.
Cache综合应用案例 某计算机的主存地址空间大小为256 MB,按字节编址。指令Cache和数据Cache分离,均有8个Cache行,每个Cache行大小为64 B,数据Cache采用直接映射方式。现有两个功能相同的程序A和B,其伪代码如下所示: 程序A: int a[256][256]; …… int.
中青国信科技(北京)有限公司 空间域名邮局价格表.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
计算机基础知识 丁家营镇九年制学校 徐中先.
§3 高速缓冲存储器(Cache) 工作原理和基本结构 地址映象与变换 Cache存储器的LRU替换算法的硬件实现
主讲教师:唐大仕 第5讲 计算机硬件 主讲教师:唐大仕
周学海 , 中国科学技术大学 2018/11/11 计算机体系结构 周学海 , 中国科学技术大学 中国科学技术大学.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
第3章 存储系统 现代计算机系统以存储器为中心 3.1 存储系统原理 3.2 虚拟存储器 3.3 高速缓冲存储器(Cache)
C H A P T E R 10 存储器层次.
核心系统数据库组 余锋 了解内存 核心系统数据库组 余锋
存储系统.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
逆向工程-汇编语言
PaPaPa项目架构 By:Listen 我在这.
动态规划(Dynamic Programming)
CPU结构和功能.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第二章 80x86计算机组织 x86微处理器 2.2 基于微处理器的计算机系统构成 2.3 中央处理机 2.4 存储器
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
计算机系统结构(2012年春) ----存储层次: Cache基本概念
产品介绍 TOPOLF-T198 产品类型:4G MIFI 建议零售价格:699元 上市时间: 2015年1月 目标人群:差旅人士
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
(Random Access Memory)
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第六章 記憶體.
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
DSP技术与应用 电子与信息技术系.
Presentation transcript:

第6章 层次结构存储系统 存储器概述 主存与CPU的连接及其读写操作 磁盘存储器 高速缓冲存储器(cache) 虚拟存储器 IA-32/Linux中的地址转换

层次结构存储系统 主要教学目标 理解CPU执行指令过程中为何要访存 理解访存操作的大致过程及涉及到的部件 了解层次化存储器系统的由来及构成 掌握Cache机制并理解其对程序性能的影响 理解程序局部性的重要性并能开发局部性好的程序 了解虚拟存储管理的基本概念和实现原理 理解访存操作完整过程以及所涉及到的部件之间的关联 地址转换(查TLB、查页表)、访问Cache、访问主存、读写磁盘 理解访存过程中硬件和操作系统之间的协调关系

层次结构存储系统 分以下六个部分介绍 第一讲:存储器概述 第二讲:主存与CPU的连接及其读写操作 主存模块的连接和读写操作 “装入”指令和“存储”指令操作过程 第三讲:磁盘存储器 第四讲:高速缓冲存储器(cache) 程序访问的局部性、cache的基本工作原理 cache行和主存块之间的映射方式 cache和程序性能 第五讲:虚拟存储器 虚拟地址空间、虚拟存储器的实现 第六讲:IA-32/Linux中的地址转换 逻辑地址到线性地址的转换 线性地址到物理地址的转换

替换算法-先进先出(FIFO) 1 2 3 4 1 2 5 1 2 3 4 5 1* 1* 1* 4 4 4* 5 5 5 5 5* 5* 总是把最先从图书馆搬来的书还回去! 总是把最先进入的那一块淘汰掉。 例:假定主存中的5块{1,2,3,4,5}同时映射到Cache同一组中,对于同一地址流,考察3行/组、 4行/组的情况。 注:通常一组中含有2k行,这里3行/组主要为了简化问题而假设 1 2 3 4 1 2 5 1 2 3 4 5 1* 1* 1* 4 4 4* 5 5 5 5 5* 5* 3行/组 2 2 2* 1 1 1* 1* 1* 3 3 3 3 3 3* 2 2 2 2 2* 4 4 √ √ √ 1* 1* 1* 1* 5* 4 4 1* 1* 5 5 5 2 2 2 2 2 2* 1 1 1 1* 5 4行/组 3 3 3* 3 3 3* 2 2 2 2* 4 4 4 4 4 4* 3 3 3 √ √ 由此可见,FIFO不是一种堆栈算法,即命中率并不随组的增大而提高。

替换算法-最近最少用(LRU) 总是把最长时间不看的书还回去! 总是把最近最少用的那一块淘汰掉。 例:假定主存中的5块{1,2,3,4,5}同时映射到Cache同一组中,对于同一地址流,考察3行/组、 4行/组、 5行/组的情况。 1 2 3 4 1 2 5 1 2 3 4 5 1 2 3 4 1 2 5 1 2 3 4 5 1 2 3 4 1 2 1 5 2 3 4 1 2 3 4 1 2 5 1 2 3 1 2 3 4 4 4 5 1 2 3 3 3 4 5 1 3行/组 4行/组 5行/组 √ √ √ √ √ √ √ √ √ √ √ √ √

替换算法-最近最少用 LRU是一种堆栈算法,它的命中率随组的增大而提高。 当分块局部化范围(即:某段时间集中访问的存储区)超过了Cache存储容量时,命中率变得很低。极端情况下,假设地址流是1,2,3,4,1 2,3,4,1,……,而Cache每组只有3行,那么,不管是FIFO,还是LRU算法,其命中率都为0。这种现象称为颠簸(Thrashing / PingPong)。 LRU具体实现时,并不是通过移动块来实现的,而是通过给每个cache行设定一个计数器,根据计数值来记录这些主存块的使用情况。这个计数值称为LRU位。 具体实现

替换算法-最近最少用 即:计数值为0的行中的主存块最常被访问,计数值为3的行中的主存块最不经常被访问,先被淘汰! 通过计数值来确定cache行中主存块的使用情况 计数器变化规则: 每组4行时,计数器有2位。计数值越小则说明越被常用。 命中时,被访问行的计数器置0,比其低的计数器加1,其余不变。 未命中且该组未满时,新行计数器置为0,其余全加1。 未命中且该组已满时,计数值为3的那一行中的主存块被淘汰,新行计数器置为0,其余加1。 1 2 3 4 1 2 5 1 2 3 4 5 1 1 1 2 1 3 1 1 1 1 2 1 1 1 1 2 1 3 1 5 2 1 2 2 2 3 2 2 1 2 2 2 2 1 2 2 2 3 4 3 1 3 2 3 3 3 5 1 5 2 5 3 5 4 2 3 4 1 4 2 4 3 4 3 4 3 4 3 1 3 1 2

举例 6 4 5 4352/64=68,所以访问过程实际上是对前68块连续访问10次。 假定计算机系统主存空间大小为32Kx16位,且有一个4K字的4路组相联Cache,主存和Cache之间的数据交换块的大小为64字。假定Cache开始为空,处理器顺序地从存储单元0、1、…、4351中取数,一共重复10次。设Cache比主存快10倍。采用LRU算法。试分析Cache的结构和主存地址的划分。说明采用Cache后速度提高了多少?采用MRU算法后呢? 答:假定主存按字编址。每字16位。 主存:32K字=512块 x 64字 / 块 Cache:4K字=16组 x 4行 / 组 x 64 字 / 行 主存地址划分为: 字号 标志位 组号 6 4 5 4352/64=68,所以访问过程实际上是对前68块连续访问10次。

举例 第0 行 第1 行 第2 行 第3 行 第0组 第1组 第2组 第3组 第4组 …… 第15组 0/64/48 1/65/49 2/66/50 3/67/51 4 …… 15 16/0/64 17/1/65 18/2/66 19/3/67 20 …… 31 32/16 33/17 34/18 35/19 36 …… 47 48/32 49/33 50/34 51/35 52 …… 63 LRU算法:第一次循环,每一块只有第一字未命中,其余都命中; 以后9次循环,有20块的第一字未命中,其余都命中. 所以,命中率p为 (43520-68-9x20)/43520=99.43% 速度提高:tm/ta=tm/(tc+(1-p)tm)=10/(1+10x(1-p))=9.5倍

举例 第0 行 第1 行 第2 行 第3 行 第0组 第1组 第2组 第3组 第4组 …… 第15组 0/16/32/48 1/17/33/49 2/18/34/50 3/19/35/52 4 … 15组 16/32/48/64 17/33/49/65 18/34/50/66 19/35/51/67 20 … 31 32/48/64/0 33/49/65/1 34/50/66/2 35/51/67/3 36 … 47 48/64/0/16 49/65/1/17 50/66/2/18 51/67/3/19 52 … 63 MRU算法:第一次68字未命中;第2,3,4,6,7,8,10次各有4字未命中;第5,9次各有8字未命中;其余都命中. 所以,命中率p为 (43520-68-7x4-2 x8)/43520=99.74% 速度提高:tm/ta=tm/(tc+(1-p)tm)=10/(1+10x(1-p))=9.77倍

写策略(Cache一致性问题) 为何要保持在Cache和主存中数据的一致? 因为Cache中的内容是主存块副本,当对Cache中的内容进行更新时,就存在Cache和主存如何保持一致的问题。 以下情况也会出现“Cache一致性问题” 当多个设备都允许访问主存时 例如:I/O设备可直接读写内存时,如果Cache中的内容被修改,则I/O设备读出的对应主存单元的内容无效;若I/O设备修改了主存单元的内容,则Cache中对应的内容无效。 当多个CPU都带有各自的Cache而共享主存时 某个CPU修改了自身Cache中的内容,则对应的主存单元和其他CPU中对应的内容都变为无效。 写操作有两种情况 写命中(Write Hit):要写的单元已经在Cache中 写不命中(Write Miss):要写的单元不在Cache中

写策略(Cache一致性问题) 处理Cache读比Cache写更容易,故指令Cache比数据Cache容易设计 对于写命中,有两种处理方式 Write Through (通过式写、写直达、直写) 同时写Cache和主存单元 What!!! How can this be? Memory is too slow(>100Cycles)? 10%的存储指令使CPI增加到:1.0+100x10%=11 使用写缓冲(Write Buffer) Write Back (一次性写、写回、回写) 只写cache不写主存,缺失时一次写回,每行有个修改位(“dirty bit-脏位”),大大降低主存带宽需求,控制可能很复杂 对于写不命中,有两种处理方式 Write Allocate (写分配) 将主存块装入Cache,然后更新相应单元 试图利用空间局部性,但每次都要从主存读一个块 Not Write Allocate (非写分配) 直接写主存单元,不把主存块装入到Cache 直写Cache可用非写分配或写分配 回写Cache通常用写分配 为什么? SKIP

Write Through中的Write Buffer Cache CPU Memory Controller DRAM Write Buffer 在 Cache 和 Memory之间加一个Write Buffer CPU同时写数据到Cache和Write Buffer Memory controller(存控)将缓冲内容写主存 Write buffer (写缓冲) 是一个FIFO队列 一般有4项 在存数频率不 高时效果好 最棘手的问题 当频繁写时,易使写缓存饱和,发生阻塞 如何解决写缓冲饱和? 加一个二级Cache 使用Write Back方式的Cache BACK

写策略(Cache一致性问题) 问题1:以下描述的是哪种写策略? Write Through 、Write Allocate! 问题2:如果用非写分配, 则如何修改算法? BACK

写策略2:Write Back算法 问题:以下算法描述的是哪种写策略? Write Back 、Write Allocate!

写策略2:Write Back中的修改(“脏”)位

Cache大小、Block大小和缺失率的关系 而缺失率与Cache大小、Block大小、Cache级数等有关 Cache大小:Cache越大,Miss率越低,但成本越高! Block大小:Block大小与Cache大小有关,且不能太大,也不能太小!

Block Size Tradeoff (块大小的选择) 块大能很好利用 spatial locality, BUT: 块大,则需花更多时间读块,缺失损失变大 块大,则Cache行数变少,缺失率上升 Average Access Time: = Hit Time x (1 - Miss Rate) + Miss Penalty x Miss Rate Average Access Time Increased Miss Penalty & Miss Rate Block Size Miss Penalty Block Size Miss Rate Exploits Spatial Locality Fewer blocks: compromises temporal locality Block Size 所以,块大小必须适中!

系统中的Cache数目 刚引入Cache时只有一个Cache。近年来多Cache系统成为主流 多Cache系统中,需考虑两个方面: [1] 单级/多级? 片内(On-chip)Cache: 将Cache和CPU作在一个芯片上 外部(Off-chip)Cache:不做在CPU内而是独立设置一个Cache 单级Cache:只用一个片内Cache 多级Cache:同时使用L1 Cache和L2 Cache,有些高端系统甚至有L3 Cache,L1 Cache更靠近CPU,其速度比L2快,其容量比L2大 [2] 联合/分立? 分立:指数据和指令分开存放在各自的数据和指令Cache中 一般L1 Cache都是分立Cache,为什么? L1 Cache的命中时间比命中率更重要!为什么? 联合:指数据和指令都放在一个Cache中 一般L2 Cache都是联合Cache,为什么? L2 Cache的命中率比命中时间更重要!为什么? 因为缺失时需从主存取数,并要送L1和L2cache,损失大!

多核处理器中的多级Cache

设计支持Cache的存储器系统 指令执行若发生Cache缺失,必须到DRAM中取数据或指令 在DRAM和Cache之间传输的单位是Block 假定存储器访问过程: CPU发送地址到内存:1个总线时钟 访问内存的初始化时间:10个总线时钟 从总线上传送一个字:1个总线时钟 CPU MM 可以有三种不同的组织形式! 假定一个Block有4个字,则缺失损失各为多少时钟?

设计支持Cache的存储器系统 4x(1+10+1)=48 假定存储器访问过程: CPU发送地址到内存:1个总线时钟 内存访问时间:10个总线时钟 从总线上传送一个字:1个总线时钟 4x(1+10+1)=48 缺失损失为48个时钟周期 代价小,但速度慢!

设计支持Cache的存储器系统 Two-word: 2x(1+10+1)=24 Four-word: 1+10+1=12 假定存储器访问过程: CPU发送地址到内存:1个总线时钟 内存访问时间:10个总线时钟 从总线上传送一个字:1个总线时钟 Two-word: 2x(1+10+1)=24 Four-word: 1+10+1=12 缺失损失各为24或12个时钟周期 速度快,但代价大!

设计支持Cache的存储器系统 假定存储器访问过程: CPU发送地址到内存:1个总线时钟 内存访问时间:10个总线时钟 从总线上传送一个字:1个总线时钟 Interleaved four banks one-word: 1+1x10+4x1=15 第1个字 10 1 第2个字 10 1 第3个字 10 1 第4个字 10 1 缺失损失为15个时钟周期 代价小,而且速度快!

实例:奔腾机的Cache组织 主存:4GB=220x 27块x 25B/块 Cache:8KB=128组x2行/组 替换算法: LRU,每组一位LRU位 0:下次淘汰第0路 1:下次淘汰第1路 写策略: 默认为Write Back,可动态设置为Write Through。 Cache一致性: 支持MESI协议

实例:Pentium 4的cache存储器 指令cache及指令预取部件 有3个cache,分成两级: L1cache 64位,时钟频率 前端总线 指令cache及指令预取部件 有3个cache,分成两级: L1cache 数据缓存(L1数据cache),8KB 指令缓存, 8KB L2 cache,容量为256 KB~2MB 总线 接口部件 预取 控制逻辑 L2 cache (48GB/s) 256位,时钟频率 L1数据cache(8KB)

实例:Intel Core i7处理器的cache结构 i-cache和d-cache都是32KB、8路、4个时钟周期;L2 cache:256KB、8路、11个时钟周期。所有核共享的L3 cache:8MB、16路、30~40个时钟周期。Core i7中所有cache的块大小都是64B

缓存在现代计算机中无处不在

Cache和程序性能 程序的性能指执行程序所用的时间 考虑程序的访问局部性通常在数据的访问局部性上下工夫 数据的访问局部性主要是指数组、结构等类型数据访问时的局部性,这些数据结构的数据元素访问通常是通过循环语句进行的,所以,如何合理地处理循环对于数据访问局部性来说是非常重要的。

Cache和程序性能举例 (1)不考虑用于一致性和替换的控制位,数据cache的总容量为多少? 举例:某32位机器主存地址空间大小为256 MB,按字节编址。指令cache和数据cache均有8行,主存块为64B,数据cache采用直接映射。假定编译时i, j, sum均分配在寄存器中,数组a按行优先方式存放,其首址为320。 (1)不考虑用于一致性和替换的控制位,数据cache的总容量为多少? (2)a[0][31]和a[1][1]各自所在主存块对应的cache行号分别是多少? (3)程序A和B的数据访问命中率各是多少?哪个程序的执行时间更短?

Cache和程序性能举例 举例:某32位机器主存地址空间大小为256 MB,按字节编址。指令cache和数据cache均有8行,主存块为64B,数据cache采用直接映射。假定编译时i, j, sum均分配在寄存器中,数组a按行优先方式存放,其首址为320。 (1)主存地址空间大小为256MB,因而主存地址为28位,其中6位为块内地址,3位为cache行号(行索引),标志信息有28-6-3=19位。在不考虑用于cache一致性维护和替换算法的控制位的情况下,数据cache的总容量为: 8×(19+1+64×8)=4256位=532字节 。 (2)a[0][31]的地址为320+4×31=444,[444/64]=6(取整),因此a[0][31]对应的主存块号为6。6 mod 8=6,对应cache行号为6。 或: 444=0000 0000 0000 0000 000 110 111100B,中间3位110为行号(行索引),因此,对应的cache行号为6。 a[1][1]对应的cache行号为: [(320+4×(1×256+1))/64] mod 8=5。 (3)A中数组访问顺序与存放顺序相同,共访问64K次,占4K个主存块;首地址位于一个主存块开始,故每个主存块总是第一个元素缺失,其他都命中,共缺失4K次,命中率为1-4K/64K=93.75%。 方法二:每个主存块的命中情况一样。对于一个主存块,包含16个元素,需访存16次,其中第一次不命中,因而命中率为15/16=93.75%。 B中访问顺序与存放顺序不同,依次访问的元素分布在相隔256×4=1024的单元处,它们都不在同一个主存块中,cache共8行,一次内循环访问16块,故再次访问同一块时,已被调出cache,因而每次都缺失,命中率为0。