[学习资料]

存储器的前世今生

[复制链接]
628|2
手机看帖
扫描二维码
随时随地手机跟帖
blust5|  楼主 | 2023-2-7 09:42 | 显示全部楼层 |阅读模式
本帖最后由 blust5 于 2023-2-7 15:04 编辑

存储器,顾名思义,存储信息的器件。广义上来讲,只要能存储信息的东西都可以算是存储器,比如书籍、壁画、雕塑、竹简等,甚至纹身其实也算。最早的存储器甚至可以追溯到绳结、龟壳等物品。
5771663e19db302544.png 6168263e1ac5c2360a.png
在今天来讲,存储器基本上就是指电子方面相关的器件了。

存储器的定义如下:
存储器是用来存储程序和各种数据信息的**部件。存储器是许多存储单元的集合,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值。

那么,存储器都有哪些种类呢?
1、按存储介质可以分类为半导体存储器、磁表面存储器、光存储器。
1.1  半导体存储器,大家最熟悉的最常用的分类,主要包括U盘、固态硬盘、各类存储芯片等。这里就先不展开说了,下面的分类基本上是在对半导体存储器进行分类。
1.2  磁表面存储器,利用涂覆在载体表面的磁性材料具有两种不同的磁化状态来表示二进制信息的“0”和“1”。将磁性材料均匀地涂覆在圆形的铝合金或塑料的载体上就成为磁盘,涂覆在聚酯塑料带上就成为磁带。
      磁带大家很熟悉,以前听歌用录放机放磁带,有的录放机还可以在磁带上录音。
6897663e1a141da638.png
      磁盘大家常见的就是机械硬盘,机械硬盘里的存储信息载体就是磁盘。另外一种磁盘是软盘,现在已经不常用了,以前用的还是挺多的,存储载体也是磁盘。
5098863e1a16960e8f.png
1.3  光存储器,用光学方法从光存储媒体上读取和存储数据的一种设备。
      光盘不用说了,大家都知道是光存储器,包括CD、DVD,以及存储量更大的蓝光光盘等。
4944763e1a18514b30.png
      另一种大家熟悉的光存储器是胶片,包括最常见的相片底片、以前的电影胶片以及存储书籍或文字类出版物的微缩胶片。
      相片底片大家都比较了解,在数码相机普及之前,拍照最初的信息就是存储在胶卷上的,必须在纯黑环境里进行显影、定影处理才能保存下来,处理之前暴露在光线中就会完全曝光,失去存储信息。
459963e1a1be1e1bb.png
      电影胶片大家应该也会了解,以前放电影都是用一台放映机,挂上一大卷电影胶片,然后用一个灯头照射胶片,然后胶片匀速移动,就会有影像投放到幕布上。这里问大家一个小问题,大家知道放电影时,声音是怎么来的么?另外同步播放一盘磁带么?其实并不是,电影胶片存储声音采用的是光学录音法,利用胶片侧边数条较窄的轨道分别作为SDDS声轨,Dolby Digital声轨,模拟声轨和DTS时间码记录声音的。
1744763e1a2ad3909b.png
      当然因为这种方式相对复杂,用磁带同步录音的方式也是有的。
      微缩胶片可能大家了解的就不多了,这个微缩胶片是把书籍或文字类出版物汇集制作为一个小胶片,因为微缩胶片有保存时间长,便于查阅,方便分类及在以后的电子化过程中占有绝对的优势。
      这种方法大量的应用于图书馆、档案馆等机构中。如西藏佛学院的微缩胶片总数超过五万张。
5695463e1a36db4774.png

2、 按存储器的读写功能可以分类为只读存储器(ROM)、 随机读写存储器(RAM)。
2.1  只读存储器(Read-Only Memory,ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。
      除少数种类的只读存储器(如字符发生器)可通用之外,不同种类的只读存储器功能不同。为便于用户使用和大批量生产,进一步发展出可编程只读存储器(PROM)、可擦可编程序只读存储器(EPROM)和带电可擦可编程只读存储器(EEPROM)等不同的种类。
      可编程只读存储器(PROM)出厂时里面信息是空的,用户可以编程一次,由于信息写入是需要熔断内部的熔断丝,因此写入信息之后信息固定,无法再次改变。
      可擦可编程序只读存储器(EPROM)用户可以进行信息的擦除重写,但是擦除时需要使用紫外线进行照射等操作,编程时也需要用更高的电压进行信息写入。
7013463e1a6173f4f6.png
      带电可擦可编程只读存储器(EEPROM)就是目前我们熟知的存储芯片了,可以很方便的带电进行读写操作,不需要特殊的操作进行擦除。

      由于掉电后信息仍然能够存储,ROM一般用来做程序存储器、数据存储器等断电后仍需保持数据的存储器。

2.2  随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。
      随机存取存储器(RAM)既可向指定单元存入信息又可从指定单元读出信息。任何RAM中存储的信息在断电后均会丢失,所以RAM是易失性存储器。
      RAM一般用来做内存和缓存等需要高速存取且断电后不需要保持数据的存储器。

3、 按信息的可保存性可以分类为非永久记·忆的存储器(即易失性存储器)、永久记·忆性存储器(即非易失性存储器)。
      这个很好理解,不需要说太多了。

4、 按在计算机系统中的作用可以分类为主存储器(内存)、辅助存储器(外存储器)、缓冲存储器。
4.1  主存储器(Main memory),简称主存,也称内存。是计算机硬件的一个重要部件,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。
      为了保证内存的存取速度,内存采用的是RAM,掉电后数据会丢失,因此一般在掉电之前的短时间内会将重要信息保存到外存里。

4.2  缓冲存储器(Cache)是一种高速存取存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。
      Cache是介于CPU和主存之间的小容量存储器,但存取速度比主存快。主存容量配置几百MB的情况下,Cache的典型值是几百KB。
      缓冲存储器工作原理要求它尽量保存最新数据。当一个新的主存块需要复制到Cache,而允许存放此块的行位置都被其他主存块占满时,就要产生替换。这里就涉及到了替换算法。
      常用的替换算法有三种:最不经常使用(LFU)算法、近期最少使用(LRU)算法和随机替换方法。
      LFU算法统计的是固定时间内每行被访问的次数,访问次数最少的被替换出去。这种算法将计数周期限定在对这些特定行两次替换之间的间隔内,因而不能严格反映近期访问情况。
      LRU算法统计的是距离上次访问的间隔时间,间隔时间最长的被替换出去。这种算法保护了刚复制到Cache中的新数据行,符合Cache工作原理,因而使Cache有较高的命中率。
      随机替换方法,这个就不用介绍了,大家看名字也能理解其原理。虽然直观上来说这种方法很不可取,但是实际应用上来看仅仅稍逊于上两种算法,而且在缓存容量增大时随机替换的缺陷会降低,因此并不是不可选的策略。
      除了CPU与主存之间应用的缓存之外,一般硬盘(包括固定在主机内的硬盘和移动硬盘)都会配一个缓存区,用来增加存取速度。


4.3  辅助存储器(外存储器)是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等。
      由于外存储器需要长期保存数据,因此都是采用的非易失性存储器(基本等同于ROM)。

说完了存储器的演变过程和各个分类,来简单说一下我们怎么选用存储器。
今天我们所说的选用存储器芯片,除了专门选来用作缓存增加存取速度之外,一般都是用来存储数据的,因此都是非易失性存储器。
那么如何选取存储芯片呢?
单片机内部都会有一定的FLASH空间,有的单片机还会有EEPROM空间,一般来说这些空间是足够使用的,掉电后信息也能保存。但是有些特殊应用确实需要扩展存储空间的话,就需要用到外部存储器了。
选用外部存储器时,我认为主要需要考虑以下几点:
1、所需的空间大小。这个参数肯定是第一位的,根据方案需求确定所需的空间大小,然后选取对应大小的存储芯片,或者留有一部分余量备用。
2、存储芯片的读写接口。常见的存储芯片读写接口有串口和并口之分,并口可以提供更大的访问速度,但是需要更多的连接线,串口虽然速度相对较慢,但连接线少了很多,比如SPI、IIC等通讯方式,使用四根/两根连接线即可。
3、存储芯片的使用场景。根据使用场景的不同,可能需要选用特定种类的存储芯片。比如FPGA应用上,FPGA的程序不是存储在FPGA芯片里面的,FPGA芯片里面的信息会在掉电后丢失,因此需要专门配置一颗存储芯片用来存储FPGA程序。这颗存储芯片的选取就需要考虑这个场景,选取一些专用芯片。
4、存储芯片的品牌。芯片厂商也算一个考虑方向。要确保选取的芯片质量可靠,供货稳定,市面上已经大批量验证等方面。当然如果不是做产品,只是自己做一些小方案自己玩一玩的话,这个方面可以相对不用考虑。
5、存储芯片成本。综合上面几个信息考虑,要选取成本相对较低的方案。毕竟做产品,在保证做成功的前提下,投入越少,赚的越多。
6、可扩展性。这个方面也要相对考虑一下,最好选取同系列具有PIN-TO-PIN的扩容型号,为以后升级留下易操作性。当然如果确认做的产品不需要升级,或者升级时肯定会重新设计方案,那么这个方面就可以不做考虑。

关于存储器的使用:虽然现今的存储器可以很方便的进行读写操作,但是擦除操作所用的时间相对需要更长,因此在使用时需要尽量避免擦除动作。
比如对存储器进行分区操作,每个区写满之后再进行整体擦除,而不是每条信息更新时都进行擦除重写。
可以为每条信息存储位置添加标签,标记该条存储位置的状态,比如为空、已写入信息、擦除成功等。
可以创建一个索引表,存储器前面一定地址作为索引,每个字节对应一条信息位置的状态。后面按照信息封装大小进行信息位置的区分。
由于存储芯片的空状态是FF,写入是数据位由1变为0的过程,有些存储器在某个位置写入之后还可以继续“写入”(当然这个“写入”只能继续将某些数据位1改写为数据位0),因此作为索引表时可以很方便的改写索引状态:比如FF代表该索引对应的信息条为空,FE代表已经写入信息,FA代表信息已经擦除,等等。
如果存储芯片不支持某个地址的多次写入操作,则可以分出一个区域用来做索引表,每次更改索引状态时,将这部分信息全部读取出来,然后整片区域擦除后,将索引信息改写完成后再次写入进去。
有些存储器已经可以支持按字节擦除/改写,即无需专门进行擦除操作,直接进行写操作,即可将新的信息覆盖掉原有信息。这种存储芯片使用起来最为方便,当然成本相较于其他的也会高一些。

以上是我对存储器的了解以及关于存储器选型和使用的看法。
大家怎么看呢?



使用特权

评论回复
blust5|  楼主 | 2023-2-7 09:47 | 显示全部楼层
本帖最后由 blust5 于 2023-2-7 15:00 编辑

转移至主贴

使用特权

评论回复
江岚| | 2023-2-13 14:11 | 显示全部楼层
不错,简单易懂!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:业精于勤荒于嬉,行成于思毁于随。

72

主题

2596

帖子

10

粉丝