存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。计算机的主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统。
基本概念
-
字 M: 在计算机中,一串数码作为一个整体来处理或运算的,称为一个计算机字,简称字。,字通常分为若干个字节,字的长度用位数表示。
-
字长(位)N:等于数据总线的数量,一次传输多少数据量。
-
存储容量:存储字乘以存储单元数。
-
字节: 8位bit表示一个字节。
SRAM
DRAM
DRAM的读写周期
- 行、列地址分开传送
DRAM刷新
-
刷新:因为靠电容存储电荷的原理保存信息,而电荷一般只能保持1~2ms,所以必须在2ms内对器所有存储单元通过读取动作(不输出读取结果)恢复一次原状态。
-
刷新周期:从上一次对整个存储器刷新结束到下一次对整个存储器全部刷新一遍为止的时间。一般为2ms。
刷新方式 | 刷新描述 |
---|---|
集中式刷新 | 指在一个刷新周期内,利用一段固定时间,一次对存储器的所有行逐一刷新,在此期间停止对存储器的读/写操作 |
分散式刷新 | 两个读/写周期构成一个存储周期,存储周期前一个读/写期用来进行正常读/写操作或维持信息,存储周期后一个读/写周期用作刷新存储器的一行,N行的存储器经过N个系统周期时间刷新完 |
异步式刷新 | 集中刷新和分散刷新结合,在刷新周期的Tms内将N行的存储器要刷新一遍,则每隔(T/N)ms必须刷新一行,如果在(T/N)ms时间内包含M个读/写周期,则任取一个读/写周期完成一次刷新,剩余M-1个读/写周期完成正常的读写操作 |
存储器的扩展
描述: CPU对存储器进行读/写操作,首先由地址总线给出地址信号,然后要发出读操作或写操作的控制信号,最后在数据总线上进行信息交流,要完成地址线的连接、数据线的连接和控制线的连接。
扩展方式 | 描述 |
---|---|
位扩展 | 存储器的存储单元数不变,每个单元的位数(字长)增加 |
字扩展 | 每单元位数不变,增加单元个数 |
字位同时扩展 | 一个存储器的容量假定为M*N位,若使用L*K位的新片,需要在字向和位向同时进行扩展,共需要(M/L)*(N/K)个存储芯片。先扩位后扩字 |
只读存储器
- 只读存储器(ROM): 可以随机的读出其中的内容,但不能写入,是一种非易失性存储器,掉电后存储在其中的信息不会丢失。
并行存储器
目的: 加速CPU和存储器之间有效的传输。
-
双端口存储器: 同一个存储器具有两组相互独立的读写控制线路。
-
存储器的模块化组织: 一个由若干个模块组成的主存储器是线性编址的。
组织方式 | 描述 | 特点 | m个字的信息总量q | m个连续字的时间t | 带宽W |
---|---|---|---|---|---|
顺序方式 | 设存储器容量32字,分为4个模块m,每个模块8个字,字长为n。存储周期为T。访问地址按顺序分配给一个模块后,再按顺序分配给下一个模块 | 某个模块进行存取时,其它模块不工作,某一模块出现故障时,其它模块可以照常工作,通过增添模块来扩充存储器容量比较方便。但对于连续字的成块传输,各模块串行工作,存储器的带宽受限制 | q=m*n | t=m*T | W=q/t |
交叉方式 | 设存储器容量32字,分为4个模块m,每个模块8个字。字长为n,存储周期为T,总线传送周期为h,访问线性依次地址按顺序分配给各个模块的同一个字,线性地址分配完毕 | 地址码的低位字段经过译码送到不同的模块,而高位字段指向相应模块内的存储字。连续地址分布在相邻的不同模块内,同一个模块内的地址都是不连续的,对连续字的成块传送可实现多模块流水式并行存取,大大提高存储器的带宽 | q=m*n | t=T+(m-1)*h | W=q/t |
Cache存储器
定义:介于CPU和主存之间的小容量存储器,存取速度比主存快,能高速地向CPU提供指令和数据。
过程:当CPU读取主存中一个字时,发出此字的内存地址到Cache和主存。此时,Cache控制逻辑根据地址来判断此字当前是否在Cache中;若是,此字立即传送给CPU;若非,则用主存读取周期把此字从主存读出送到CPU,于此同时,把含有这个字的整个数据块从主存读出送到Cache中。若Cache已满,由管理Cache的硬件电路来实现Cache的替换。
交换内容:CPU与Cache之间的数据交换是以字为单位,而Cache与主存之间的数据交换是以块为单位。
Cache的命中率:
其中Nc表示Cache完成存取的总次数,Nm表示主存完成存取的总次数,h定义为命中率。
Cache/主存系统的平均访问时间:
其中tc表示命中时的Cache访问时间,tm表示未命中时的主存访问时间。
访问效率:
地址映射:应用某种方法把主存地址定位到Cache中。
缓存地址:
|行号|行内地址| |—-|——-|
内存地址:
|块号|块内地址| |—|——- |
映射方式 | 主存地址的表示 | 行号i与块号j的关系 | 描述 | 优点 | 缺点 | 缓存地址与内存地址的对应关系 |
---|---|---|---|---|---|---|
全相联映射 | 字块标记–块内地址 | 任意 | 主存中的任一块可以映射到缓存中的任一行 | 映射灵活 | 电路复杂,难以设计和实现 | 多对一 |
直接映射 | 标记–行号–块内地址 | i=j mod m(m为Cache中的总行数) | 每个缓存行i可以和若干个主存块对应,每个主存块j只能和一个缓存行对应 | 结构简单,成本低 | 只有固定的行位置可放,容易产生冲突 | 多对一 |
组相联映射 | 标记–组号–块内地址 | 某一主存块j按模D映射到缓存的第i组中的任一行 | i=j mod u(u为Cache的组数) | 前两种折中 | 折中 | 多对多 |
替换策略
定义:采用何种方式决定将那一行换出。
替换策略 | 定义 | 缺点 |
---|---|---|
随机替换策略 | 从特定的行位置中随机地选取一行换出 | |
最不经常使用LFU | ||
最近最少使用LRU |
虚拟存储器
定义:借助于磁盘等辅助存储器来扩大主存容量,以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间,使之为更大或更多的程序所使用。
依据:程序的局部性原理。
实质:用外存模拟内存。
虚拟器种类 | 描述 | 优点 | 缺点 | 特点 | 基本单位 |
---|---|---|---|---|---|
页式虚拟存储器 | 把用户程序逻辑空间分割为大小相等的片,称为一个逻辑页或者页,同时按照同样的大小将系统物理内存分割为大小相等的存储块,称为物理块或者块 | 离散装入,部分装入 | — | 实现简单 | 长度固定的页面 |
段式虚拟存储器 | 利用程序的模块化性质,将程序的逻辑空间划分为多个相对独立的部分,每一部分称为段 | 暂无 | 暂无 | 便于实现数据共享和保护 | 长度可变的段 |
段页式虚拟存储器 | 段式和页式的结合,把程序按逻辑单位分段以后,再把每段分成固定大小的页 | 兼备页式和段式的优点 | 两次查表,效率低 | 无 | 段和页 |
页式虚拟存储器
页表:在分页系统中,允许程序的每一页离散的存储在内存的任一物理块中,为了能在内存中找到每个页面所对应的物理块,为每个程序建立了一个反映逻辑页和物理块之间的映射关系的表。
快表(TLB): 按内容比较,快速进行页面的置换以及读取物理地址。
逻辑空间的格式:
|页号|页内地址| |—-|——-|
页表格式:
|页号|块号| |—-|—|
地址变换:物理地址 = 物理块号 + 页内地址
置换策略:在分页系统中,就是把程序执行用到的部分页面装入内存的物理块中,因此分配给程序的物理块总是小于程序的页面,在程序运行的过程中,如果请求的页面不在内存的物理块总,就需要将已经存在与物理块中的不用页面与该页面进行对换,到底把存在于物理块中的哪一个页面替换。
策略 | — |
---|---|
先进先出(FIFO) | |
最近最久未使用(LRU) |
- 缺页率:
其中pl表示替换的页数,pa表示总的页数
段式虚拟存储器
段表:在分段系统中,程序的每一段只能存储在内存中特定物理块中,为了能在内存中找到每段所对应的物理块,为每个程序建立了一个反映每段与特定物理块地址(基址)之间的关系表。每个段有段号,段基址,段长等信息。
逻辑空间的格式:
|段号|段内地址| |—|——–|
段表格式:
|段号|段长|基址| |—-|—|—-|
地址变换:物理地址 = 段表中段号所对应的基址 + 段内 地址
段页式虚拟存储器
逻辑空间的格式:
|段号|页号|页内地址| |—-|—|——-|
段表格式:
|段号|页表始址| |—|——–|
页表格式:
|页号|块号| |—|—-|
地址变换: 物理地址 = 物理块号 + 页内地址