在本系列文章的前两讲中,分别介绍了计算机组成原理这一系列文章的关注点——程序是如何跑起来的,以及系统总线的相关内容,具体可以看我的这两篇文章。在我的个人博客和CSDN上都已经发布了。在前面的这两章中,我们一直讲,CPU是通过存储器这么一个部件,来获取指令和各种数据的。 但是,从没有更加深入的去讲解这部分的内容。如果你有过装机的经验或者学过计算机的导论等等这些基础课程,肯定会知道,计算机有硬盘、内存条、SSD等等,这些类似的就是我们这一讲的主角——存储器。 你可能会说,我靠我学了这东西好像也没有什么用啊,好像知道了底层的东西对我并没有太大的帮助啊,我的目标仅仅是编写程序啊! 这可能是大家对基础内容的误解,之所以这个系列的文章叫做《程序猿内容心法》,就是因为这些内容对于程序猿来说是十分重要的。你需要了解存储器的层次结构,因为这将会对你编写的程序的性能产生巨大的影响。原因很简单,上面说了,CPU是通过存储器来访问你编写的程序的。你肯定知道,CPU一般对于访问内存条的优先级肯定是要高于硬盘的,因为内存条更快,所以内存条容量的大小对计算机的性能有着很大的影响。如果你的程序能够直接在内存区,肯定执行速度是更快的,性能自然就更好。 顺便提一下,存储这部分内容较多,我分成几个部分来完成写作。第一步帮助读者建立起存储器结构层次的概念,接下来顺着这个层次结构分别介绍主存、高速缓冲存储器、辅助存储的顺序介绍。
存储器的分类是一门比较有意思的事情。存储器这个部件经过了几十年的发展,已经变得非常复杂了,从最开始的集成电路,到后面的磁带、光盘、磁盘等等,所以,存储器的分类也是比较复杂的。一般存储器可以按照容量、介质、存取方式、作用等来进行分类,但是比较重要的还是后面两种。
存储器的分类并不太重要,只需要知道每种存储器的作用即可。重中之重是存储器的层次结构,只有理解好层次结构,才能设计出更棒的程序。
存储器的层次结构如上图所示,是一个金字塔形状的东西。从上到下依次是寄存器、缓存、主存、磁盘、磁带等。寄存器一般存在于CPU内部,寄存器在第一篇文章中已经介绍过,剩下的就是这一节介绍的。
这里还有一个十分重要的概念:存储体系(Memory System)。两种或者两种以上介质,使用软件、硬件、软硬件结合的方式,形成一个整体,从而使得这个存储结构,在程序猿的角度看,是一种大容量、高速度的存储器,而程序猿只需要编写程序,而不需要知道究竟把程序存到哪种存储器中。历史上确实有过这样的一个非常惨的阶段,程序猿需要知道自己编写的程序何时、何地、什么情况下放入哪个存储器中,这简直太令人抓狂了。还好我们现在已经脱离了这个阶段。
上面的金字塔只是让大家建立起一个宏观的认识,这并不是所谓的存储层次结构,真正的存储层次结构分成了两种,一种是缓存-主存结构,另外一种是主存-辅存结构。示意图如下:
缓存-主存层次主要是用来解决CPU的速度和主存速度不匹配的问题,刚刚讲过,即便是内存条这样的高速设备,速度和CPU依然不在一个数量级上,所以需要这样一个层次来解决这个问题。而缓存,就是上面说的Cache。 主存-辅存结构主要是解决容量问题,从金字塔的结构中,其实我们就能够明白,为什么到今天,内存条的价格为何会如此之高,一条DDR4 8G内存,就能够达到七八百RMB的样子,而一块1T的硬盘,也不过四百左右。对于用户来讲,如果都用内存条作为存储器,那简直是人傻钱多。所以就需要使用主存-辅存层次来扩展容量。
这些日子有读者向我反应,我写的东西太长了,又都是非常硬的内容,可能读多了就蒙了,所以我尝试用简短的话完成写作,同时缩短文章篇幅。 在本讲中,我重点介绍了存储器的重要性、存储器的两种分类方式以及存储器的层次结构。内容相对简单,大家重点掌握存储器的层次结构,这非常重要。
感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!
微信公众号:进击的程序狗 邮箱:roobtyan@outlook.com 个人博客:http://roobtyan.cn