计算机存储器简介

     原文发表于我的微信公众号"涛歌依旧",可以点击如下红色文字链接阅读:

   计算机存储器简介(链接)

      从微信公众号把原文直接复制过来,发现图片、表格经常丢失,只有纯文字,所以建议直接点击上述链接阅读。

      复制过来的纯文字内容如下(图片、表格丢失,格式错乱):
 

     计算机完成数据处理后,需要把数据保存到存储器中。计算机又需要从存储器中拿出数据,进行处理。存储器的重要性,不言而喻。
      而且,“冯诺依曼结构”的基本原理是程序存储。存储器的必要性,同样显而易见。
      来看看我们熟悉的存储器,如下是存储容量几G的U盘:

      如下是存储容量4T的硬盘:

      事实上,存储器的类型有很多,远远不止这两种。

      从不同的角度看,存储器可以分为不同的类型,比如:
分类标准
分类1
分类2

按具体用途
主存(内存)
辅助(外存)
缓存和闪存等
按存储介质
磁性
半导体
光盘
按存取方式
随机
顺序

按读写功能
RAM
ROM

按可保存性
掉电丢失数据
掉电保留数据

       把上述分类整理一下,大致如下图所示:

       顺便说一下,大众经常说,某某手机内存是256G,这种说法并不准确,这里所谓的手机内存,是ROM,是手机的存储内存,或者叫机身内存,可用来存音频、视频等资料,相当于PC中外存的概念。而真正的手机内存(比如4G容量),是RAM,是指手机的运行内存:
大众常用描述
手机中的实际含义
对应PC中的实际含义
手机内存
手机存储内存(ROM)
外存(如磁盘)
手机内存
手机运行内存(RAM)
内存
      我们也常说,某某手机的运行内存是4G, 这和4G信号的手机没有半分钱的关系。前者的G是Giga的缩写,后者的G是Generation的缩写。

       存储器结构和材料不同,决定了它们有不同的特点,进而决定了它们有不同的用途。下图是典型的计算机存储器层级:


      在之前文章中,我们说过,计算机中处理的是二进制数据,而且详细阐述了使用二进制的原因。基于同样的原因,计算机中存储的也是二进制数据。
      下图厕所共有8个坑位,每个坑位要么有人占着,要么没有人占着:

      当坑位有人时,记为1,当坑位没人时,记为0.  这8个坑位总共有256(2的8次方)种可能,看下表便知:
8个坑位状态
二进制数据
十进制数据
00000000
00000000
0
00000001
00000001
1
00000010
00000010
2
00000011
00000011
3



11111111
11111111
255
      每个坑位,都是一个二进制位,能表示两种状态,要么有人,要么没人。在计算机中,我们把这样的一个坑位叫做一个比特,英文是bit, 是binary digit的缩写, 而binary digit翻译过来就是“二进制位”。
      一个厕所坑位,就是一个bit, 其容量就是1bit, 能存1bit的数据,其中存的数据,要么是0,要么是1.
      上图总共有8个厕所坑位,对应8个bit, 其容量就是8bit, 能存8bit的数据。在计算机中,8个bit称为一个字节,英文是Byte, 所以上图厕所的存储容量是1Byte, 简记为1B, 即: 1B=8bit.

      我们常说,写了1K的word文档,下载了1M的歌曲,拷贝了1G的视频,买了1T的硬盘,这些描述中,默认单位都是字节(B),看下表的换算关系:
存储容量
换算关系
厕所坑位数
1TB
1024GB
1024*1024*1024*1024*8
1GB
1024MB
1024*1024*1024*8
1MB
1024KB
1024*1024*8
1KB
1024B
1024*8
1B
8 bit
8
1 bit
1 bit
1

      至此,计算机存储器的逻辑,应该基本清楚了:用坑位来表示并记录数据。
     虽然可以用厕所坑位来存储数据,但厕所坑位毕竟太大,不可能把厕所坑位都塞到计算中去,得另想办法。

      古老的办法是用下图中的磁芯(magnetic core), 这32个磁芯被套在横竖电线上(也有资料说是横竖斜三根电线),有的磁芯歪向左边(表示0),有的磁芯歪向右边(表示1)。每个磁芯能表示1位二进制数据,即1个bit. 由于电流具有磁效应,所以当电线的电流改变方向时,磁芯就会改变歪向的方向,表示的值也随之变更:

       显而易见,每行的8个磁芯表示8个bit, 即1B.  所以,上图存储容量是4B, 这个磁芯存储阵列,比之前的厕所坑位存储好多了。

       熟悉linux C/C++程序开发的人,应该都听说过core dump,  它会造成进程崩溃。core dump其实就是进程异常时,保存当时的“内存信息”,便于分析程序异常,这里的core就借用了当年的magnetic core,  都是指存储。
       磁芯存储器,是华裔科学家王安发明的,1984年,美国授予王安“电子及信息技术最高荣誉成就奖”,1986年,王安被选为全美最杰出的12位移民之一,获“总统自由勋章”。1988年,王安被列入美国发明家名人堂。不过,后来,磁芯存储器还是败给了时代,败给了半导体集成电路。

       在之前文章中,我们介绍了D锁存器,它可以锁存1位二进制数据,如下图所示(E端可以看作是允许写的信号):

       我们把8个D锁存器组装在一起,就可以锁存8位二进制数据,也即1B,  把2048*8个D锁存器组装在一起,就可以锁存2KB的数据,这就形成了存储器。我们没法也没有必要画出2048*8个D锁存器,直接来抽象一下, 如下图的RAM所示:

       RAM在断电后,数据会丢失,常用作内存。

       再来看之前文章用到的ROM,即使断电后,数据也不会丢失。我们不对ROM的内部电路做详细介绍,仅从抽象的角度来看ROM:

      可以看到,A11-A0这12根地址线,可以表示4096个不同的存储单元(厕所间),而D7-D0是每个存储单元中的8个二进制数字(厕所间的8个坑位)。类比上面提到的厕所,那么该ROM中对应4096个厕所间,每个厕所间有8个坑位。

       我们来向ROM中塞数据,看如下汇编程序:
ORG  0000H
  DB  00H
  DB  02H
  DB  04H
  DB  08H
END
       这段程序的意思是,在ROM的头4个字节,分别塞入00H, 02H, 04H, 08H这四个数据。
       用汇编器工具对上述汇编程序进行转换,得到对应的机器二进制代码,塞入到ROM中后,用proteus查看的结果如下:

      在ROM中是按照二进制来存储的,但为了方便显示,一般按照十六进制进行呈现。很显然,有如下表格关系:
第n号厕所间
厕所间标号A1A0
厕所间坑位值D7-D0
0
00
00000000
1
01
00000010
2
10
00000100
3
11
00001000
       存储器的类型可能有千差万别,但里面存储数据的逻辑却基本一致。

       在之前的自制简易计算机中,还提到过用D触发器组成的4位触发器,它也经常被称为寄存器(由n位触发器构成), 通常存在于CPU中,了解8086 CPU的朋友们,肯定对寄存器这个概念有很深的印象。如下是4个D触发器构成的4-D触发器,即寄存器:

      本文主要介绍了存储器相关的一些基础知识,相对简单。
      我们再看“冯诺依曼结构”的五大部件(下图红框):

       再看之前文章中的自制计算机,其中基本就包含了“冯诺依曼结构”的五大部件:

      在“冯诺依曼结构”的五大部件中,最核心的是CPU和存储器(人们常说的芯片通常是指CPU芯片和存储器芯片),而最最最核心的是CPU, 在后续文章中,我们将对CPU和汇编语言进行介绍。

       不见不散
 

发布了2213 篇原创文章 · 获赞 4564 · 访问量 1977万+

猜你喜欢

转载自blog.csdn.net/stpeace/article/details/103533148