<>概述

* 存储器分类
* 按存储介质分类
(1) 半导体存储器 TTL(集成度底 功耗高,速度快),MOS(集成度高 功耗低);
(2) 磁表面存储器 磁头,载磁体;
(3) 磁芯存储器 硬磁材料,环状元件;
(4) 光盘存储器 激光,磁光材料;
总结:半导体存储器易失性;磁表面存储器,磁芯存储器,光盘存储器非易失性;
* 按存取方式分类
(1) 存取时间与物理地址无关(随机访问)
随机存储器 在程序的执行过程中可读可写;
只读存储器 在程序的执行过程中只读;
(2) 存取时间与物理地址有关(串行访问)
顺序存取存储器 磁带;
直接存取存储器 磁盘;
* 按在计算机中的作用分类

* 存储器的层次结构
* 存储器三个主要特征的关系

* 缓存-主存层次和主存-辅存层次

<>主存储器概述

*
主存的基本组成

*
主存和CPU的联系

*
主存中存储单元地址的分配
12345678H 这个数据如何在主存储器中进行存储?

高位字节:高位存在低地址,低位存在高地址;
低位字节:高位存在高地址,低位存在低地址;
例题:

解析:
引入1

首先看一道简单题:
设有一个1MB容量的存储器,字长32位,问:按字节编址,字编址的寻址范围以及各自的寻址范围大小?
如果按字节编址,则
1MB = 2 ^10KB = 2 ^20B 1字节=8bit=1B 2 ^20B/1B = 2 ^20
地址范围为0~(2 ^20)-1,也就是说需要20根地址线才能完成对1MB空间的编码,所以地址寄存器为20位,寻址范围大小为2 ^20=1M;
如果按字编址,则
1MB = 2 ^10KB = 2 ^20B 1字节=32bit=4B 2 ^20B/4B = 2 ^18
地址范围为0~(2 ^18)-1,也就是说我们至少要用18根地址线才能完成对1MB空间的编码。因此按字编址的寻址范围大小是2 ^18;

区分寻址空间与寻址范围两个不同的概念,寻址范围仅仅是一个数字范围,不带有单位而寻址
范围的大小很明显是一个数,指寻址区间的大小而寻址空间指能够寻址最大容量,单位一般用MB、B来表示;本题中寻址范围为0~(2^20)-1,寻址空间为1MB,寻址大小1M;
M为数量单位 1024=1K,1024K=1M MB指容量大小 1024B=1KB,1024KB=1MB.
引入2

设有一台机器有24根地址线,按字节寻址,求其寻址范围?
寻址范围为0~(2 ^24)-1,寻址大小2 ^24=2 ^4M,即16MB;

引入3

设有一台机器有24根地址线,其字长为16位,按字寻址,求其寻址范围?

字里面封装了字节,为了确保每个字节或者说每个数据都有自己的一个编号,那么需要牺牲一部分地址线来实现。16位字长的机器,每个字表示2个字节,用1位地址线就能区分出来,这边可以类比成“每个袋子装了两个包子,而我现在只给袋子编号,那么你想要找到袋子里面的包子到底是第一个还是第二个就必须在拿出一位的0和1来表示第一个还是第二个包子”。由此表示字地址的数据线位数就只剩下了24-1=23位了。所以寻址的范围就变成了0~(2^23)-1,寻址大小2
^23=2 ^3M,即8MW了;(W代表的字)

引入4

设有一台机器有24根地址线,其字长为32位,按字寻址,求其寻址范围?

字里面封装了字节,为了确保每个字节或者说每个数据都有自己的一个编号,那么需要牺牲一部分地址线来实现。32位字长的机器,每个字表示4个字节,用2位地址线就能区分出来,这边可以类比成“每个袋子装了四个包子,而我现在只给袋子编号,那么你想要找到袋子里面的包子到底是第一个还是第二个等就必须在拿出一位的0和1来表示第一个还是第二个包子等”。由此表示字地址的数据线位数就只剩下了24-2=22位了。所以寻址的范围就变成了0~(2^22)-1,寻址大小2
^22=2 ^2M,即4MW了;

*
主存的技术指标
(1) 存储容量
主存存放的二进制代码的总位数;
(2) 存储速度
存取时间:存储器的访问时间到读出时间或者写入时间;
存取周期:连续两次独立的存取器操作(读或写)所需的最小间隔时间;
存取周期>存取时间
(3) 存储器是的带宽 单位 位/秒;

<>半导体存储芯片简介

*
半导体存储芯片的基本结构

片选线:(低电平有效选择)

读/写控制线:

使用地址线和数据线计算芯片容量:
地址线(单向) 数据线(双向) 芯片容量 10 4 (2 ^10*4)1K*4位 14 1 16K*1位 13 8 8K*8位
存储芯片片选线的作用:
可以让某一个芯片或者某写芯片同时工作;
例:

解析:
每组8个16K *1位存储芯片,同时工作,构成16K *8位存储芯片。这样有四组,总共表示存储64K,使用32个16K *1位存储芯片。第一组0 ~
16K-1,第二组16K ~ 32K-1,第三组32K ~ 48K-1,第四组48K ~ 64K-1;所以构成了64K *8位存储器;
当地址为65535时,表示64K-1,第四组8片的片选有效,为低电平选择。其他三组为高电平无效;

*
半导体存储芯片的译码驱动方式
(1) 线选法

(2) 重合法

<>随机存取存储器(RAM)

*
静态RAM(SRAM)

(1) 静态RAM基本电路的读操作

(2) 静态RAM基本电路的写操作
(3) 静态RAM芯片举例
Intel 2114 外特性

Intel 2114 RAM矩阵(64 *64)读

Intel 2114 RAM矩阵(64 *64)写

*
动态RAM(DRAM)
(1) 动态RAM基本单元电路

三管:
读出与原存信息相反;
写入与输入信息相同;
单管:
读出时数据线有电流为1;
写入时Cs充电为1,放电为0;

(2) 动态RAM芯片举例
三管动态RAM芯片(Intel 1103) 读

三管动态RAM芯片(Intel 1103) 写

单管动态RAM芯片 Intel 4116(16K *1位)外特性
注:需要14根地址线,但实际上只有7根地址线,所以需要分两次;

Intel 4116 芯片 读 原理

Intel 4116 芯片 写 原理

(3) 动态RAM刷新
刷新与行地址有关
①集中刷新(存取周期为0.5μs)
集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。用0.5μs
*128=64μs的时间对128行进行逐行刷新,由于这64μs的时间不能进行读/写操作,故称为“死时间”或访存“死区”。由于存取周期为0.5μs,刷新周期为2ms,即4000个存取周期。

补充一点:为什么刷新与存取不能并行?

因为内存就一套地址译码和片选装置,刷新与存取有相似的过程,它要选中一行——这期间片选线、地址线、地址译码器全被占用着。同理,刷新操作之间也不能并行——意味着一次只能刷一行。

②分散刷新(存取周期为1μs)
分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。其中,把机器的存取周期tc分成两段,前半段tM用来读 / 写或维持信息,后半段tR
用来刷新。即在每个存取操作后绑定一个刷新操作。延长了存取周期,这样存取周期就成了0.5μs + 0.5μs
=1μs。但是由于与存取操作绑定,就不需要专门给出一段时间来刷新了。这样,每有128个读取操作,就会把0-127行全部刷新一遍。故每隔128μs
就可将存储芯片全部刷新一遍,即刷新周期是1μs×128=128μs远短于2ms,而且不存在停止读 /
写的死时间,但是存取周期长了,整个系统速度降低了(分散刷新的刷新周期128μs ,其实不需要这么频繁,会导致浪费);

③异步刷新(分散刷新与集中刷新相结合)
既可以缩短“死时间”,又充分利用最大刷新间隔为2ms的特点,具体操作为:在2ms内对128行各刷新一遍,即每隔15.6μs刷新一行(2000μs /
128≈15.6μs),而每行刷新的时间仍为0.5μs。这样,刷新一行只能停止一个存取周期,但对每行来说,刷新间隔时间仍为2ms,而死时间为0.5μs。(相对每一段来说,是集中式刷新,相对整体来说,是分散式刷新)。如果将
DRAM
的刷新安排在CPU对指令的译码阶段,由于这个阶段CPU不访问存储器,所以这种方案既克服了分散刷新需独占0.5μs用于刷新,使存取周期加长且降低系统速度的缺点,又不会出现集中刷新的访存“死区”问题,从根本上上提高了整机的工作效率;

3.动态RAM和静态RAM的比较

<>只读存储器(ROM)

简介:

* 掩模ROM(MROM)
行和列选择线交叉处有MOS管为1;
行和列选择线交叉处无MOS管为0;
* PROM(一次性编程)

* EPROM(多次性编程)

* EEPROM(多次性编程)

* Flash Memory(闪速型存储器)

<>存储器和CPU的连接

*
存储器容量的扩展
(1) 位扩展(增加存储字长)
用 2片 1K *4位存储芯片组成1K *8位的存储器(10根地址线,8根数据线)

(2) 字扩展(增加存储字的数量)
用 2 片1K *8位存储芯片组成2K *8位的存储器(11根地址线,8根数据线),不同时工作利用1根地址线选择其中一个芯片

0 10个0~10个1 第一片;
1 10个0~10个1 第二片;
(3) 字,位扩展
用 8 片1K *4位存储芯片组成4K *8位的存储器(21根地址线,8根数据线),每2片1K *4位构成1K *8位芯片,需要4组;

00 10个0~10个1 第一组;
01 10个0~10个1 第二组;
10 10个0~10个1 第三组;
11 10个0~10个1 第四组;

*
存储器与CPU的连接

地址线的连接
数据线的连接
读 / 写命令的连接
片选线的连接
合理选择存储芯片
其他 时序,负载

主存地址空间分配:
系统程序区:6000H~67FFH
用户程序区:6800H~6BFFH
(1) 写出对应的二进制代码

(2)确定芯片的数量和类型

(3) 分配地址线

(4) 确定片选信号
74138译码器介绍

A,B,C 输入端口,输入二进制数;
Y0~Y7 输出端口,输出十进制数;
G1,G2A,G2B 片选端口,当以此为100时芯片选通,否则无法工作;

(1) 写出对应的二进制地址码

(2) 确定芯片的数量和类型

(3) 分配地址线

(4) 确定片选信号

(1) 写出对应的二进制地址码
(2) 确定芯片的数量和类型

(3) 分配地址线

(4) 确定片选信号

<>存储器的校验

*
编码的最小距离
任意两组合法代码之间二进制位数的最小差异;
编码的纠错,检错能力与编码的最小距离有关;

汉明码就是具有一位纠错能力的编码;

*
汉明码的组成
汉明码采用奇偶检验,分组校验;
汉明码的分组是一种非划分方式:

分三组,每组有1位校验位,共包括4位数据位;
为什么分三组:

写出对应的二进制代码:
1 001
2 010
3 011
4 100
5 101
6 110
7 111
所以,001 代表的1为第一组,010代表的2为第二组,100代表的4为第三组。011代表在第1和第2组公共部分;

汉明码的组成需增添多少位检测位:2k>=n+k+1;
检测位的位置:2i (i=0,1,2,3,……);

异或:异或不同位真(1),同或相同为真(1);

*
汉明码的纠错过程

二进制多所对应的十进制的值就是出错位;

因为第四位是校验位,错了,可以不去纠错;
校验: 与偶校验不同的是,纠错过程中,偶校验用异或,奇校验用同或;

<>提高访存速度的措施

* 采用高速器件;
* 采用层次结构 Cache -主存;
* 调整主存结构;

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信