概述
必须掌握的东西
Byte字节,bit位
1Byte(B)=8bit,1KB=1024B(字节),1MB=1024KB,1GB=1024MB,1TB=1024GB
210B即为1KB
211为2K
212为4K
213为8K
214为16K
220为1MB
221为2MB
222为4MB
230为1GB等依此规律
十六进制的数0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F分别对应二进制的0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110、1111,十六进制数转二进制数时,按照这种对应关系,一位一位转过来就行,例如:十六进制F7转二进制数为11110111。
八进制转二进制也是同样的,0、1、2、3、4、5、6、7对应000、001、010、011、100、101、110、111,例如:八进制的56转二进制为101110。
以上均可通过8421法转化更方便。
- 字长32位表示每字有32位,按双字编址表示将两个字编到一个存储单元中;
- 法一:即一个字32位,有2个字:32×2=64位。也就是64位编在一个存储单元中
- 法二:一个字32位是4个字节(32÷8=4字节)。即表示1个字中有4个字节(B)长,而2个字编为1个单元→1个字4个字节,2个字有8个字节(B),即8个字节编在一个存储单元中。
4.1存储器的概述
1.存储器的分类
1.按存储介质分类
(1)半导体存储器:TTL、MOS(主要)——易丢失。如固态硬盘(不易失),u盘(非易失),存储卡(不易失),catch(易失),内存条(易失)
(
2
)
磁
表
面
存
储
器
:
磁
头
、
载
磁
体
。
如
磁
盘
(
硬
盘
和
软
盘
)
(
3
)
磁
芯
存
储
器
:
硬
磁
材
料
、
环
状
元
件
。
如
:
磁
带
(
4
)
光
盘
存
储
器
:
激
光
、
磁
光
材
料
}
=
不
易
丢
失
\left.\begin{matrix}(2)磁表面存储器:磁头、载磁体。如磁盘(硬盘和软盘)\\(3)磁芯存储器:硬磁材料、环状元件。如:磁带\\(4)光盘存储器:激光、磁光材料\end{matrix}\right\}=不易丢失
(2)磁表面存储器:磁头、载磁体。如磁盘(硬盘和软盘)(3)磁芯存储器:硬磁材料、环状元件。如:磁带(4)光盘存储器:激光、磁光材料⎭⎬⎫=不易丢失
2.按存储方式分类
(1)存取时间与物理地址无关(随机访问)
- 随机存储器 在程序的执行过程中可读可写
- 随机存储器(RAM) 可读可写
- 只读存储器(ROM)只读
(2)存取时间与物理地址有关(串行访问)
- 顺序存取存储器 磁带
- 直接存取存储器 磁盘
3.按在计算机中的作用分类
与辅存相比,主存的特点是容量小,速度快,成本高
内存条相当于主存,动态的RAM叫DRAM
catch为静态RAM
2.存储器的层次结构
1.存储器三个主要特性的关系
2.缓存——主存层次和主存——辅存层次
缓存——主存用硬件的方法连接,按内容查找。指令在缓存中,指令中的地址也主存的地址,转换为缓存的地址
主存——辅存层次软硬件相结合
缓存里存的信息都是主存的副本
将辅存的一部分虚拟成主存
4.2主存储器
一、概述
1.主存的基本组成
2.主存和CPU的联系
3.主存中存储单元的地址分配
假设:存储字长32位,对此存储器的某个单元进行读/写,一次最多可读出/写入32位个01
编址单位是字节,每一个字节都有个地址。 存储字是32位,字节是八位,都有地址
12345678H八个16进制,用二进制表示每个占四位,共32位,存在一个存储单元中
8*8的芯片指8个存储单元,每个单元存储8位即存储字长为8位即字为8位(存储字长:每个单元存储的二进制位数)地址线与数据线
字:存储字长
字节:1B=8b,字节永远都是8位
一个存储字包括四个字节,0、4、8为存储字的地址,一个存储器包括的四个字节都有地址
1个字节8位,16位相当于2个字节
高位字节的地址作为存储器的地址(高位字节所在的地址定义为字的地址)
大端大尾方式:高位字节存在低地址,低位字节存放在高地址,高位字节的地址作为存储字的地址
低位字节地址为字地址
小端小尾方式:低位在低地址,高位在高地址,且低位字节所在的地址称为存储字的地址
设地址线24根 按字节,一个字节一个地址,寻址 224=16M*B=16MB
若字长为16位,按字(一个字一个地址)寻址 8MW(w指word)
若字长为32位 按字寻址 4MW
按字节寻址最好
,可以访问的类型多,但需要的地址线多
一个16k×32位的存储器,其地址线和数据线的总和是:
16k=214即14根地址线,,32是数据线的根数,则总和是14+32=46
4.主存的技术指标
(1)存储容量 主存 存放二进制代码的总位数
(2)存取速度
- 存取时间 存储器的访问时间
- 读出时间
- 写入时间
- 存取周期 连续两次独立的存储器操作(读或写)所需的最小间隔时间
- 读周期
- 写周期
(3)存储器的带宽 位/秒
单位时间内能够读取或写入的时间
二、半导体芯片
1.半导体存储芯片的基本结构
片选线:芯片选择线
半导体片选线有两种:
C
S
‾
\overline{CS}
CS芯片选择,
C
E
‾
\overline{CE}
CE芯片使能信号,加横线表低电平有效
读/写控制线:
W
E
‾
\overline{WE}
WE低电平写操作高电平读,
O
E
‾
\overline{OE}
OE读操作
16K×1表示芯片容量为16K,每个存储单元保存一位信息。如果用八个这样的芯片构成16K×8.这样的八个共四组成为64K×8位。每一组同时工作
选中一组,每组中会同时工作
216-1=65535
2.半导体存储芯片的译码驱动方式
半导体存储芯片的译码驱动方式:给出存储单元的地址后,怎么找到指定的存储单元
(1)线选法
看数据线的接发判断高低位
所有存储单元布局为线性数组
对容量稍大一点的芯片不合适,无法做到那么密集,集成度那么高,芯片中线太多了。假设是1M×8的,要20根地址线,芯片内的线有2^20×8
假如A3到A0全为0则选中第一行所有存储单元
(2)重合法
所有存储单元布局为二维阵列,行列地址分别进行译码。在下图中,数据线仅一位,每个存储单元的位数也仅一位
仍是上题的举例,行地址线和列地址线各10根,行译码和列译码器会各产生1K条,共2k条比线选法要少很多线
X译码器这边全0选中每组第一行,Y地址译码这边全0则选中每组第一列。
三、随机存取存储器(RAM)
1.静态RAM(SRAM)
保存0、1的原理
基本单元电路构成,
单元电路读出写入如何构成
典型芯片的结构
静态RAM芯片如何读出和写入
(1)静态RAM基本电路(采用双稳态触发器
,两端来存储)
T1~ T4触发器,解决保存0、1的原理
T5、T6行开关,解决对存储元件的读写,由行地址选择进行控制
T7、T8列开关,一列共用,控制所有存储元件共有的控制开关
写入时一个写原来的,一个写非
Intel 2114有10根地址线,4根数据线即1K*4位
2.动态RAM(DRAM)
采用电容,电容中有充电是1,没有电是0
(1)动态RAM基本单元电路
- ①三管动态RAM
读出与原存的信息相反(存0读1),可以在输出端加非门
写入与输入信息相同
- ②单管动态RAM(单晶体管)
读出有电表示存的1,没有电表示存的0
写入的是1,是对电容进行充电。写入的是0,是对电容进行放电
(2)动态RAM芯片举例
- ①三管动态RAM芯片(Intel 1103)
- ②单管动态RAM4116(16K×1位)
- 但它只有7根地址线,来分两次分别输入行、列地址
- 它的读放大器工作原理像一个跷跷板电路,其左右两侧电平相反,且读放大器左侧电容有电表示0,没有电是1.而读放大器右侧与之相反。写入类似。
(4)动态RAM刷新
需要刷新是因为存储电荷的电容放电
刷新仅与行地址有关
,对某一行进行刷新
①集中刷新(集中在某一时间刷新,某时间段内对所有行要进行刷新)
“死区”进行刷新而不能进行数据交换的时间
②分散刷新
无死区,但存取周期加长,在存取周期中一部分时间用来刷新
③分散刷新与集中刷新相结合(异步刷新)
每隔一段时间刷新一行,每行每隔一段时间刷新一次。
如
对于15.6us的一段时间内是集中式刷新,对于整个大的时间段来说是分散式刷新
将刷新安排在指令译码阶段,不会出现"死区"
3.动态RAM和静态RAM的比较
四、只读存储器(ROM)
- 厂家写——>用户可以一次写——>可多次写,但擦出设备要单独买——>电可擦写
1.掩膜ROM(MROM):厂家写
行列选择线交叉处有MOS管为"1",
行列选择线交叉处无MOS管为"0"
2.PROM(一次性编程)
熔丝断为"0"
熔丝未断为"1"
3.EPROM(多次性编程)
N型沟道浮动栅MOS电路
4.EEPROM(多次性编程)
电可擦写,局部擦写,全部擦写
5.Flash Memory(闪速型存储器)
五、存储器与CPU的连接
1.存储器容量的扩展
(1)位扩展(增加存储字长即数据线个数)
数据线不同
片选相同,保证两个芯片同时工作
(2)字扩展(增加存储字的数量即地址线个数)
地址线不同,有片选信号
A10为片选信号,为0选第一个芯片,为1选第二个芯片
片选不同,两个芯片不能同时工作,根据片选信号的不同,不同芯片工作
(3)字、位扩展
先位再字扩展
4K×8位的存储器是32K位,1K×4位是4K位个,因此需要8片1K×4K的芯片
芯片两两一组构成1K×8的,共要4组
2根地址线做片选信号,使用2—4译码器,00第一组芯片,01第二组芯片…
2.存储器与CPU的连接
不可放置不管
(1)地址线的连接
一般,地址的低位作为地址送入存储器的地址线中,高位作为芯片选择信号
(2)数据线的连接
决定字的接法
CPU数据线的条数可能比存储器数据线的条数要多,就要做位扩展
(3)读/写命令控制线的连接
连接到每一个芯片的读写控制端上,ROM除外
(4)片选线的连接
用低位作为片选信号好
。
存储器的访问信号要在片选线中体现
每个内存芯片都有它的地址范围,这个地址范围要满足cpu的要求,有的地址要用作片选信号
(5)合理选择存储芯片(ROM,RAM)
系统程序、配置信息用ROM。用户即运行区用RAM
(6)其他 时序、负载
== 对任何一个芯片来说,CPU的地址线要么输入到地址中,要么出现在片选输入端,不要忘了MREQ。==
注意ROM数据是单向的线,RAM数据是双向的线,ROM端只读不写,编程端接地
首先6000H~67FFH为16进制,需要写为二进制为0110 0000 0000 0000——0110 0111 1111 1111。后面的0到10位从全0变为全1,共是11根地址线,211即2K,而又有8位数据线,则这个存储空间为2K×8位,其放的是系统程序
同上得用户程序区是1K×8位
利用138译码器,MREQ连到片选信号上,A10为0才能选后面两个1K×4位
注意ROM数据是单向的线,RAM数据是双向的线,ROM端只读不写,编程端接地
,其实不拘于138译码器
用1K×4位的存储芯片组成容量为16K×8位的存储芯片要(32)片
例4.3设CPU有20根地址线和16根数据线,并用IO/ M ‾ \overline{M} M作为访存控制信号, R D ‾ \overline{RD} RD为读命令, W R ‾ \overline{WR} WR为写命令。CPU可通过BHE和A0来控制按字节或字两种形式访存(如表4.1所示)。要求采用图4.39所示的芯片,门电路自定。试回答:
(1)CPU按字节访问和按字访问的地址范围各是多少?
(2) CPU按字节访问时需分奇偶体,且最大64 KB为系统程序区,与其相邻的64 KB为用户程序区。写出每片存储芯片所对应的二进制地址码。
(3)画出对应上述地址范围的CPU与存储芯片的连接图。
六、存储器的校验
差异位数越多,检错纠错力就越强
1.编码的最小距离
任意两组合法代码之间二进制位数
的最少差异
编码的纠错、检错能力与编码的最小距离有关
。
汉明码是具有一位纠错能力的编码
。
2.汉明码的组成
- 汉明码采用奇偶校验
- 加一位校验位使得1的个数位为奇数个或偶数个
- 汉明码采用分组校验
采用两位奇偶校验位,8位分组为两组,每组都有校验位 - 汉明码的分组是一种非划分方式,组和组之间有交叉
如下
分三组,每组都用偶校验(加上校验位共偶数个1),偶校验用异或门实现 若一组出差错,则是该组独有的部分;若两组错,则是两组公共的位置
校验位都是不共有的地方
组成汉明码的三要素
添加检测位的位数即分组数,n位信息位,k位校验位
2的幂次方位均为校验位如1、2、4、8
。
后面一般情况下用偶校验
如何分组的
编号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | … |
---|---|---|---|---|---|---|---|---|---|---|---|---|
二进制 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | … |
将编号转为二进制。从右向左看,第一位是1的如编号1、3、5、7等就分到第一组C1组。第二位是1的,如编号2,3,6,7就分到第二组C2组。第三位是1的如编号4,5,6,7分到第三组C4组。C2的幂次方位类推。一个校验码承担一组校验责任。校验位数字等于组内所有数字异或(同或)。偶校验则异或,奇校验则同或。
异或:奇数个1则为1,偶数个1为0
.同或相反
C1检测对应二进制码20位为1的
C2检测对应二进制码21位为1的
C4检测对应二进制码22位为1的
3.汉明码的纠错过程
全0表示偶数个0,则偶校验无错。
纠错按照收到的位都来检测
奇校验检测位结果就是偶校验检测位取反
汉明编码距离至少是3;
七、提高访存速度的措施
- 采用高速器件
- 采用层次结构 Cache-主存
- 调整主存结构
1.单体多字系统
2.多体并行系统
(1)高位交叉(主要应用于存储器容量的扩展)
(2)低位交叉(应用于存储器带宽和访问速度的提高)
横向进行顺序编码,且低位为体号
相当于以流水的方式访问不同的存储体
3.高性能存储芯片
4.3高速缓冲存储器
一、概述
1.问题的提出
避免CPU"空等"现象
CPU和主存(DRAM)的速度差异
时间局部:当前用的指令或数据在不久的将来还会再用到
空间局部:当前用的指令或数据在不久后相邻的指令或数据可能会被用到
2.Cache的工作原理
(1)主存和缓存的编址
数据在内存与Catch之间传送的时候,是以整块传送的,所以内存块内地址部分与Catch中块内地址部分的值相同
Catch上的标记标记了主存块与Catch块之间的对应关系,若一个主存块调用到Catch块中,就可将主存块号写到标记中
。
当CPU给出一个内存地址,需要在Catch中访问到这个数据,则要确定这个块是否已经送到Catch中,用它给出地址的主存块号与Catch中的标记进行比较
Catch与主存之间按块存储,按块传送,块的大小相同,块内地址完全相同,不用转化
。
(2)命中与未命中
(3)Catch的命中率
命中次数÷(命中次数+未命中访问主存次数)
(4)Catch——主存系统的效率
访问效率最小:tc/tm;最大为每次都访问catch为1
上公式是Catch与内存同时访问的公式,若先访问catch再访问内存,则公式会发生变化
3.Catch的基本结构
替换机构:当新的主存块需要调入缓存中,而它的可用位置又被占用时,需根据替换算法解决调入问题。
地址映射:一个块要放到catch中,它可以放入catch的哪些块中
变换机构:主存块号转为catch块号;主存的地址转为catch相应的地址
4.Catch的读写操作
写直达法:可能增加访存次数(如累加求和运算)
写回法:若有多个catch,可能造成多个catch数据的不一致
5.Catch的改进
多核:每个核都有自己的catch,多个核有共用的catch
流水线的机器:将指令和数据分开放在不同的Catch中,避免流水过程中造成资源冲突
二、Catch-主存的地址映射
1.直接映射
主存当中任意一个给定的块,它只能映射到或只能装载到某个指定的catch块中
将主存储体划分成若干与catch存储体相等的区,每个区的大小和catch存储体大小相同,每个区当中包含的字块数和catch存储体当中包含的字块数相等。
每个区的第0块只能放在catch的第0块中
cpu给出地址,这个地址分为三部分:区号(主存字块标记)、块号(Catch字块标记)、块内偏移地址(字块地址)
主存字块标记与Catch字块标记比较判断是否命中
结构简单,速度快;catch的利用率可能低,调用时冲突也大
主存字块标记为主存地址长度与Catch地址长度之差
。
2.全相联映射
主存中任何一个块可以被放到catch任何一个块中
catch利用率高,速度慢,电路复杂,比较器长度也长
3.组相联映射(常用)
主存中的一个块可以放到catch当中指定的几个块中
先把catch分成块,然后这些块又被分成若干个组,每组当中可以包含4块、8块、16块。一般多少组,每组就多少块
主存储器字块也进行分区,每个区的大小它的组数与catch是相同的
每个区的第0块可以放到catch当中第0组任何一个位置
Catche的标记就是主存的组号m-q
Q指组的大小,模Q求到的余数就是内存块在这个区当中的内部编号,据内部编号映射到第i组的任何一块
靠近CPU的采用直接相连或路数比较少的组相联
中间层次用组相联(两路组相联,每组包含两个字块 ),距离CPU远的用全相联
------------------------------------------------------------------------------
1.直接映射
主存字块标记 | Cache字块地址=c | 字块内地址=b |
---|---|---|
主存地址位数长-cache地址位数长 | cache为2c块,cache字块地址为c | 1.按字节寻址(默认):每块的字数*每字的字节数=每块的字节数=2b 2.按字寻址:每个字块2b个字 |
2.全相联映射
主存字块标记 | 字块内地址=b |
---|---|
主存地址位数长-b(字块内地址) | 1.按字节寻址(默认):每块的字数*每字的字节数=每块的字节数=2b 2.按字寻址:每个字块2b个字 |
3.组相联映射
n路组相联表示:一组内有n块
主存字块标记 | 组地址=q | 字块内地址=b |
---|---|---|
主存地址位数长-q(组地址)-b(字块内地址) | cache为可分组数=cache总块数÷一组内n块=2q组 | 1.按字节寻址(默认):每块的字数*每字的字节数=每块的字节数=2b 2.按字寻址:每个字块2b个字 |
例题
设某机主存容量为16MB,Cache的容量为8KB。每字块有8个字,每字32位。设计画出在四路映射的条件下主存地址字段中各段的位数。
解答:
主存:16MB=224;Cache:8KB=213
32位=32÷8=4字节 故由每字块8个字(23),每字32位(4字节=22),可得
每块的字节数=每字块的字数×每字的字节数=23×22=25;由此得字块内地址=b=5
。
Cache总字块数=总字节数÷每块中的字节数=213÷25=28
由四路映射得一组内四块
Cache可分组数=Cache总块数÷一组内四块=28÷22=26;故组地址=q=6
。
主存字块标记=24-b-q=24-6-5=13
.
表格如下
主存字块标记 | 组地址 | 字块内地址 |
---|---|---|
13位 | 6位 | 5位 |
------------------------------------------------------------------------------
三、替换算法
1.先进先出(FIFO)算法
最先被放入到catch中的块,不在用被放出去
2.近期最少使用(LRU)算法
4.4 辅助存储器
一、概述
- 一圈圈的是道密度,内圈位密度最大,外圈最小。
- 每条磁道上保存的信息总量是一样的
- 道距:P,道密度:单位长度上有多少磁道,=1÷P
- 位密度:一条磁道上的总容量÷周长(有最大和最小,泛指内圈最大的)
- 存储容量:盘面数量×磁道×每个磁道上保存的信息(二进制位数)
- 等待时间:最少是0,最多是转一圈的时间.这两个加起来÷2是平均等待时间
- 数据传输率:每秒可以传输的数据。一条磁道上的总容量 ×转速
- 磁表面存储器通常采用循环冗余码来发现并纠正错误
二、磁记录原理和记录方式
记录方式
三、硬盘存储器
四、CRC编码(循环冗余校验码)
详细请看计算机组成原理运算https://blog.csdn.net/qq_44152807/article/details/103970012部分的CRC讲解,更通俗详细。
CRC校验的基本原理
- 增加冗余码(校验位)
有效信息位(k位) | 校验信息位(r位) |
---|
N=k+r<=2r-1
- 生成多项式G(x)
收发双方约定一个(r+1)位二进制数,发送方利用G(x)对信息多项式做模二除运算,生成校验码。接收方利用G(X)对收到的编码多项式做模二除运算检测差错及错误定位。
- G(X)应该满足的条件
1.最高位和最低位必须为1
2.当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0;
3.不同位发生错误时,模二除运算后余数不同
4.对不为0余数继续进行模二除运算应使余数循环。
模2运算
- 加减运算(异或运算,加不进位,减不借位)
- 模2除法:按模2减,求部分余数,不借位。
- 上商原则:
[1].部分余数首位为1时,商为1,减除数;[2].部分余数首位为0时,商为0,减0.[3].当部分余数的位数小于除数的位数时,该余数即为最后余数
。
CRC编码方法
1.根据待校验信息的长度k,按照k+r<=2r-1确定校验位r的位数,如对四位信息1100进行RCR编码,根据4+r<=2r-1得rmin=3.
2.根据r和生成多项式的选择原则,选择位数为r+1的生成多项式G(X)=1011(查表)
3.进行下列变换
有效信息位(k位) | 校验信息位(r位) |
---|---|
1100 | 000 |
即:将待校验的二进制信息Q(X)逻辑左移r位,得到Q(X)‘
4.对Q(X)‘按模2运算法则除G(X),求CRC编码中的r位校验信息。
用得到的余数替换Q(X)‘的最后r位即可得到最后的CRC编码
1100|000——>1100|010 即为1100的CRC编码
接收方利用G(X)对收到的编码多项式做模2除运算
CRC的校验与纠错
余数为0,说明传输没有错误。错误在不同位数对应的余数不同。
若采用不同的生成多项式,对应的相同位出错的时候得到的不为0的余数是不相同的。
- 利用出错情况下余数循环特性进行纠错
- 若余数不为0,一边对余数补0做模二除,同时让被检测的校验码循环左移,当余数为101时,出错位也移到A1位置。通过异运算纠正后继续循环左移和执行余数模二除法,直到修改后的出错位回原位。不需对每一位提供纠正电路。
- 当位数增多时,循环校验码能有效的降低硬件代价,这是它得以广泛应用的主要原因。
- 可硬件实现通过异或
- 也可以软件实现(通过代码)
五、软磁盘存储器