按存储介质分类:
半导体存储器(易失)、磁表面存储器、磁芯存储器、光盘存储器。(这三种都是非易失)
按存取方式分类:
随机存储器(RAM,random access memory),只读存储器(read only memory),顺序存取存储器(如:磁带),直接存取存储器(如磁盘)。
注意RAM又分为静态RAM(用触发器存储信号)和动态RAM(用电容存储信号),断电后信息都会消失。
ROM断电后信息不消失。
存储器的性能指标:速度、价格、容量。通常三者不能同时达到最优。
存储器的层次结构
:主存-辅存结构、缓存-主存结构
主存-辅存结构用来提升容量,缓存-主存结构用来提升速度。
在有些主存中,MAR和MDR在主存内部,所以数据传输过程是地址总线->MAR->M->MDR->数据总线。
存储单元地址分配:
地址总线的位数决定地址的范围,而采用字寻址方式还是字节寻址方式,决定了寻址范围。有的机器,1个字=2个字节,有的机器,1个字=4个字节.
主存的技术指标:
存储容量、存储速度(前两者是主要的)、存储器带宽。
存储容量= 存储单元的个数*存储字长
存储速度由存取时间和存取周期决定,通常存取时间<存取周期
存储器带宽:单位时间内存储器存取的信息量。
线选法:
用一根字选择线,直接选中一个存储单元的各个位。重合法:
用两根字选择线,同时选中时,才能选中一个存储单元的一个位。静态RAM:
以触发器为基本电路,速度快,断电后信息消失,属于易失性半导体存储器,价格高,集成度相对低
动态RAM:
基于电容存储电荷,来存储信息。即使不断电,信息也会消失,因此需要刷新。价格低,集成度相对高。
动态RAM刷新的三种方式:
集中刷新、分散刷新、异步刷新。
集中刷新: 如下图所示,它在最后的128个周期内刷新,此时存储器不能做任何的读写操作,因此“死区”占比:128/4000*100%=3.2%
分散刷新: 如下图所示,它将刷新时间分散到每个存取周期内完成,每个存取周期做这两件事情,第一件事是进行读/写操作或者维持信息,第二件事情是刷新操作,因此刷新操作是不会占用读/写时间的,因此无死区。但存取周期被拉长了,整个系统的速度降低了。
异步刷新: 如下图所示,结合以上两种方式,把128次刷新均匀地分布在2ms中,通过合理地安排刷新时间(比如安排在CPU不访存的时间),就能减少死区时间,同时系统速度不被拉低。
字扩展:
通过多增加一根数据线,并加上非门,来实现同一地址下,存储字长的增加。
位扩展:
通过连在不同的地址总线上,增加存储的容量,可以访问更多的空间。
字、位扩展:
顾名思义,字扩展和位扩展同时用上,既增加寻址范围,又增加某一地址的存储字长。
地址线的连接:
地址线的条数,应该与存储单元个数有关。数据线的连接:
数据线的条数,应该与芯片的存储字长有关读写控制命令的连接:
只有RAM才接这玩意,ROM不接片选线的连接:
地址码-地址线=片选线,注意还要加上CPU的MREQ(上面还有一横但没办法打出来。 这是控制访存信号)合理选择芯片:
即ROM与RAM的类型与数量数据在存储的过程中出现可能差错,为了发现错误并纠正错误,可以将原数据配成汉明编码。
汉明码的组成:
真正的数据位+检测位。通常检测位会散布在数据位中,这样通过排列检测位,并直接读取检测位的值,就可以知道哪个数据位出现了错误。
检测位i在2i-1上。 检测位既可以按照配寄原则,也可以按照配偶原则
比如:
按照配偶原则接受到的汉明码是:0100111,试分析哪一位出错?
第1位是检测位,它负责让1,3,5,7的“1”的个数为偶数,分析后发现,确实都是偶数,那就为0;
第2位是检测位,它负责让2,3,6,7的“1”的个数为偶数,分析后发现,此时是奇数个,那说明这个检测位管理的组有问题,那么C2就为1;
第4位是检测位,它负责让4,5,6,7的“1”的个数为偶数,分析后发现,此时是奇数个,那说明这个检测位管理的组有问题,那么C4就为1;(配奇原则同理)
因此C4C2C1=110;因此是第6位出错,故原正确数据应该为:0100101
小技巧:对于检测位控制的组的位数很好记,只要记住第i组的检测位为2i-1,其余的可以用检测位的组合的方式给出。
比如,四个检测位
1号检测位,控制:1,3,5,7,9,11,13,15;
2号检测位,控制:2,3,6,7,10,11,14,15;
4号检测位,控制:4,5,6,12,7,14,13,15;
8号检测位,控制:8,9,10,12,11,13,14,15;
单体多字系统
多体并行系统。多体并行系统又可以分为低位交叉编址和高位交叉编址。
高位交叉编址
又称为顺序存储。如下图所示,优点:扩容方便;缺点:对速度的提升几乎不大。
低位交叉编址
又称为交叉存储。如下图所示,优点:对存储器的带宽提升巨大,因为它可以在一个访存周期内交叉访问存储体;缺点:扩容不便。
用高性能存储芯片
同步DRAM、Rambus DRAM、带cache的DRAM等
Cache的出现是为了解决CPU的运行速度和存储器的速度之间的差异,让CPU直接在Cache访问数据能大幅提升计算机的运行速度。
Cache利用了程序访问的局部性
,即访存的时候,所需要的数据或者指令通常在物理上都是连续存放的;而且访问过一次的内存,很大概率会再次访问。
在正式了解Cache之前需要考虑以下几个问题:
在解决第二个问题之前,先了解命中率这一概念。
命中率h
h=(Nc)/(Nc + Nm),其中Nc是访问Cache的命中次数,Nm是访问主存的命中次数。
访问效率e
e = (tc)/(h*tc+(1-h)*tm)。tc是访问Cache的时间,tm是访问主存所需的时间。
块长与命中率之间的关系
这个关系较为复杂,在块长较小的时候
Cache存储体以块为单位与主存交换信息,且Cache访存的优先级最高。
直接映射
:主存每个区的固定位置的字块给Cache固定位置的字块。t位的标记是用来标记字块来自哪个区。全相联映射
:主存的任意字块可以放在任意Cache的字块中。这样能够充分利用Cache的空间,但同时标记的位数必须从t位增加到t+c位(也就是主存的字块个数为2t+c),逻辑电路就变得复杂很多。组相联映射
(现代计算机常用的方法)。综合直接映射和全相联映射的特点。还是把主存的字块分区,每个区的固定位置放在固定的组里,组里满了的话,还想装那个位置的字块就装不下了。此时标记的位数为t+r要小于t+c。当r=1时,又称为二路组相联。单一缓存:
CPU和主存之间只有一个缓存。两级缓存:
CPU <-> 缓存1 <-> 缓存2 <->主存。统一缓存:
指令和数据放在一个cache里分立缓存:
指令和数据放在不同cache里,有单独的指令Cache和单独的数据Cache。辅存属于非易失性存储器;而主存因为大多是由半导体芯片构成,所以是易失性存储器。
常用的辅存有:硬磁盘、软磁盘、磁带、光盘等,具体原理就不一一叙述了。
最后,创作不易,希望大家能顺手点个赞。如果觉得有帮助,可以加个收藏,给作者更大的创作动力