存储器概述
- 存放程序和数据
- 现代计算机系统以存储器为中心,指令、原始数据、运算结果都需要从存储器中读写
- 主要采用半导体器件和磁性材料
- 存储器中最小的存储单位为一个存储位
- 若干存储位组成存储单元,若干存储单元组成存储器或者存储体
存储器分类
按存储介质区分
存储介质必须满足的基本要求:
- 必须有两个明显区别的状态,表示0与1
- 这两个物理状态的改变速度要快,直接影响存储器的读写速度
- 半导体存储器(计算机主存)
- 磁表面存储器(磁盘、磁带)
- 光盘存储器
按存取方式分
- 随机存储器(存取时间与存储单元物理位置无关,如半导体存储器)
- 顺序存储器(顺序存取,存取速度快)
按存储器读写功能分
- 只读存储器(ROM)
- 随机读写存储器(RAM)
按信息的可保存性分
- 非永久记忆存储器(断电后信息系消息)
- 永久记忆存储器(断电后仍能保存信息)
按在计算机系统中的作用分
- 主存储器
- 辅助存储器
- 高速缓冲存储器
- 控制存储器
存储器分级结构
存储器性能从速度、容量、价格来衡量
目前通常采用多级存储器体系结构,有高速缓冲存储器、主存储器、外存储器,这个结构在应用程序员看来是一个存储器,速度接近最快的那个存储器、容量接近于最大的、单位价格也接近于最便宜的那个
- 内存储器(内存)
- 高速缓冲存储器+主存储器
- CPU能直接访问
- 外存储器(外存、辅助存储器)
- CPU不能直接访问的存储器
- 必须先被调入内存才能被CPU使用
高速缓冲存储器(CACHE)
- 计算机中高速、小容量的半导体存储器
- 位于CPU和主存之间,匹配两者速度
- 和主存比,存取快,但是容量小
主存储器
- 计算机系统主要存储器
- 存放计算机正在执行的大量程序数据
- 主要由MOS半导体存储器组成
外存储器
- 计算机系统的大容量辅助存储器
- 用于存放系统中的程序和数据
- 与主存相比,容量大,成本低,速度慢。
Cache和主存储器构成Cache-主存系统
由主存和外存构成虚拟存储器系统
存储器的基本构成
-
存储矩阵
若干存储单元排列成矩阵形式,每个存储单元都有固定的地址
-
地址译码器
根据地址输入,在存储矩阵中选出指定的存储单元,把数据送往输出缓冲器
-
输出缓冲器
增加数据输出负载能力,提供三态控制,和系统总线相连
半导体存储器芯片
随机读写存储器(RAM)
按保存数据的机理分为
- 静态存储器(SRAM)
- 动态存储器(DRAM)
静态存储器(SRAM)
- 双稳态触发器保存信息
- 集成度低成本高功耗大
- 通常作为Cache的存储体
动态存储器(DRAM)
- MOS电容存储电荷
- 电路简单,集成度高成本低功耗小,但需要反复刷新,速度慢
- 作为主存储器的主体部分
- 刷新操作即为防止存储信息因电荷泄露丢失,外界按一定规律不断给栅极进行充电。不断地刷新。
- DRAM控制器可以控制刷新,借助这个器件可以把DRAM当作SRAM一样使用
增强型DRAM(EDRAM)
- 在DRAM芯片上集成一个高速小容量的SRAM芯片
- 这个芯片起到高速缓存的作用,显著改进DRAM芯片性能
- 将由若干EDRAM芯片组成的存储模块做成小电路插件板形式,就是目前普遍使用的内存条
只读存储器(ROM)
- 不可重写只读存储器
- 可重写只读存储器
最大优点:不易失性
不可重写只读存储器
-
掩模只读存储器(MROM)
生产厂家利用掩模(Mask)计数把信息写入存储器
-
可编程只读存储器(PROM)
由用户一次性写入
可重写只读存储器
用户写数据,需要变动时可以修改
- 光擦可编程只读存储器(EPROM)
- 电擦可编程只读存储器(EEPROM)
闪速存储器(Flash ROM)
- 是一种块擦写型存储器,是一种高密度、非易失性的半导体存储器
- 其中内容数据不像RAM需要电源支持,但是具有可重写性
- 某低电压下,可读不可写
- 某高电压下,可更改和删除
- 利用软件写入信息,写入即固定
- 可用于存储BIOS程序
- 便于用户自行升级BIOS
主存储器
主存储器是CPU能直接访问的存储器,由随机读写存储器RAM和只读存储器ROM组成,快速进行读写操作。
主存储器的技术指标
-
存储容量
在一个存储器中可以容纳的存储单元的总数称为存储容量
-
存取时间
存储器访问时间,指启动一次存储器操作到完成该操作所需的时间
-
存储周期
访问周期,指连续启动两次独立的存储器操作所需间隔的最小时间
-
存储器带宽
单位时间内存储器所存取信息量,常以bps为单位。
主存储器的基本组成
- 存储体
- 寻址系统
- 存储器数据寄存器(MDR)
- 读写系统
- 控制线路
工作原理:由CPU发来的地址送到存储器地址寄存器中,在读写控制线路的作用下,经过地址译码后,选中存储体中某一存储单元,对该存储单元进行读/写操作,读出或写入的信息都暂存于存储器数据寄存器中。
主存储器的扩展
CPU对存储器进行读/写操作,首先由地址总线给出地址信号,然后发出读操作或写操作的控制信号,最后在数据总线上进行信息交流。存储器同CPU连接时,要完成地址线、数据线和控制线的连接。
- 位扩展法,字长加大,存储器字数与存储器芯片一致
- 字扩展法,仅在字向扩充,位数不变
- 字位同时扩展法
高速存储器
CPU与主存储器在速度上不匹配,加速CPU和存储器之间的有效传输可以采用的方法如下:
- 主存储器采用更高速的技术缩短读写时间,比如加长存储器字长。
- 采用并行操作的双端口存储器
- 用Cache缩短读出时间
- 在每个存储器周期中存取几个字
双端口存储器
- 具有两个彼此独立的读写口
- 可以访问同一个存储单元,并行特性
- 通常,一个读写口面向CPU,另一个读写口面向外设或输入输出处理机
- 可以对存储器中任何位置上的数据进行并行、独立的存取操作
- 处理读写冲突
多模块交叉存储器
-
如果主存储体由物理上互相分隔的若干个模块构成,每个模块配置自己的存储器地址寄存器和存储器数据寄存器和读写电路,变成能独立进行读写操作的存储器,那么可能在任一给定时刻对几个模块同时执行读或写操作,提高整个主存的平均存取时间。
-
由多个能独立操作的模块组成的存储器为多模块存储器,地址分配有顺序方式和交叉方式两种方式。
顺序方式中,高n位表示模块号,低m位表示块内地址,只有一个模块和CPU进行数据存取操作,串行工作
交叉方式中,低n位表示模块号,高m位表示块内地址,连续地址分布在连续的不同模块中,而同一个模块内的地址不连续
-
借由交叉存储方式,可以实现对连续字成块传送的多模块流水式并行存取。
相联存储器
不同于传统按地址访问的存储器,相联存储器是按内容访问的。
存放在相联存储器中的项有KEY——DATA的映射,KEY为地址,DATA为被读写信息。
基本原理:
- 把存储单元内容一部分作为关键字来检索
- 读出或写入存储器中与该检索项相符存储单元内容
组成:
- 存储体
- 检索寄存器
- 屏蔽寄存器
- 符合寄存器
- 比较线路
- 代码寄存器
应用:
- 虚拟存储器中存放段表、页表、快表
- Cache中存放块地址
高速缓冲存储器(Cache)
在计算机系统中,CPU的运行速度与主存访问速度非常不匹配。Cache由于解决这个问题。
Cache基本原理
基本功能
程序访问的局部性现象:程序地址分布连续,CPU在较短的时间内,是对连续地址的一段很小的主存空间频繁访问。
基于局部性原理,把程序活跃块集中在一个小容量高速Cache中,使CPU的访存操作大多针对Cache进行。
工作原理
- CPU与Cache之间数据交换以字为单位
- Cache与主存之间的数据交换以块为单位
- 一个块由若干定长字组成
当CPU读取主存中一个字时,该字主存地址发送给Cache与主存,Cache控制逻辑首先判断字是否在Cache中:
- 在则直接传送
- 不在则主存读周期读出送到CPU,同时把这整个数据块送到Cache,用一定替换策略替换Cache中某块
命中率
基于局部性原理的设置使得大多数程序访问数据都能在Cache中找到,由此引入CPU工作效率即命中率
- 指CPU要访问的信息在Cache中的概率
- 命中率越高,CPU访问主存速度就越接近访问Cache速度
- Cache容量越大,命中率越高
- 容量,命中率不呈线性关系增长,应与成本折中
计算方式
N c N_c Nc:Cache完成存取总次数
N m N_m Nm:主存完成存取总次数
h h h:命中率
t c t_c tc:Cache访问时间
t m t_m tm:主存访问时间
t a t_a ta:Cache-主存系统平均访问时间
则有
h = N c N c + N m h=\frac{N_c}{N_c+N_m} h=Nc+NmNc
t a = h t c + ( 1 − h ) t m t_a=ht_c+(1-h)t_m ta=htc+(1−h)tm
访问效率为 e = t c t a e=\frac{t_c}{t_a} e=tatc
地址映射
- 为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射
直接映射
主存中的一个块只能映射到Cache的某一特定块中去
- 比较简单,而且不涉及替代算法问题
- Cache的存储空间得不到充分利用
全相联映射
主存中任何一块都可以映射到Cache中的任何一块位置上
- Cache利用率高,块冲突概率低
- 电路设计困难,只适合小容量Cache
组相联映射
本质上是前两者折中方案
-
主存和Cache都分组
-
组间直接映射,组内全相联映射
主存块存放到Cache哪个组是固定的,但是具体存放到哪一块则是灵活的
替换策略
最不经常使用(LFU)算法
- 将一段时间内被访问次数最少的那个块替换出去
- 容易把新调入的块替换出去
近期最少使用(LRU)算法
- 把CPU近期最少使用的块替换出去
- 保护了刚调入Cache的数据块,提高命中率
随机替换
- 最简单的替换,根据随机数选择替换
- 容易实现,速度快
- 降低命中率和Cache效率
写操作策略
Cache内容是主存内容子集,CPU写入Cache时,写操作策略使Cache内容与主存内容保持一致
写回法(Write-Back)
CPU写Cache命中时
- 只修改Cache内容
- 此块被换出时才写回主存
异步进行,数据不一致
全写法(Write-Through)
CPU写Cache命中时
- Cache与主存同时发生写修改
同步进行,数据一致,但是降低Cache功效
写一次法(Write-Once)
结合上述两者的写操作策略
- 第一次写命中时同时写入主存
- 别的写命中与写未命中与写回法基本相同
Pentium PC机的Cache
两级Cache结构,2路组相联映射,CPU内1级(L1),主板上2级(L2),L1为L2的子集。
- L1分为指令Cache(只读、单端口),数据Cache(随机读/写,双端口)
- L2Cache用写回法,L1数据Cache写一次法
- L2负责整个系统Cache-主存一致性
- L1响应L2,与L2一起维护L1/L2Cache一致性
- 保证L1-L2-主存三级存储系统一致性
虚拟存储器
虚拟存储器基本原理
虚拟存储器简介
由操作系统把主存和辅存管理起来,实现自动覆盖,是一个逻辑模型,指主存-外存层次。
物理地址
- 实际的主存单元地址
- CPU地址引脚送出
- 用于访问主存
- CPU地址总线的宽度为m位,则物理地址空间大小为 2 m 2^m 2m
虚拟地址
- 编程时使用的地址
- 编译程序生成,为逻辑地址
- 受辅存容量限制
- 比实际地址大
CPU以虚拟地址访问主存,已在主存中则直接访问,否则把包含这个字的存储块调入后访问,若CPU已满则替换后访问
不同于Cache-主存层次(硬件),虚拟存储器是软硬件相结合的
虚拟存储器中未命中的性能损失比Cache系统未命中损失更大
主存-外存层次的基本信息传送单位
段-页-存储单元(-存储位)
可采用页、段、段页三种方案
页、段二维,段页三维
页式管理系统
- 定长的页为信息传送单位
- 页面在主存中的位置固定
- 页表
- 优点为每页长度固定,建立页表方便
- 缺点为最后一页零碎空间无法利用,并且页不是逻辑上独立实体
段式管理系统
-
段的长度不相同
-
主存按段分配
-
程序的逻辑结构划分为多个独立段
-
段表
-
优点为分界与程序的自然分界对应,具有逻辑独立性
-
缺点为段起始地址和结束地址不定,内存空间分配不方便,并且容易在段间留下许多碎片
段页式存储管理系统
- 程序按模块分段,段内分页
- 进入主存仍然以页为基本信息单位
页式虚拟存储器
- 以页为基本单位的虚拟存储器
- 主存的页称为实页,虚存的页称为虚页
- 高位字段存放页号,低位字段存放页内地址
段式虚拟存储器
- 以段位基本单位的虚拟存储器
- 段按照程序的逻辑结构划分
段页式虚拟存储器
- 把程序按逻辑单位分段后,再把每段分成固定大小的页
- 主存空间也划分为若干个同样大小的页
- 虚存和实存之间以页为基本传送单位,每个程序对应一个段表,每段对应一个页表
- 虚地址包含段号、段内页号、页内地址
替换算法
CPU要访问的数据或指令不在主存中时,产生页面失效(缺页)
与Cache中块替换策略相比有三点显著不同
- 缺页至少要涉及一次磁盘外存存取读取所缺页,因缺页使系统蒙受损失比Cache未命中大得多
- 页面替换时操作系统软件实现,Cache块替换是硬件实现
- 页面替换选择余地很大,属于一个进程的页面也能替换
- 有LRU算法、LFU算法、FIFO算法等
Pentium PC机的虚拟地址模式
- Pentium的存储管理部件MMu包括分段部件SU和分页部件PU
- 分段不分页模式
- 不分段分页模式
- 分段分页模式
存储保护
多个用户共享主存时,会有多个用户程序和系统软件存在于主存中
- 防止一个用户程序出错破坏其他用户程序和软件
- 防止一个用户程序不合法的访问不属于它的主存区域
存储区域保护
页表和段表保护方式
- 程序有自己的页表和段表,本身存在访问限制,若虚页号出错则在页表中找不到,访问不了主存
- 是在未形成主存地址前的保护
键保护方式
- 为操作系统每一页分配键(存储键)
- 为打开这个锁,必须有访问键,同时为没到程序赋予访问键在状态寄存器中
- 两者相符时才允许访问
环保护方式
- 相比于上述两种(保护别的程序区域不受当前程序破坏),环保护对正在执行的程序进行保护。
- 操作系统确定环号,从内到外逐层增大,环号越大级别越低,内层允许访问外层。
访问方式保护
对主存信息使用分为读、写、执行三种方式,由此形成组合逻辑