今天这篇文章将来带代价认识一下计算当中的存储器,如果有这方面基础比较薄弱的小伙伴,建议大家先去读一读我的计算机底层原理系列文章的第一篇《带你深挖计算机底层逻辑,打通你计算机基础知识的任督二脉》,在这篇文章中,已经用最浅显易懂的方式了解了计算机最基本的硬件组成,可以为读者建立一个对计算机最基本的印象,以动态模型的形式为大家讲解,可以更好地理解存储器。
1.主存储器:
概述:简称主存也叫做内存储器(内存),用来存放计算机运行期间所需的程序和数据,CPU可以直接随机地对其访问。
特点:容量较小、存取速度较快、造价较高,但是容量没有cache小,造价没有cache高,存取速度没有cache快。
2.辅助存储器:
概述:简称辅存也叫外存,就是我们在电脑当中所看到的磁盘(C盘、D盘之类),不过我们所看到的磁盘其实是经过虚拟化的虚拟存储器,这个我随后会为大家进行讲解,他用来存放暂时不用的数据和程序。
特点:容量大、造价低、存取速度慢,而且CPU是无法直接对其进行存取的,CPU对他的访问必须经过内存才可以。
3.高速缓冲存储器:
概述:我们现代计算机设立三级缓存,一级缓存和二级缓存集成在CPU内部芯片上,而三级缓存则位于CPU和主存之间,用于存放CPU常用的数据和指令,他的存取速度可以与CPU相匹配,但是略慢与CPU。
特点:容量小、造价高、存取速度快。
可以大致分为磁表面存储器、光存储器(光盘)、半导体存储器等。
1.随机存取存储器(RAM):
概述:存储器的任何一个单元都可以存取,而且存取时间与存储单元的物理地址没有关系,读写方便、操作灵活,主要被应用在主存和高速缓冲存储器当中。
分类:分为静态RAM、动态RAM(二者之间有什么区别随后会为大家讲解)。
2.只读存储器(ROM):
概述:存储器里面的内容只能读出不能够写入,一旦信息写入即使断电、信号干扰数据也不会丢失。
功能:用来存放固定不变的数据,一些系统中重要的库等内容。在现在的设备中,他与RAM共同构成了主存。他的写入操作比起读取操作要慢上许多,并且依旧允许其随机访问。
3.串行访问存储器:
概述:对存取单元进行读写时,按照物理地址的先后顺序寻址。
注释:静态RAM与动态RAM
静态RAM也就是高速缓冲存储器(cache)的类型,他的组成是一个双稳态性六晶体管电路,六晶体管也叫MOS管,这个电路的特点是具有很强的稳定性,不管是断电还是信号干扰,只要在信号恢复以后数据总能恢复到原来的样子。
动态RAM也就是我们在主存当中用到的类型,他是由一个晶体管和电容组成的电路,我们在高中都学习到过,电容极易失去电子,这也就导致了动态RAM非常不稳定,在10ms左右的时间存储单元当中的数据就会丢失,这个时候我们必须对其进行一个读出操作并且再次写入,这个过程成为刷新,以此来保证存储单元当中的数据不会丢失。
当然由于动态RAM当中仅仅只由一个晶体管组成,所以他的集成度要高于静态RAN,所以也可以间歇性地提高CPU访问的效率。
1.易失性存储器:
数据在读出以后存储单元中的数据就会丢失,原来的存储内容就会被破坏,这叫做破坏性读出,例如RAM,不管是动态RAM,还是静态RAM都是如此。
2.非易失性存储器:
数据在读出以后,原来的存储内容不会丢失,这叫做非破坏性读出。
注释:针对易失性存储器,我们的系统必须周期性地对其进行一个恢复的操作,对数据进行一个再生。
注释:高速缓存(cache)的功能:
还是要从上图的金字塔图来讲解,根据摩尔定理(这里不做过多说明,想要了解的小伙伴可以自行百度)可以了解到,我们计算机的CPU基本上每过18个月他的性能就会提升一次,所以这也就导致了我们的CPU和主存之间产生了巨大的性能差异,也就是CPU运算的速度远快于CPU访问主存的速度,所以为了解决这个问题就引进了高速缓存的概念,也就是我们之前提到的SRAM存储器。从上图可知cache的存取速度是要优于主存的,
我们在CPU和主存之间设置一级缓存(计算机共有三级缓存,另外两层集成在CPU的芯片上),将内存中的数据拷贝在cache当中,这样CPU可以直接到cache里面取数据和指令。
三、主存储器
主存储器有DRAM来实现,靠近CPU的高速缓冲存储器由SRAM来实现,他们都属于易失性存储器,就是只要断电,原来存储的信息便会丢失,DRAM的成本是要低于SRAM的,原因是因为SRAM使用的是六晶体管电路(MOS)管并且这个存储器的芯片要使用更多的硅,只有ROM属于非易失性存储器。
这里说明一个容易混淆的概念,只要是RAM都属于易失性半导体存储器,而DRAM是通过电容来实现的,而SRAM则是通过MOS管来实现的,大家都知道电容很大的一个特点就是电子容易丢失,所以即使在不断电的情况下,DRAM只要收到电子信号干扰或者其他干扰当中的数据也很容易丢失的,所以这个时候就必须计算机系统在一定的固定周期内对其进行读操作之后再将数据从新写入到主存当中,而SRAM具有双稳态性,即使受到干扰,只要在信号恢复之后数据还可以继续访问,不会丢失。
那么到这里可能就有小伙伴会问了,那为什么不把主存也用SRAM来设计呢?ememem.....因为贵呀。而且六晶体管的集成度也不如DRAM当中所使用的单晶体管,集成度越高CPU的访问效率也就越高啊。
1.SRAM的工作原理:
我们通常把存放一个二进制位的物理期间叫做存储元,他是存储器的最基本原件,一个存储元可以存放一个二进制位,而我们的数据往往有多个二进制位,所以一个存储单元当中有着多个存储元,每一个存储单元有一个唯一的地址,所以这些存储单元里的存储元有着相同的地址。
SRAM存储元是一个双稳态触发器,也就是六晶体管(MOS管),这个MOS管是专门用来记忆信息的,即使信息被读出,存储单元里的信息也不会被破坏,他仍然保持原来的状态无需再生,这就是我们在上文当中所提到的非破坏性读取
但是,SRAM的速度随虽快,可集成度低、功耗较大、而且价格昂贵,一般用于高速缓冲存储器(只需要存储一些CPU运算暂时要用到的数据和指令即可)。
2.DRAM的工作原理:
与SRAM的存储原理不同,DRAM是利用存储元电路中的栅极电容当中的电荷来存储信息的(电容上的电荷极易丢失),他的基本存储元只是用一个晶体管,所以他的密度要比SRAM高,所以他相比SRAM来说集成度高适合做大容量的存储器,而且功耗低、价格低(只有SRAM的1%)。
但是这里还要面临着一个问题也就是我刚才所提到过的问题,就是电容中的电荷极其容易丢失,一般只能维持10ms左右,有时候甚至只有1~2ms,为了解决这个问题,计算机系统必须周期性的对其进行读出,并且再次写回,一次来不断地刷新主存当中的数据,刷新所用的时间成为刷新周期,常见的三种刷新方式有三种。
1)集中刷新:利用一段固定的时间,依次对存储器的所有行进行逐一再生,但是在此期间却会停止对存储器的读写操作,成为“死时间”,又称访存死区,优点就是在CPU对主存进行读写操作时可以不受刷新的影响。
2)分散刷新:把对每行的刷新分散到各个工作周期当中去,这样一个存储器的工作周期会被一分为二,前半部分进行读写操作,后半部分对存储单元的每行进行刷新,这样的可以避免“死时间”,但是缺点就是延长了存储器的存取周期。
3)异步刷新:总的来说就是“走走停停”,按照一定的算法刷新一段时间,就让CPU对内存访问一段时间,这样虽然依然有“死时间”。但是“死时间”被大大低缩短了,而且CPU的等待时间也被缩短,这是基于以上两种方式的有机结合。
总结:
1)DRAM刷新的单位是行,由芯片内部自动生成行地址
2)刷新操作是整个存储器当中的所有芯片一起刷新,不需要选片
3)刷新对CPU是透明的,而且不需要外部的干预
SRAM | DRAM | |
存储信息 | 触发器 | 电容 |
破坏性读出 | 非 | 是 |
刷新 | 不需要 | 需要 |
发送行里地址 | 同时送 | 不用同时送 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
存储成本 | 高 | 低 |
主要用途 | 高速缓存 | 主机内存 |
注释:这里的发送行列地址发送我后续后说明,这里和引脚有关,引脚这里从百度上找了一张图片供大家参考,旁边伸出来的部分就是引脚。
1)存储体:存储体是存储单元的集合,他由行选线和列选线来选择所访问的单元,存储体上相同的行、列上的位同时被读出或写入。
2)地址译码器:用来将地址转换为译码输出线上的高低电平,驱动相应的程序读写电路。
3)I/O控制电路:用以控制被选中的单元读出或写入。
4)片选信号量:单个芯片的容量是非常小的,无法满足CPU对存储器容量的要求,因此需要一定数量的芯片进行存储器的扩展,这也就是后需要为大家讲解到的CPU与存储器的连接以及存储器的扩展。
5)读写控制信号:根据PC发出的命令,向I/O控制电路发出命令,控制被选中的单元进行读写操作。
1.只读存储器的特点:ROM和RAM都是支持随机存取的存储器,而且RAM为易失性存储器,反观ROM中一旦有了信息,就不能轻易地改变,即使系统断电也不会丢失,他在计算机当中只供读出操作,并且他的结构简单,信息不易丢失,非常可靠。
2.ROM的类型:根据制造工艺的不同,ROM可分为掩模式只读存储器MROM、一次可编程只读存储器PROM、可擦除可编程只读存储器EPROM、Flash存储器和固态硬盘SSD。
1)掩模式只读存储器MROM:存储器的信息内容有厂商直接写好不允许用户修改,是只读不可写的存储器。
2)一次可编程只读存储器PROM:允许用户利用专门的设备写入自己的程序,一旦写入内容将无法改变。
3)可擦除可编程只读存储器EPROM:用户不仅可以写入编程信息,还可以允许多次修改,虽然允许修改,但是编程次数有限,而且写入的速度非常慢
4)Flash存储器:可以在断电的情况下长期保存信息,并且可以快速地擦除存储器当中的信息并且快速重写。
5)固态硬盘:基于闪存的固态硬盘,(闪存是一种非易失性存储器,采用随机访问方式),有控制单元和存储单元(Flash芯片)组成。
- 这其中由一个个存储0或1的记忆单元(存储元件)构成的存储矩阵是存储器的核心部分,存储元件是具有两种稳态的能表示0或1二进制的物理器件,为了存取存储体当中的信息,必须对存储单元进行编号(编址),通常我们采用按字节编址。
- 在指令执行过程中需要访问内存的时候,CPU首先把被访问单元的地址送到MAR中,然后通过地址将主存地址送到主存中的地址寄存器,一边地址译码器进行译码选中相应的单元,这其中需要CPU通过控制总线将控制信号发送到内存(控制信号是控制CPU对主存进行读操作还是写操作)。
- 如果是写操作的话,CPU要先将数据送往MDR中,经过数据总线写入被选中的单元。
- 如果是读操作,那么主存将读出所选中的单元通过数据线送到MDR。
- 数据线的宽的与MDR的宽度是相同的,而地址线的数量则决定了主存地址空间可以寻址范围的大小。
- 要知道电信号通过数据线要想传到存储单元靠的是引脚,但是DRAM的芯片容量较大,地址位数多,为了减少芯片当中引脚的数量,通常采用地址引脚复用技术,行地址和列地址通过相同的引脚先后两次输入,这样的地址引脚数量可以减少一半。
- 数据线和地址线共同反映存储体容量的大小,例如2^36*64位代表着36跟地址线,64跟数据线。
今天为大家系统的说明了存储器的内部结构,为大家深入地讲解了存储器的类型,以及他们的内部构造和工作原理,但是有很多计算机基础知识我已经在我的这个系列里的上一篇文章当中详细地讲解过了,如果读者对计算机底层逻辑以及计算机整体的硬件结构感兴趣的话可以阅读我的上一篇博文,相信你一定会有收获。
不过文章到了这里还不能够结束,我今天在这里还要为各位小伙伴们讲解一下虚拟内存的概念,准确的来说虚拟存储器就是将用户的逻辑存储器和物理存储器进行分离,给用户提供一种比真是内存大的多的存储器。
首先我从进程的角度来讲解虚拟存储技术,(如果小伙伴们对进程的概念不理解的话,可以浏览我的上一篇文章,当然我的下一篇文章将会为大家讲解什么是进程以及线程),进程再实现的时候由于CPU一次性只能执行一个进程,但是我们的内存当中进程的数量是远远超过CPU的数量的,那么这个时候就引入了并发(在同一时间间隔内,多个进程同时执行)的概念,这样就给了用户一张错觉,感觉自己是独占内存,独占CPU,这样子内存就被无形中给放大了许多倍。
其次虚拟内存会通过让内存结合外存的方式来扩大内存,其实我们所看到的磁盘全部都是操作系统为我们抽象出来的虚拟内存,计算机当中真正的磁盘其实只有一个,我们所拥有的地址也是逻辑地址,那么虚拟内存的工作原理是什么呢?
虚拟内存工作原理: