前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈计算机组成原理(三)存储器概论

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

作者头像
roobtyan
发布2019-02-21 15:42:11
7650
发布2019-02-21 15:42:11
举报

前言

在本系列文章的前两讲中,分别介绍了计算机组成原理这一系列文章的关注点——程序是如何跑起来的,以及系统总线的相关内容,具体可以看我的这两篇文章。在我的个人博客和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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 存储器的分类
    • 按照存取方式分类
      • 通过作用分类
      • 存储器的层次结构
      • 总结
      • 结语
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档