漫谈计算机组成原理(三)存储器概论

前言

在本系列文章的前两讲中,分别介绍了计算机组成原理这一系列文章的关注点——程序是如何跑起来的,以及系统总线的相关内容,具体可以看我的这两篇文章。在我的个人博客和CSDN上都已经发布了。在前面的这两章中,我们一直讲,CPU是通过存储器这么一个部件,来获取指令和各种数据的。
但是,从没有更加深入的去讲解这部分的内容。如果你有过装机的经验或者学过计算机的导论等等这些基础课程,肯定会知道,计算机有硬盘、内存条、SSD等等,这些类似的就是我们这一讲的主角——存储器。
你可能会说,我靠我学了这东西好像也没有什么用啊,好像知道了底层的东西对我并没有太大的帮助啊,我的目标仅仅是编写程序啊!
这可能是大家对基础内容的误解,之所以这个系列的文章叫做《程序猿内容心法》,就是因为这些内容对于程序猿来说是十分重要的。你需要了解存储器的层次结构,因为这将会对你编写的程序的性能产生巨大的影响。原因很简单,上面说了,CPU是通过存储器来访问你编写的程序的。你肯定知道,CPU一般对于访问内存条的优先级肯定是要高于硬盘的,因为内存条更快,所以内存条容量的大小对计算机的性能有着很大的影响。如果你的程序能够直接在内存区,肯定执行速度是更快的,性能自然就更好。
顺便提一下,存储这部分内容较多,我分成几个部分来完成写作。第一步帮助读者建立起存储器结构层次的概念,接下来顺着这个层次结构分别介绍主存、高速缓冲存储器、辅助存储的顺序介绍。

存储器的分类

存储器的分类是一门比较有意思的事情。存储器这个部件经过了几十年的发展,已经变得非常复杂了,从最开始的集成电路,到后面的磁带、光盘、磁盘等等,所以,存储器的分类也是比较复杂的。一般存储器可以按照容量、介质、存取方式、作用等来进行分类,但是比较重要的还是后面两种。

按照存取方式分类

  • 存取时间与物理地址无关(随机访问)
    • 随机存储器(RAM),可读可写随机存储器还可以分成动态的和静态的,动态的是采用电容保存电荷的原理实现的,静态的则是通过触发器或者说是电路方式实现的,这部分内容后面会详细说明。
    • 只读存储器(ROM),只读,一般用作储存系统信息,因为系统信息一般是不能让用户修改的,所以只读的最好,一般喜欢刷机的同学可能会有更深的理解,所谓的ROM包嘛。
  • 存取时间与物理地址有关(串行访问)
    • 顺序存取:磁带,这没什么好说的,听过磁带的肯定清楚,如果你想要找到某首特定的歌,需要不停地倒带。
    • 直接存取:磁盘,一般访问磁盘是通过给出的地址,访问磁盘上面的对应位置,从而实现数据的读取。

通过作用分类

  • 主存
    所谓主存,就是之前讲的,内存条之类的,CPU主要利用的存储器。

  • FlashMemory
    闪速存储器,能够在不加电的情况下能长期保持存储的信息。因为主存中的信息在断电以后就无法恢复了,所以闪速存储器很有意义。

  • 辅存
    辅存就是辅助存储器,作为扩展存储资源,就是磁盘之类的大容量的存储器,可以辅助计算机读写数据。

  • 高速缓冲存储器(Cache)
    高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。关于SRAM后面也会介绍,此时你只需要知道高速缓冲存储器能够进一步提高计算机的性能。实际上,CPU的速度要比所有存储器的速度快上万甚至十几万倍,这就造成了CPU需要等待存储器送来的数据。为了实现CPU和存储器之间的速度匹配,是重中之重,所以才出现了高速缓冲存储器。

存储器的层次结构

存储器的分类并不太重要,只需要知道每种存储器的作用即可。重中之重是存储器的层次结构,只有理解好层次结构,才能设计出更棒的程序。

存储器的层次结构如上图所示,是一个金字塔形状的东西。从上到下依次是寄存器、缓存、主存、磁盘、磁带等。寄存器一般存在于CPU内部,寄存器在第一篇文章中已经介绍过,剩下的就是这一节介绍的。

  • 对于金字塔的解释
    这个金字塔看似简单,但实际上包含的信息很多。最重要也是最著名的,就是“三个特性之间的关系”。

    • 速度:由上到下,由高到低
    • 价格:由上到下,由高到低
    • 容量:由上到下,由低到高

这里还有一个十分重要的概念:存储体系(Memory System)。两种或者两种以上介质,使用软件、硬件、软硬件结合的方式,形成一个整体,从而使得这个存储结构,在程序猿的角度看,是一种大容量、高速度的存储器,而程序猿只需要编写程序,而不需要知道究竟把程序存到哪种存储器中。历史上确实有过这样的一个非常惨的阶段,程序猿需要知道自己编写的程序何时、何地、什么情况下放入哪个存储器中,这简直太令人抓狂了。还好我们现在已经脱离了这个阶段。

上面的金字塔只是让大家建立起一个宏观的认识,这并不是所谓的存储层次结构,真正的存储层次结构分成了两种,一种是缓存-主存结构,另外一种是主存-辅存结构。示意图如下:

缓存-主存层次主要是用来解决CPU的速度和主存速度不匹配的问题,刚刚讲过,即便是内存条这样的高速设备,速度和CPU依然不在一个数量级上,所以需要这样一个层次来解决这个问题。而缓存,就是上面说的Cache。
主存-辅存结构主要是解决容量问题,从金字塔的结构中,其实我们就能够明白,为什么到今天,内存条的价格为何会如此之高,一条DDR4 8G内存,就能够达到七八百RMB的样子,而一块1T的硬盘,也不过四百左右。对于用户来讲,如果都用内存条作为存储器,那简直是人傻钱多。所以就需要使用主存-辅存层次来扩展容量。

总结

这些日子有读者向我反应,我写的东西太长了,又都是非常硬的内容,可能读多了就蒙了,所以我尝试用简短的话完成写作,同时缩短文章篇幅。
在本讲中,我重点介绍了存储器的重要性、存储器的两种分类方式以及存储器的层次结构。内容相对简单,大家重点掌握存储器的层次结构,这非常重要。

结语

感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

微信公众号:进击的程序狗
邮箱:roobtyan@outlook.com
_个人博客:_http://roobtyan.cn

本文参考:《深入理解计算机系统(第3版)》、《计算机组成原理(唐朔飞)》

发表评论

电子邮件地址不会被公开。 必填项已用*标注