**
计算机组成原理精讲解析(考察的是对硬件的特性)
**
计算机组成原理----存储器
你好! 这是计算机组成原理的基本知识
存储系统(二进制信息如何在内存中存储)
存储器概述
我们从上方图片中可以看出:
内存:8GB就是主存; 机身存储:128GB就是辅存
不同:主存和辅存的容量截然不同
那我们除了主存和辅存,还有没有其他存储器呢?
我们来看一下这些存储器:
- 存储器的层次结构:
越靠近上层速度越快容量小价格高
解析一下:辅存里面读写速度很慢,而CPU读写速度很快,辅存里面的数据跟不上CPU的执行速度,因此,我们需要把辅存里面的数据调入到主存里面。
(就好比搬砖砌墙:你搬砖的速度跟不上我砌墙的速度,一定会影响进度的)
我们生活中用的微信:
1、刚开始打开有2~3秒的停留时间(把辅存里面的数据读入到主存里面)
2、CPU就可以和主存中的数据进行访问
- 在介绍一点:
主存到辅存层:通过加上一个操作系统(实现页面置换);即为找到哪些需要从主存换输到辅存中【解决了主存容量不够的问题】
cache到主存:硬件自动完成的
- cache:
1、【cache作用】:缓解CPU和主存之间的速度差
2、【解说一下】:虽然我们把数据放在了主存,CPU可以访问了,但是速度还是跟不上CPU的速度,这时候我们就出现了 cache,我们可以将经常使用的数据放入cache 中,然后CPU从cache里面读数据,也可以写数据,然后把在cache中修改的数据返回主存
3、【举例说明】:
1、微信数据在主存中,假如和家里人视频聊天,
2、那么就把视频聊天的代码放在cache中,这样我们的速度就快了。
- 寄存器:计算机中可能就有几十个寄存器
- 案例:
1、虽然cache容量很小(为了节约成本),但是运行速度很高
2、都可以被CPU直接访问
我们在过去:机器硬盘
我们在现在:SSD硬盘m.2接口(他让我们读写的速度更快)
-
存储器的分类----层次分:
解说 一下:
1、主存和高速缓冲存储器都可以直接被cpu读写
2、辅存里面的数据需要读入主存中才可以被读写 -
存储器的分类----介质分:
解说一下:
我们都知道,存储器的作用就是存放二进制01这些数据信息的,根据制作的材料不同,我们可以分为三类:
1、以半导体:主存,cache
2、磁性材料:磁盘,磁带(辅存)
3、光介质:光存储器
- 存储器的分类----存取方式:
所有存储器都分为存储的一个个存储单元
1、随机存取存储器(RAM):(例如内存条)
读取任何我一个地址的地质单元读写时间速度都是相同,不会改变
2、顺序存取存储器 (SAM):(复读机,磁带)
读取所需要的时间取决于物理位置
(录音机有个磁头,轴转动的时候,磁条划过磁头,转到磁头下方读取数据)
3、直接存取存储器 (DAM):(磁盘)
比随机存储器慢,比顺序存储器快
【总结】:
1、随机存取存储器(时间相同,与位置无关),顺序存储器(时间与位置相关),直接存取存储器(两大存储器特性):根据一个固定的地址去读写
2、相联存储器:根据内容检索到位置
-
存储器的分类----信息可更改性:
【总结】:
RAM:可读可写
ROM:只读不写 -
存储器的分类----信息的可保存性:
-
存储器的性能指标:
-
存取时间:一个操作的时间
存取周期:一个流程的时间
总结回顾:
主存储器
主存储器的基本组成
使用半导体元件来存储二进制原理
半导体元器件组合成了存储芯片
存储芯片中有好多不同的字的数据,存储芯片必须提供寻址的功能
- 基本的半导体元件原理
1、 存储体是用来存放二进制数据0和1的
2、 存储体由多个存储单元组成
3、 每个存储单元对应一个地址
4、每个存储单元里面 有一个存储元
解说一下:
1、每个存储元对应两个元器件(MOS管
2、MOS管可以看成一个用电控制的机关:
【假如mos管左端输入高电压5V,输入就可以导电,如果达不到5V,就无法导电,相当于一个绝缘体(不导电) 】
3、为什么叫做绝缘体呢?-----因为既不是导体也不是绝缘体,给了一个电压,达到高电压,那我们就可以导电,达不到高电压,就不导电
4、(读入)
----1、假如电容上面保存了一些电荷
如何读取二进制?----在MOS管的一端输入一个高电压信号(输入1),达到预值,MOS管接通,电荷顺着往外流,就是1
----2、假如电容里面没有保存电荷(表示0)
检测不到由有电荷的流出,就是0
5、(写入)
存储器读或者写的单位:存储字
- 存储器芯片的基本原理
如何根据地址来决定读或者写存储字呢?
1、
2、
3、
4、归总:
金属真脚:
金属引脚包括:多根地址线、多根数据线、一根片选线,至少一根读/写控制线
总结:
寻址
SRAM与DRAM
总览
- 随机存储器:
速度不会因为地址改变而改变
为什么会出现不同呢?
栅极电容VS双稳态触发器(可以呈现出两种稳定的状态):
双稳态触发器写入:
若写入0,则给左边BL加上低电平;
若写入1,则给右边BLX加上低电平
两者区别:
两者的存储元器件不同:SDAM(双稳态触发器)DRAM(栅极电容)
1、双稳态触发器:哪边出现零那边出现一(都是低电平)
2、栅极电容:里面电容 是否有电荷
1、栅极电容:
重写(再次重新充电)
2、双稳态触发器(呈现两种稳定的状态):
【总结】:
栅极电容会有破坏性读出,需要重写,因此读写速度慢;
双稳态触发器没有破坏性读出,不需要重写,因此读写速度快;
其他不同点:
2补充:假如一个芯片的面积不变,体积小,更密集集成在芯片上
DRAM制造的成本低,速度相对较慢------制造主存
SRAM制造成本高,对速度有要求-------制造cache
易失性存储器:
不断的供电:给这个VDD触发器不断地供电
DRAM的刷新(自己独立完成,不用CPU控制)
1、多久刷新一次?------2ms
2、每次刷新多上存储单元?-----一行存储单元
3、为什么用行列地址?-------可以减少选通线的数量
(把一个地址拆分成一半,一半是行地址译码之后的选通线,另一半是列地址译码之后的选通线)
刷新多少存储单元:只要我们给一个行地址,行地址译码器就会读出一整行的
1、如何刷新:会有一个刷新电路来支持,直接读出一整行的存储信息,然后再重新写入 (给电容充电),读出一行信息本质上就是进行了一个存储周期
2、假设DRAM内部的排列128*128的形式(一共128行)读出一行用时0.5um,2ms内可以4000个周期
3、刷新的时候不能对存储器进行读和写
4、分散刷新:读完一行,刷新一行 (系统的就是1us)
5、集中刷新:在2ms内,集中在一个时间内专门刷新
6、异步刷新:每行刷新一次就行,读写,一段时间后刷新(CPU不访问的时候刷新)
同时送:我把这一个地址分成了两部分(行地址+列地址),把他们同时给译码器
缺点:地址有多少位,我们就要有多少跟地址线
地址线复用技术:
分两次来:
1、第一次我把n/2根地址线送到行地址缓冲器里面,
2、第二次我把n/2根地址线放在列地址缓冲器里面,
3、在控制电路的控制下,分别送到行地址译码器与列地址译码器里面,
4、我先让行译码器解析出来,再从解析出来的行信息里面把列的信息输进去,减少了不必要的时间
优点:地址线更少,芯片引脚更少
【总结一下送行列地址】:
SRAM(同时送):集成度较低,需要的地址线本来就少
DRAM(分开送):集成度较高,需要的地址线多,分开送减少一点地址线
只读存储器ROM
我们知道放在RAM当中断电后会消失,那我们不想让数据消失,那么我们就得保证把这个不想消失的数据放在另一个芯片中,因此我们想到了ROM
ROM:read only memary
演变过程:
比如说:我想把这个镶进去,谁都不可以改了,我就跟厂家说,这一批货在你们制作芯片的时候就给我放进去,我不想有人破坏它,因为是专门定制的,所以他制作的周期也长,做的都是一批一批的,他固定就是这样的,所以它的可靠性很高,不过灵活性就很差了
为了提高只读存储器的灵活性:
可以由用户自己来个性化的定制写入的数据数据,但是机会只有一次,也是只读存储器
就好比:我知道你们怎么做的了,我自己动手操作一下,但是技术不娴熟,我只能有一次机会
写:先擦后写
读:直接读
密度高:存储元更小,集成度高,保存更多的二进制位
就像我们的手机,利用flash芯片可以,他比电脑的集成度更高,也就意味着体积更小,功率低,意味着耗电小,价格贵,辅存越高的越贵
为什么会有FLASH呢?位密度更高有什么用呢?
1、数据存储密度高:Flash存储器具有较高的存储容量和密度,能够满足大容量数据存储的需求。
2、功耗低:Flash存储器的功耗相对较低,有利于节能减排和延长设备使用寿命
计算机内部一个很重要的芯片-----ROM
解说:
1、主存里面放:指令和数据
2、CPU从主存中拿指令和数据的
3、CPU任务:到主存中取指令------执行指令
4、RAM的一个特性:断电后RAM里面的数据全部丢失(也就是说,当我们的计算机关机之后,里面的数据信息全部都没有了)
5、计算机开机之后,意味着:把操作系统和应用程序相关的指令数据再一次调入主存
6、操作系统安装在辅存中
7、CPU作为计算机的指挥中心,也是要取指令的(傻:只能根据指令一步一步地执行)
8、但是此时主存里面是没有数据的
9、CPU从主板(BIOS芯片)上ROM芯片中读取一些指令
统一编制:
假如1KB:1024B,我们把0~1023给ROM,从1024往后给RAM
回顾:
双端口RAM和多模块存储器
引入:存取时间:意味着CPU从内存中读取一个字的数据实际上只需要t2-t1这一段的时间,但是即使CPU读的存取时间的速度非常快,但是必须要等待回复时间。
问题一:面对多核CPU进行访问:一个CPU访问一次之后,下一个CPU也要进行访问,那么要等恢复时间恢复之后才能再进行访问,那我的时间就很长呀,我这个问题怎么解决 ?
问题二:即使是一个cpu:由于CPU的读写速度比主存快很多怎么办(因为主存的恢复时间太长了)?
- 双端口 RAM:
【目的:优化多核CPU访问一根内存条问题】
优点:可以解决多核CPU访问一根内存条的速度问题
注意:不能同时写,不能同时一读一写
- 双端口 RAM:
多模块存储器:
【目的】:解决单核cpu,cpu读写速度比内存的 速度要快的多,CPU想要连续读取一段数据的时候,必须要等待恢复时间问题
高位交叉编制的多存储器:
低位交叉编制的多存储器:
高位和低位访问连续地址所用时间:
说白了就是:CPU访问一个存储体需要等待存取时间+等待时间
高位存储体:用高两位进行区分不同的存储体
(这五个地址位于一个存储体,就要等待【等待时间】过后再进行下一个地址的访问,因此总耗时nT)
低位存储体:用低两位进行区分不同的存储体
(这五个地址有四个位于不同的存储体,当访问完一个地址之后,不用等时间,另个存储体已经准备好了,经过四个之后,正好一个T时间结束了,因此第五个地址可以接着访问,最后一个要留出等待时间,因此总耗时为:地址+等待时间=T+(n-1)r
发现:低位存储体用的时间比高位时间短
思考:为什么要探讨“连续访问的”情况?------因为几乎都是连着的
问题 :既然低位的存储块,那么应该取几个 “体"呢?
为什么是保证m>=T/r--------假如
总结:
CPU可以自己独立的选择 要哪个存储体读出哪个字
多体并行与单体并行
- 多体并行:存储器并行独立
单体并行:存储器 串行相连,对于不是从头开始的存储单元进行读取,会有很多没用的信息,但是速度上要比多体并行的快
[回顾]:
主存储器与CPU的链接
知识总览:
单块芯片与CPU连接
对外暴露出一些接口
绿色:传送数据,数据总线和CPU连接
红色:传送访问地址,地址总线和CPU连接
黄色:CPU通过控制总线来进行控制
- 目前这个芯片只能存储8个字节的数据 如果想扩展主存储字数怎么办?----字扩展(连接多个存储芯片)
如果想要存取更多的位数怎么办?------位扩展
补充:
现在的计算机通常将MDR和MAR放在CPU中(因此芯片里面的都只是普通的寄存器而已)
现在的计算机:
MAR中的地址数据是通过地址总线传给主存
MDR中的数据是通过数据总线进行交换的
CPU通过控制总线进行读写信息
存储器芯片的输入输出信号(为了后面看着方便):
地址线:
数据线:
片选线:
读/写控制信线:
- 增加位扩展:
增加主存的存储字长—位扩展
优点:可以同时读两位的信息
同理,想要八位一起读
增加字扩展:
因此字扩展:
增加一个新的一模一样的芯片
缺点:
1、给两个芯片的片选线都加上1(高电平)【都工作】
2、将会导致两个芯片的 数据信息都会通过数据总线传给cpu,导致数据总线的冲突
因此,接下来改进:
改进:将片选线接入A13,第二个接到A14(片选线接入高电平1后才会有效)
左边选中,右边未被选中(读的是左边芯片的数据)
改进:将片选线接入A13,第二个接到A14(片选线接入高电平1后才会有效)
右边选中,左边未被选中(读的是左边芯片的数据)
改进:将片选线接入A13,第二个接到A14(片选线接入高电平1后才会有效)
左右两边都被选中(数据冲突)
只能允许:左为1,右边为0 或者 ( 左为0 右位1)
改进:
3-8译码器:输入了3个信号,输出了8个信号
(假如给了三位的地址,共有8种可能,若输入000,则表示第0根,则他被选通,其他为0)
- 主存容量扩展:
总结:
字扩展:增加控制总线的作用
位扩展:增加数据总线的作用
- 主存容量扩展—字位同时扩展
回顾:
补充----译码器:
解说:
高电平有效:1
低电平有效:0
解说补充:等到地址信号稳定之后,发出一个读或者是写的信号,使能信号使译码器的输出端输出有效的片选信号,使得存储芯片被选通
外部存储器(磁盘存储器)
主要:磁盘存储器(对硬件的管理)
解说:
这里有一个磁带
商家在磁带上面涂上一层磁性介质
磁带划过磁头的时候,磁头可以1bit的写入数据
磁带划过此头的时候,读线圈根据接的电路1bie的读
解说:
因为磁头只能1bit的进行写入与读出
因此在读线圈的一方设计一个电路能把并行的多数据变成穿行的1bit数据
磁盘的一面(机械部分):
解说:
step1:驱动轴让我们的磁盘转动
step2:盘片上面每一圈图上不同的材性介质
step3:移动我们的磁头
step4:读或者写数据
磁盘的另一面(磁盘的电子部分【电路板】):
通过电子部分才可以和主机进行交换数据
解说:
1、我们的磁盘------有多个盘面
2、一个盘面-------每一圈的磁性材质不同,每一圈的材质就是一个磁道,分为多个磁道
3、一个磁道-------分为了几个扇区(为了方便主机对磁盘的读写)
【以扇区为单位进行读/写操作】
4、由于一个磁盘有多个盘面,多个盘面相对位置相同的盘面组成了柱面
【柱面号就是指明了一个磁道】
【通过一个柱面号来确定磁道的位置】
---------为了能让我们这个磁盘的轴转起来,磁头能读到不同的柱面号,那么我们就要搭配一些硬件:
即:磁盘驱动器:驱动轴,磁头移动臂这些东西
- 磁盘的性能指标
1、磁盘的容量:
- 非格式化容量:存盘在物理上来看总共可以存储的二进制比特位的上线
- 格式化容量:这个磁盘可能有些扇区损坏,防止磁盘的扇区损坏导致整个磁盘无法正常工作,因此需要格式化(留下某些备用扇区顶替使用)
- 对比来说:
格式化之后,某些部分容量被用来作为其他用途,因此格式化容量比非格式化容量要小
-
2、记录密度:
- 道密度:沿着半径长度上的磁道数(比如:磁盘半径1cm的位置上一共有60个磁道)
- 位密度:磁道单位长度上能记录的二进制比特位的位数(比如:1cm的磁道上面有60bit位的信息)
-
面密度:位密度*道密度
3、平均存取时间(都或者写是以扇区为单位的)
【小马达带着转圈圈,磁头移动臂带着磁头去私奔】
对于一个磁道上面的一块扇区,我们要读取他或者写入他如何让实现呢?让我们来看看下面这张图:
首先step1:让我们的磁头寻找要到的磁道上面
其次step2:让我们的磁盘旋转,一直到和扇区的开始部分重合
最后step3:让我们磁头划过这一片扇区进行存取
【旋转延迟时间可以按照转半圈(理想状态),传输时间要计算】
4、数据传输率
问题:主机如何向磁盘指明我读的是哪一块扇区?---------向磁盘的扇区给一个编号
磁盘阵列:
无校验:难免会有磁盘损坏的情况(如果没有存储一些冗余的信息,那么这个数据将被损坏)
PAID:某个磁盘扇区被损坏(或者发生跳变1-0),还可以在第二个磁盘里面找到数据
因此可以有冗余以及能够校验
缺点:空间浪费
改进:
通过海明校验码可以把错误的信息修正过来
通过海明校验码把跳转的信息修正过来
固态硬盘SSD
固态硬盘是以页为单位的
固态硬盘的页相当于机器磁盘的扇区
固态硬盘的块,相当于机器磁盘的磁道
固态硬盘以块为单位进行擦除:
意思就是说,我这个一块里面有数据,我想再写,我就写不进去了,我必须要擦除,然而擦除之后,我就可以写数据了,
问题:我要是想保留其他的数据,我只改动一个数据怎么办。可以把不动的数据放到另一个闪存芯片里面,然后将这个芯片的块擦除,从另一个芯片里面写入这个数据,那么,我们读取的位置不就变了么,我们的闪存翻译层可以将这个地址映射到正确的位置
因此,读的速度要大于写的速度
机器硬盘是通过磁头臂定位到一个位置,固态硬盘是通过电路迅速定位到对应的物理位置