Lecture 20
Back to Memory(回到内存基础)
1. 内存地址(Address):
• 主存储器的每个存储单元都有一个唯一的地址。
• 地址用于标识和访问内存中的特定位置。
2. 内存地址的重要性:
• 存储容量越大,所需的地址位数(Address Width)越多。
• 最大内存长度(Maximal memory length) 由 地址宽度 (address width)决定。
Address Width(地址宽度)
1. 地址宽度的定义:
• 地址宽度由以下因素决定:
• CPU 的地址寄存器位数(例如 IP 或 MAR)。
• 地址总线的线路数量(Address Bus)。
2. 说明:
• 地址宽度直接影响系统能够访问的最大内存范围。
• 例如,地址宽度是 32 位,则可以访问的内存范围为 个存储单元。
Address Width and Memory Length(地址宽度与内存长度的关系)
1. 不同地址宽度对应的最大内存容量:
• 16 位地址:64 KB。
• 20 位地址:1 MB。
• 24 位地址:16 MB。
• 32 位地址:4 GB(常见于 Pentium 时代)。
• 64 位地址:> 17 亿 GB(适用于现代 64 位架构)。
2. 总结:
• 地址宽度越大,系统能够访问的内存越多,但实际使用时可能受其他硬件限制。
Memory Parameters(内存参数)
• 图中展示了不同地址宽度下内存地址空间的表示方式。
• 例如:
• 16 位地址宽度可访问 个存储单元(64K)。
• 32 位地址宽度可访问 个存储单元(4G)。
2. 重要性:
• 地址宽度决定了系统的寻址能力和最大内存容量。
Ideal Configuration(理想配置)
1. 32 位地址宽度的理想配置:
• 32 位地址宽度的内存寻址范围是 4 GB。
• 图示显示了一个理想的内存系统,其中 CPU 通过 32 根地址线连接到一个 4 GB 的 SRAM 模块。
2. 理想状态:
• 单个内存芯片负责整个地址空间。
• CPU 可以通过完整的地址线直接访问内存。
Not So Ideal in Practice(实际中的非理想情况)
1. 现实中的内存使用限制:
• 即使有 4 GB 的地址空间,很多系统并未完全利用。
• 实际的内存芯片容量通常为 128 Mb、256 Mb 或 1 Gb,需要组合多个芯片来实现。
2. 示例:
• 8 个 256 Mb 的芯片(chips)可以组合成一个 256 MB 的模块(module)。
• 存储器寻址不仅需要选择芯片,还需要选择芯片内的具体位置。
Memory Modules(内存模块)
1. SIMM 卡(Single Inline Memory Module):
• 容量:16 MB。
• 特性:
• 50 ns 的访问时间。
• 32 位数据宽度。
• 使用 72 个引脚。
• SIMM 是早期的内存模块设计,仅支持单侧接触。
2. DIMM 卡(Dual Inline Memory Module):
• 容量:64 MB。
• 特性:
• 100 MHz 的时钟频率。
• 64 位数据宽度。
• 使用 168 个引脚。
• DIMM 是现代内存模块设计,支持双侧接触,提供更高的性能。
Memory Mapping(内存映射)
1. 内存映射的定义:
• 内存映射指的是将地址空间映射到物理内存模块或芯片上。
• 当 CPU 发送地址时:
• 地址的一部分用于定位正确的内存芯片。
• 另一部分用于确定芯片内的具体地址。
2. 内存映射表(Memory Maps):
• 系统如何将地址映射到特定存储位置由内存映射表决定。
Memory Map for a Small System(小型系统的内存映射表)
1. 示例表格:
• 包括设备(PROM 和 RAM)的容量、引脚数量、地址范围等。
2. 内存分配:
• 每个设备分配一个独特的地址段。
• 通过地址总线上的特定信号选择芯片并访问数据。
Memory Address Decoding(内存地址解码)
1. 解码需求:
• 通常内存芯片的宽度与地址总线宽度不匹配。
• 例如:
• CPU 可能发送 32 位地址。
• RAM 可能只接收 24 位地址。
2. 解码器电路(Memory Address Decoding circuit):
• 使用专门的 内存地址解码器 电路完成必要的解码。
• 该电路将高位地址信号分配给特定芯片。
Memory Levels(内存层次)
1. 内存的层次结构:
• 寄存器(Registers):
• 位于 CPU 内部,访问速度最快,容量最小。
• 缓存(Cache Memory):
• 包括 L1 和 L2 缓存,用于快速存取数据。
• 主存(Main Memory):
• 通常指 RAM,用于存储当前运行程序和数据。
• 大容量存储(Mass Storage):
• 如硬盘,用于存储永久性数据。
Why We Need Memory Levels(为何需要内存层次)
1. 原因:
• 适应更快的 CPU 需求:
• 高速缓存和寄存器弥补了 CPU 和内存之间的速度差距。
• 降低系统成本:
• 高速内存(如缓存)成本高,通过分层设计可减少整体开销。
• 满足软件系统扩展的需求:
• 现代软件需要大量存储器和灵活的存储解决方案。
以下是逐页内容详细解析:
Registers(寄存器)
1. 定义:
• 寄存器是处理器内部的核心部分,作为最小单位的存储器单元。
• 用于暂时存储处理器正在使用的数据。
2. 特性:
• 访问速度非常快:通常只需几纳秒。
• 容量有限:一般只有几十个寄存器,每个寄存器可以是 32 位、64 位或 80 位。
3. 作用:
• 在计算过程中,存储操作数、中间结果或地址。
Cache Memory(缓存内存)
1. 定义:
• 缓存是比主存更快的存储器,位于 CPU 和主存之间。
• 通常由速度快但更昂贵的 SRAM(静态 RAM) 组成。
2. 功能:
• 存储主存的一部分数据副本。
• 加快访问活跃数据(代码或数据块)的速度。
3. 工作方式:
• CPU 首先检查缓存,若找到所需数据则称为 缓存命中。
• 如果没有找到,则从主存中加载所需数据到缓存中。
Levels of Cache(缓存的层次)
1. 缓存层次结构:
• 一级缓存(L1 Cache):
• 直接位于 CPU 内部。
• 容量较小(8 KB 到 64 KB),但速度最快。
• 二级缓存(L2 Cache):
• 位于 CPU 和主存之间。
• 容量较大(128 KB 到 512 KB),但速度比 L1 缓慢。
2. 层次化的目的:
• 提高数据访问效率,减小与主存之间的性能差距。
Localisation of Access(访问局部性)
1. 定义:
• 内存访问局部性 是缓存工作原理的核心概念。
• 指计算机倾向于在一段时间内访问存储器的某些区域。
2. 两种局部性:
• 时间局部性:最近被访问的数据很可能在短期内再次被访问。
• 空间局部性:与当前访问地址相邻的地址很可能在短期内被访问。
3. 实现方法:
• 将需要频繁访问的代码或数据加载到靠近 CPU 的缓存中。
Why Localisation of Access Works(为何访问局部性有效)
1. 原因:
• 编程习惯:程序员通常会将相关数据项聚集在数组或记录中。
• 重复模式:程序中经常包含循环或函数调用等重复结构。
• 编译器优化:编译器会尝试将代码组织得更高效。
Cache Memory and Cache Control Unit(缓存内存与缓存控制单元)
1. 结构:
• CPU:从缓存中获取数据,若命中则直接使用,否则通过缓存控制器访问主存。
• 缓存控制单元:管理缓存与主存的数据交换。
• 系统总线:连接 CPU、缓存、主存和其他 I/O 子系统。
2. 示例配置:
• 256 KB 缓存,访问时间 10 ns。
• 64 MB 主存,访问时间 60 ns。
3. 工作原理:
• 当 CPU 请求数据时,优先检查缓存。
• 如果缓存中没有,则从主存中加载数据到缓存,供 CPU 使用。
Memory hierarchy
存储器越接近 CPU,访问速度越快,但容量越小。
Memory Hierarchy Characteristics(存储器层次特性)
1. 层次结构的趋势:
• 向下层次:
• 容量增加。capacity
• 访问时间增加。access time
• 处理器对存储器的访问频率减少。
• 每位的成本降低。
• 使用汇编代码,依次读取数组元素并计算总和。
2. 局部性分析:
• 时间局部性:
• 程序会多次访问数组内的同一元素或附近的元素。
• 空间局部性:
• 数组内的元素存储在相邻地址中,因此连续访问会利用内存的空间局部性。
Q&A 1 - Which has the fastest access?
1. 问题:
• 以下哪个具有最快的访问速度?
• A. Register
• B. Cache
• C. Disk
• D. Tape
2. 答案:
• A. Register
Q&A 2 - Which is most expensive?
1. 问题:
• 以下哪个存储器的成本最高(每位成本)?
• A. Register
• B. Cache
• C. Disk
• D. Tape
2. 答案:
• A. Register
问题:
• 给定以下组件,形成一个合理的存储器层次结构,以确保良好的成本和速度折中。
• Cache(缓存)
• Disk(磁盘)
• RAM(主存)
答案:
• 合理的存储器层次结构如下:
1. Cache(缓存):
• 访问速度最快,成本最高。
• 用于存储经常使用的数据。
• 位于 CPU 和 RAM 之间。
2. RAM(主存):
• 访问速度次于缓存,成本适中。
• 用于存储当前程序运行所需的数据和代码。
3. Disk(磁盘存储):
• 访问速度最慢,成本最低。
• 用于长期存储大容量数据。
局部性的时间属性(Temporal Locality)
问题:
• 局部性可以是时间局部性,这意味着最近使用过的数据比其他数据更可能被访问。(T 或 F)
答案:
• T(True)
解析:
• 时间局部性:
• 描述程序倾向于多次访问最近使用的数据。
• 例如,在循环中访问的变量会在每次循环迭代中重复被访问。