计算机组成原理(12) 第二章 - 主存储器的基本组成
1. 存储器芯片的基本原理
存储器芯片是计算机及各类电子设备中实现数据存储的核心硬件,其基本原理围绕 “如何稳定存储二进制信息(0 和 1)、如何精准定位存储单元、如何实现数据的读写操作” 三大核心问题展开。
一、核心目标:存储二进制信息
计算机中所有数据(文本、图像、指令等)均以二进制形式(0 和 1)存在,存储器芯片的核心功能是通过物理手段 “记录” 这些二进制状态,并在需要时 “读取” 或 “修改” 状态。
二进制状态的物理载体是存储单元—— 存储器芯片中最基本的构成单位,每个存储单元对应 1 位二进制信息(0 或 1)。
二、关键组成部分
一个存储器芯片通常由以下四个核心部分构成:
存储单元阵列
这是芯片的核心区域,是一个由行和列组成的巨大网格(像一个巨大的棋盘或Excel表格)。
每一个交叉点就是一个存储单元,它是最小的存储单位,用于保存一位(bit)数据,即 0 或 1。
整个阵列的规模决定了芯片的容量(例如,4Gb 芯片就有约 40 亿个存储单元)。
地址译码器
功能:“寻址”。CPU 或内存控制器要访问数据时,会发送一个地址信号。
地址译码器就像是一个“地图导航”,它根据这个地址,计算出具体要访问的是哪一行(Row)和哪一列(Column),并激活对应的线路。
读写控制电路
功能:“读数据”和“写数据”。
写操作:根据要写入的数据是 0 还是 1,通过位线向被选中的存储单元施加特定的电压或电流,改变其物理状态。
读操作:检测被选中的存储单元的物理状态(如通过测量电流、电压或电容),判断其代表的是 0 还是 1,并将这个微弱的信号放大,通过数据线输出。
控制逻辑
功能:“指挥协调”。它接收外部的控制信号(如片选、读使能、写使能),并协调地址译码器、读写电路等部件按顺序正确工作。
下图展示了这些核心部件是如何协同工作的:
2. 寻址
在计算机系统中,寻址(Addressing)是指通过特定规则或方式确定存储器中数据或指令存储位置的过程。它是 CPU 与存储器之间通信的核心机制,直接影响计算机的运行效率和灵活性。
一、寻址的基本概念
- 地址(Address):存储器中每个存储单元的唯一标识,类似 “门牌号”,通常用二进制数表示。例如,32 位系统中地址范围为
0x00000000
到0xFFFFFFFF
,对应 2³² 个存储单元。 - 寻址空间:CPU 可访问的最大存储器范围,由地址总线宽度决定。公式为:
寻址空间大小 = 2^ 地址总线位数
例如,64 位地址总线支持的寻址空间为 2⁶⁰字节(约 18EB)。 - 核心目标:通过地址快速定位数据,实现 CPU 对存储器的读 / 写操作。
二、寻址方式的分类
根据地址生成方式的不同,寻址可分为物理寻址和逻辑寻址两大类,二者在计算机系统中分工协作。
1. 物理寻址(Physical Addressing)
直接访问存储器物理位置的寻址方式,对应硬件层面的实际存储单元。
- 特点:地址由硬件直接解析,与物理存储器一 一对应,无转换过程。
- 应用场景:
- 嵌入式系统、单片机等简单计算机系统;
- 操作系统内核对物理内存的管理(如内存分配、映射)。
2. 逻辑寻址(Logical Addressing)
程序中使用的虚拟地址,需通过地址转换机制映射到物理地址。
- 核心作用:
- 隔离不同程序的内存空间,提高安全性;
- 实现内存虚拟化(如虚拟内存),突破物理内存限制。
- 地址转换机制:
- 分段(Segmentation):按程序逻辑划分内存段(如代码段、数据段),通过段表将逻辑地址转换为物理地址。
- 分页(Paging):将内存划分为固定大小的页(如 4KB),通过页表完成逻辑地址到物理地址的映射,是现代操作系统的主流方式。
- 段页式:结合分段和分页的优势,先分段再分页,兼顾逻辑隔离和内存利用率。
三、存储器芯片中的寻址原理
在存储器芯片(如 RAM、ROM)内部,寻址通过行地址和列地址的组合实现,具体流程如下:
- 地址线传输:CPU 通过地址总线将地址信号发送到存储器芯片。
- 地址译码:
- 行地址译码器:将高位地址转换为行选通信号,选中对应存储行;
- 列地址译码器:将低位地址转换为列选通信号,选中对应存储列。
- 数据访问:行、列交叉定位的存储单元被选中,通过数据线完成数据的读 / 写。
示例:对于 1024×8 位的 RAM(1KB 容量),需 10 根地址线(2¹⁰=1024),其中 5 根用于行地址,5 根用于列地址,共同定位 1 个字节的存储单元。
四、常见的指令寻址方式(针对 CPU 指令)
在汇编语言和机器指令中,指令的操作数寻址方式决定了如何获取操作数的地址,常见类型包括:
寻址方式 | 原理 | 示例(x86 汇编) |
---|---|---|
立即寻址 | 操作数直接包含在指令中,无需访问存储器。 | MOV AX, 0x1234 (将 0x1234 存入 AX) |
直接寻址 | 指令中直接给出操作数的逻辑地址。 | MOV AX, [0x2000] (访问地址 0x2000 的数据) |
间接寻址 | 操作数地址存放在寄存器或存储器中,需先读取地址再访问数据。 | MOV AX, [BX] (通过 BX 寄存器中的地址访问数据) |
寄存器寻址 | 操作数存放在 CPU 寄存器中,速度最快。 | MOV AX, BX (将 BX 的值存入 AX) |
相对寻址 | 以指令当前地址为基准,通过偏移量计算目标地址(常用于跳转指令)。 | JMP +0x05 (跳转到当前地址 + 5 的位置) |
变址寻址 | 基地址 + 偏移量的组合(如基址寄存器 + 变址寄存器),适合数组访问。 | MOV AX, [BX+SI] (BX 为基址,SI 为偏移) |
寻址是计算机系统中连接 CPU 与存储器的桥梁,其设计需在速度、灵活性和安全性之间找到平衡,是计算机体系结构的核心技术之一。