第四章《存储器》(中)
主存储器
主存储器的基本组成
主存储器和CPU的联系
- 从存储器读一个消息字时
- 首先由CPU将该字的地址送到MAR,经地址总线送至主存,然后发出读命令。主存接到读命令后,得知需将该地址单元的内容读出,便完成读操作,将该单元的内容读至数据总线上,至于该信息由MDR送至什么地方,由CPU决定
- 向存储器写一个消息字时
- 首先由CPU将该字所在主存单元的地址经MAR送到地址总线,并将信息送入MDR,然后向主存发出写命令,主存接到写命令后,便将数据线上的信息写入对应地址线指出的主存单元中
主存中存储单元地址的分配
主存各存储单元的空间位置是由单元地址号来表示的,而地址总线是用来指出存储单元地址号的,根据该地址可读出或写入一个存储字。不同的机器存储字长也不同,为了满足字符处理的需要,常用8位二进制数表示一个字节,因此存储字长都取8的倍数。通常计算机系统即可按字寻址,也可按字节寻址。
主存的技术指标
主存的主要技术指标是存储容量和存储速度
存储容量
- 存储容量是指主存能存放二进制代码的总位数,即:存储容量=存储单元个数X存储字长
- 它的容量也可用字节总数来表示,即:存储容量=存储单元个数X存储字长/8
- 目前的计算机存储容量大多以字节数来表示,例如,某机主存的存储容量为256MB,则按字节寻址的地址线位数对应28位
存储速度
- 存储速度是由存取时间和存取周期来表示的
- 存取时间又称为存储器的访问时间,是指启动一次存储器操作到完成该操作所需的全部时间。存取时间分读出时间和写入时间两种。读出时间是从存储器接收到有效地址开始,到产生有效输出所需的全部时间。写入时间是从存储器接收到有效地址开始,到数据写入被选中单元为止所需的全部时间
- 存取周期是指存储器进行连续两次独立的存储器操作所需的最小间隔时间,通常存取周期大于存取时间
存储器带宽
- 与存储周期密切相关的指标为存储器带宽,它表示单位时间内存储器存取的信息量,单位用字/秒,字节/秒,位/秒。如存取周期为500ns,每个存取周期可访问16位,则它的带宽为32M位/秒,带宽是衡量数据传输率的重要技术指标
- 为提高存储器的带宽,可以采用以下措施
- 缩短存取周期
- 增加存储字长,使每个存取周期可读/写更多的二进制位数
- 增加存储体
半导体存储芯片
半导体存储芯片的基本结构
地址线是单向输入的,其位数与芯片容量有关
数据线是双向的,其位数与芯片可读出或写入的数据位数有关。数据线的位数与芯片容量有关。
地址线和数据线共同反映存储芯片的容量。例如,地址线10根,数据线4根,则容量为210x4=4K位
控制线主要有读/写控制线与片选线两种。
半导体存储芯片的译码驱动方式
半导体存储芯片的译码驱动方式有两种:线选法和重合法
线选法
用一根字选择线(字线),直接选中一个存储单元的各位(如一个字节)。这种方式结构较简单,但只适用于容量不大的存储芯片。
重合法
如图,只要64根选择线(X,Y两个方向各32根),便可选择32X32矩阵中的任一位。
随机存取存储器
随机存取存储器按其存储信息的原理不同,可分为静态RAM和动态RAM两大类
静态RAM
静态RAM基本单元电路
动态RAM
常见的动态RAM基本单元电路有三管式和单管式两种,它们的共同特点都是靠电容存储电荷的原理来寄存信息
动态RAM的基本单元电路
动态RAM的刷新
刷新的过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程
由于存储单元被访问是随机的,有可能某些存储单元长期得不到访问,不进行存储器的读/写操作,其存储单元内的原信息将会慢慢消失。为此,必须采用定时刷新的方法,它规定在一定的时间内,对动态RAM的全部基本单元电路必作一次刷新,一般取2ms,这个时间称为刷新周期,又称再生周期。刷新是一行行进行的,必须在刷新周期内,由专用的刷新电路来完成对基本单元电路的逐行刷新,才能保证动态RAM内的信息不丢失。通常有三种方式刷新:集中刷新,分散刷新和异步刷新。
集中刷新
集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。刷新时称为“死时间”,又称访存“死区”
分散刷新
分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。其中,把机器的存取周期tc分成两段,前半段tm用来读/写或维持信息,后半段tR用来刷新,即tc=tm+tr.这比允许的间隔2ms要短得多,而且也不存在停止读/写操作的死时间,但存取周期长了,整个系统速度降低了。
异步刷新
异步刷新是前两种方式的结合,它即可缩短“死时间”,又充分利用最大刷新间隔为2ms的特点。将刷新安排在CPU对指令的译码阶段,由于这个阶段CPU不访问存储器,所以这种方案即克服了分散刷新需独占0.5us用于刷新,使存取周期加长且降低系统速度的缺点,又不会出现集中刷新的访存“死区”问题,从根本上提高了整机的工作效率。
动态RAM与静态RAM的比较
只读存储器
按ROM的原始定义,一旦注入原始信息即不能改变,但随着用户的需要,总希望能任意修改ROM内的原始信息。这便出现了PROM,EPROM,EEPROM等
对半导体ROM而言,基本器件为两种:MOS型和TTL型
掩模ROM(MROM)
- 行列选择性交叉处有MOS管为“1”
- 行列选择线交叉处无MOS管为“0”
PROM
PROM是可以实现一次性编程的只读存储器
EPROM
EPROM是一种可擦除可编程只读存储器,它可以由用户对其所存信息作任意次的改变
EEPROM(多次性编程)
电可擦写
局部擦写
全部擦写
Flash Memory(闪速型存储器)
EPROM 价格便宜 集成度高
EEPROM 电可擦洗重写
比EEPROM快 具备RAM功能
存储器与CPU的连接
存储容量的扩展
由于单片存储芯片的容量总是有限的,很难满足实际的需要,因此,必须将若干存储芯片连在一起才能组成足够容量的存储器,称为存储容量的扩展,通常有位扩展和字扩展。
位扩展
字扩展
字,位扩展
指既增加存储字的数量,又增加存储字长
存储器与CPU的连接
存储芯片与CPU芯片相连时,特别要注意片与片之间的地址线,数据线和控制线的连接。
存储器的校验
在计算机运行过程中,由于种种原因致使数据在存储过程中可能出现差错。为了能及时发现错误并及时纠正错误,通常可将原数据配成汉明编码
汉明码的组成
提高访存速度
随着计算机应用的领域不断扩大,处理的信息量越来越多,对存储器的工作速度和容量要求也越来越高。此外,因CPU的功能不断增强,I/O设备的数量不断增多,致使主存的存取速度已成为计算机系统的瓶颈。可见,提高访存速度也成为迫不及待的任务。
提高访存速度的措施
- 采用高速组件
- 采用层次结构,Cache-主存
- 调整主存结构
单体多字系统
由于程序和数据在存储体内是连续存放的,因此CPU访存取出的信息也是连续的,如果可以在一个存取周期内,从同一地址取出4条指令,然后再逐条将指令送至CPU执行,即每隔1/4存取周期,主存向CPU送一条指令,这样显然增大了存储器的宽度,提高了单体存储器的工作速度。
上图示意了一个单体四字结构的存储器,每字W位,按地址在一个存取周期内可读出4xW位的指令或数据,使主存带宽提高到4倍。显然,采用这种办法的前提是:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显
多体并行系统
多体并行系统就是采用多体模块组成的存储器,每个模块有相同的容量和存取速度,各模块各自都有独立的地址寄存器(MAR),数据寄存器(MDR),地址译码,驱动电路和读/写电路,它们能并行工作,又能交叉工作。
高位交叉 顺序编址(一个体存满后,再存入下一个体)个体并行工作
高位地址表示体号,低位地址为体内地址
这种编址方式由于一个体内的地址是连续的,有利于存储器的扩充
低位交叉,各个体轮流编址
低位地址表示体号,高位地址为体内地址。这种编址方法又称模M编址(M等于模块数)
低位交叉的特点
高性能存储芯片
采用高性能存储芯片也是提高主存速度的措施之一。DRAM集成度高,价格便宜,广泛应用于主存。其发展速度很快,几乎每隔3年存储芯片的容量就翻两番。为了进一步提高DRAM的性能,人们开发了许多对基本DRAM结构的增强功能,出现了SDRAM,RDRAM,CDRAM
SDRAM(Synchronous DRAM,同步DRAM)
在系统时钟的控制下进行读出和写入,以处理器-存储器总线的最高速度运行
CPU无需等待
RDRAM(Rambus DRAM)
由Rambus开发,主要解决存储器带宽问题
带Cache的DRAM(CDRAM)
在DRAM的芯片内集成了一个由SRAM组成的Cache,有利于猝发式读取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统