【SoC基础】从[存储器]到[内存]再到[闪存],一次性解释清楚!

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 一、存储器
    • 1.1存储器的作用
    • 1.2存储器的种类
      • 1.2.1按主次分类
      • 1.2.2按特性、功能分类
  • 二、内存
    • 2.1硬件和逻辑两方面
    • 2.2内存的编程模型
    • 2.3类比内存
    • 2.4内存访问方式
    • 2.5内存管理方法
      • 2.5.1操作系统管理
      • 2.5.2裸机程序管理
  • 三、闪存
    • 3.1 NOR FLASH和NAND FLASH
    • 3.2 2D FLASH和3D NAND FLASH
      • 3.2.1 2D FLASH
      • 3.2.2 3D NAND Flash
      • 3.2.3 总结
    • 3.3 采用闪存颗粒的存储器
  • 疑问1:存储器和寄存器的关系?
  • 总结


一、存储器

1.1存储器的作用

存储器又被称为存储芯片,是全球需求最多的一类芯片,主要用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。然而在2016年之前我国国产存储芯片的市场基本为零,其中最为主要的当属DRAM内存和NAND flash两类。

1.2存储器的种类

1.2.1按主次分类

按其主次可分为内存和外存,即主存储器和辅助存储器
首选,我们从字面上来尝试理解内存,其中有个“内”,这明显是一个相对的词,那它到底相对于谁?

答案是:相对于CPU而言,能与其直接进行数据传输的存储器,称之为“内存”。

主存储器又称内存储器(简称内存),内存指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,一旦关闭电源或发生断电,其中的程序和数据就会丢失,一般为RAM;

辅助存储器又称外存储器(简称外存),外存通常是磁性介质或光盘,像硬盘(机械和SSD),软盘,磁带,CD等,能长期保存信息,并且不依赖于电来保存信息;

1.2.2按特性、功能分类

RAM、ROM和闪存(Flash)是按照存储器的特性和功能进行分类的。

  1. RAM(Random Access Memory,随机存取存储器):

    • RAM是易失性存储器,断电后数据会被清除,分为SRAM和DRAM。
    • SRAM:静态随机存储器,上电后可以直接使用;价格昂高,容量小
    • DRAM:动态随机存储器,软件初始化后才能使用;价格低,容量大
    • RAM是一种临时存储器,用于存储当前执行的程序、数据和临时结果。
    • 它具有快速的读写速度和随机访问的特性,可以快速存取和处理数据。
  2. ROM(Read-Only Memory,只读存储器):

    • ROM是一种只读的存储器,其中的数据在生产制作过程中被写入,并且在正常操作期间无法被修改,因此掉点后数据不会丢失。
    • ROM中的数据通常是固化的程序代码、固件、配置数据等,用于存储不需要更改的信息。
    • 因此可以将ROM看作是一个不可修改的存储器。
    • 分类: PROM、EPROM
  3. 闪存(Flash):

类似RAM,闪存是一种可以进行读取和写入操作的存储器,也具备了随机存取数据的能力。它可以像RAM一样用于存储和处理数据。

类似ROM,闪存具有非易失性特性,即在断电或重新启动设备后数据仍然保存。这使得闪存在长期存储数据方面非常有用,可以作为可靠的存储介质。

上述特性描述表明:

  • 闪存可以说是兼具了RAM可读可写的特性和ROM断电不丢失数据的特性(意味着可以长时间存储数据)。
  • 闪存是一种非易失性存储器,可以用于长期存储数据并允许数据的可擦写和可编程,
  • 它具有较快的写入速度,但相对较慢的读取速度。
  • 闪存经常用于存储固件、操作系统、配置数据、用户数据等长期保存的信息。

此外,闪存还具有可擦写和可编程的特性。与ROM不同,闪存中的数据可以被擦除和重新编程,这使得闪存适用于存储需要频繁修改或更新的数据,如操作系统、固件、配置数据、用户数据等。

需要注意的是,闪存的读写速度相较于RAM较慢,并且闪存的写入操作通常需要整个块或扇区的擦除,再进行数据的重新编程。这些特点使得闪存在某些场景下可能不适用于频繁的随机写入操作。

  • 种类
    NOR FLASH
    NAND FLASH:分为2D NAND FLASH和 3D NAND FLASH
    在这里插入图片描述

二、内存

第一章将存储器的种类以及相应的特性进行了阐述,我们知道:
📢:内存用于临时存储数据和程序运行
📢:ROM用于存储只读信息
📢:而闪存用于长期存储和可擦写的数据
接下来,我们思考一个问题,平时买手机的时候,经常会将内存作为一个很重要的参考指标,听它的名字就知道是一种存储器,那它到底属于哪种存储器呢?应当具备何种特性?

2.1硬件和逻辑两方面

1.2.1小节已经将内存的概念阐述清楚了,即:

内存主要是指随机存取存储器(RAM)。RAM作为计算机的主存储器,用于临时存储正在运行的程序、数据和临时结果。

从硬件和逻辑两方面对内存的概念进行阐述

1.硬件角度:内存并不单单是电脑上的一个配件(一般叫内存条)。其存在的硬件形式多种多样,根据不同的硬件实现原理可将内存分成SRAM和DRAM(DRAM又有好多代,譬如最早的SDRAM,后来的DDR1、DDR2·····、LPDDR)
在嵌入式产品中,并没有内存条。例如:单片机中,内存通常指的是芯片内部的存储器,

在这里插入图片描述

2.逻辑角度:内存(RAM)可以随机访问(随机访问的意思是只要给一个地址,就可以访问这个内存地址)、并且可以读写(当然了逻辑上也可以限制其为只读或者只写);内存在编程中天然是用来存放变量的(就是因为有了内存,所以C语言才能定义变量,C语言中的一个变量实际就对应内存中的一个单元)。

2.2内存的编程模型

内存的编程模型就是其逻辑的抽象化表现
逻辑上,内存实际上是由无限多个内存单元格组成的,每个单元格有一个固定的地址称为“内存地址”,这个内存地址和这个内存单元格唯一对应且永久绑定。
在这里插入图片描述
内存的访问方式
内存通过CPU的地址总线来寻址定位,然后通过CPU数据总线来读写。
CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是一定的,而内存是需要占用CPU的寻址空间的。
内存与CPU的这种总线式连接方式是一种直接连接,优点是效率高、访问快,缺点是资源有限,扩展性差。

2.3类比内存

可以将内存比作一栋大楼,内存单元格类似于大楼中的小房间,而每个内存单元格的地址就相当于每个小房间的房间号。内存中存储的内容(数据)可以看作是住在房间中的人。
虽然可以使用类比来帮助解释某些存储器的工作原理,但不同存储器之间的差异需要加以考虑。例如,内存的类比可以使用房间和房间号来解释,但它不适用于闪存中的数据写入和擦除操作。类似地,硬盘、SSD、光盘等存储器类型也有各自独特的特征,类比方法需要根据其特点进行调整。

2.4内存访问方式

内存通过CPU的地址总线来寻址定位,然后通过CPU数据总线来读写。
CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是一定的,而内存是需要占用CPU的寻址空间的。
内存与CPU的这种总线式连接方式是一种直接连接,优点是效率高、访问快,缺点是资源有限,扩展性差。

2.5内存管理方法

内存用来存储数据,数据在程序中表现为全局变量、局部变量等(在gcc中,其实常量也是存储在内存中的)(大部分单片机中,常量是存储在flash中的,也就是在代码段)。

如果内存管理不善,可能会造成程序运行消耗过多的内存,这样迟早内存都被程序消耗殆尽,当没有内存可用时程序就会崩溃。所以内存对程序来说是一种资源,所以管理内存对程序来说是一个重要技术和话题。

2.5.1操作系统管理

操作系统给提供了内存管理的一些接口,我们只需要用API即可管理内存。譬如在C语言中使用malloc、free这些接口来管理内存。

2.5.2裸机程序管理

而在没有操作系统(其实就是裸机程序)中,程序需要直接操作内存,编程者需要自己计算内存的使用和安排。如果编程者不小心把内存用错了,错误结果需要自己承担。

三、闪存

3.1 NOR FLASH和NAND FLASH

  • 存储结构:
    NOR Flash的存储单元是通过交织的MOSFET和存储电容器构成的,而NAND Flash的存储单元是通过多级交织的MOSFET构成的。这种不同的结构导致了它们在擦除和写入操作上的差异。
  • 访问方式:
    NOR Flash支持随机读取,可以直接通过地址来读取特定的字节或页。相比之下,NAND Flash不支持随机读取,只能顺序读取整个页。这意味着NOR Flash具有较低的读取延迟,并且可以像传统的存储器一样直接访问数据,而NAND Flash则需要按顺序读取数据。
  • 擦写操作:
    对于擦除操作,NOR Flash可以逐个擦除存储单元,通常以字节或页为单位。而NAND Flash以块为单位进行擦除,通常块的大小范围在512KB至2MB之间。由于NAND Flash的较大块擦除操作,导致在进行写入操作之前需要将整个块擦除,这会带来额外的时间和写入压力。
  • 存储密度和成本:
    由于NAND Flash的多级交织结构和按块擦写的特点,它具有更高的存储密度和较低的价格。相比之下,NOR Flash的交织结构和按页擦写的方式导致存储密度较低,价格相对更高。
  • 应用场景:
    由于其较低的读取延迟和随机读取的特性,NOR Flash通常用于存储程序代码、引导加载器和固件升级等需要快速读取和执行的应用中。而NAND Flash由于较高的存储密度和较快的写入速度,适用于存储大容量数据,如闪存存储卡、USB闪存驱动器、固态硬盘(SSD)和移动设备的主要存储器。
    1、NOR的读速度比NAND稍快一些;
    2、NAND的写入速度比NOR快很多;
    3、NAND的擦除速度远比NOR快;
    4、NAND的擦除单元更小,相应的擦除电路更加简单;
    5、NAND的实际应用方式要比NOR复杂的多;
    6、NOR可以直接使用,并在上面直接运行代码,而NAND需要I/O接口,因此使用时需要驱动;

3.2 2D FLASH和3D NAND FLASH

3.2.1 2D FLASH

概念:2D NAND Flash是最早的NAND Flash技术,也被称为Planar NAND Flash或Planar Cell NAND Flash。它采用了二维的布局结构,在一个平面上排列存储单元。每个存储单元通常由一个浮动栅和一个控制栅组成,可以存储多个位数据。
特性:2D NAND Flash的存储密度和性能较低,因为它的单层结构限制了每个存储单元的数目。随着存储需求的增加,2D NAND Flash逐渐无法满足高容量和高速度的要求。

3.2.2 3D NAND Flash

概念:3D NAND Flash是新一代的NAND Flash技术,也被称为Vertical NAND Flash或Vertical Cell NAND Flash。3D NAND Flash采用垂直堆叠的结构,使每个芯片内的存储单元层数大大增加。
特性:通过在垂直方向上堆叠多层存储单元,3D NAND Flash大大提高了存储密度,同时也提升了写入和擦除速度。3D NAND Flash技术能够实现更大容量和更高性能的存储器设备,如高容量的固态硬盘。

3.2.3 总结

2D NAND Flash和3D NAND Flash是两种不同的闪存存储器技术,用于制造NAND Flash芯片。2D NAND Flash是较旧的技术,采用二维平面布局结构,存储密度和性能有限。而3D NAND Flash是较新的技术,采用垂直堆叠结构,具有更高的存储密度和性能,能够满足日益增长的存储需求。

3.3 采用闪存颗粒的存储器

消费机存储器:SSD 主要作用是取代 PC/服务器上的 HDD 硬盘;
嵌入式存储:eMMC 和 UFS 都是面向移动端 Flash 的标准。主要应用于例如手机、手表、汽车等嵌入式终端设备。

疑问1:存储器和寄存器的关系?

寄存器是一种特殊的存储器,虽然同样具有存储数据的功能,特殊之处在于寄存器是一种位于CPU内部的高速存储器,用于暂存和执行指令所需要的数据。

总结

(1)存储器按照其特性进行分类,内存RAM用于临时存储数据和程序运行,ROM用于存储只读信息,而闪存用于长期存储和可擦写的数据。这些存储器在计算机系统中有着不同的用途和应用场景。
(2)闪存是一种兼具了RAM和ROM特点的存储器,在许多嵌入式系统和移动设备中发挥着关键的作用。
(3)RAM和ROM的区别:
ROM用来存储用户写好、编译好的程序,运行时CPU直接从ROM中读取一条一条的指令来运行,指令运行过程中产生的临时数据放在RAM中。因此,基本可以理解为:ROM是单片机用来放程序,RAM用来放数据。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/81367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信号量

信号量(semaphore)和信号只有一字之差,却是不同的概念,信号量与之前介绍的IPC不同,它是一个计数器,用于实现进程间的互斥于同步 本文参考: Linux 的信号量_linux 信号量_行孤、的博客-CSDN博客 …

linux RabbitMQ-3.8.5 安装

软件版本操作系统CentOS Linux release 7.9.2009erlangerlang-23.0.2-1.el7.x86_64rabbitMQrabbitmq-server-3.8.5-1.el7 RabbitMQ的安装首先需要安装Erlang,因为它是基于Erlang的VM运行的。 RabbitMQ安装需要依赖:socat和logrotate,logrotate操作系统已经存在了&…

【数据结构】吃透单链表!!!(详细解析~)

目录 前言:一.顺序表的缺陷 && 介绍链表1.顺序表的缺陷2.介绍链表(1)链表的概念(2)链表的结构(3)链表的功能 二.单链表的实现1.创建节点的结构2.头文件函数的声明3.函数的实现&#xff…

33.Netty源码之读写数据

highlight: arduino-light 写数据 写数据的三种方式 md 快递场景(包裹) Netty 写数据(数据) 揽收到仓库 write:写到一个 buffer 从仓库发货 flush: 把 buffer 里的数据发送出去 揽收到仓库并立马发货 (加急件) writeAndFlush:写到 buffer,立马…

搜狗拼音暂用了VSCode及微信小程序开发者工具快捷键Ctrl + Shit + K 搜狗拼音截图快捷键

修改搜狗拼音的快捷键 右键--更多设置--属性设置--按键--系统功能快捷键--系统功能快捷键设置--取消Ctrl Shit K的勾选--勾选截屏并设置为Ctrl Shit A 微信开发者工具设置快捷键 右键--Command Palette--删除行 微信开发者工具快捷键 删除行:Ctrl Shit K 或…

集群、负载均衡集群、高可用集群简介,LVS工作结构、工作模式、调度算法和haproxy/nginx模式拓扑介绍

一.集群的定义 1.定义 2.分类 (1)负载均衡集群(LBC/LB) (2)高可用集群(HAC) 二.使用集群的意义 1.高性价比和性能比 2.高可用性 3.可伸缩性强 4.持久和透明性高 三.常见的…

什么是单例模式

什么是单例模式 文章目录 什么是单例模式1. 单例(单个的实例)2. 单例模式应用实例3. 饿汉式 VS 懒汉式 1. 单例(单个的实例) 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一…

Windows系统修改域名DNS指向两种方式

一、直接打开对应文件进行修改 1、进入hosts文件目录:C:\Windows\System32\drivers\etc 2、右键打开HOSTS文件进行编辑,将需要对应的域名和IP地址进行配置 编写完成后 Ctrl s 进行保存即可。 二、使用DOS命令进行修改 1、按住键盘win键 r 打开命令…

基于MOEA/D求解电力系统中环境经济调度问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

操作符详解下(非常详细)

这里写目录标题 下标访问[ ]、函数调用()[ ]下标引用操作符函数调用操作符 操作符的属性:优先级、结合性优先级结合性 表达式求值整型提升整型提升的意义如何进行整体提升 算术转换问题表达式解析表达式1表达式2表达式3表达式4表达式5 总结 下标访问[ ]、函数调用()…

TiDB 多集群告警监控-中章-融合多集群 Grafana

作者: longzhuquan 原文来源: https://tidb.net/blog/ac730b0f 背景 随着公司XC改造步伐的前进,越来越多的业务选择 TiDB,由于各个业务之间需要物理隔离,避免不了的 TiDB 集群数量越来越多。虽然每套 TiDB 集群均有…

excel逻辑函数篇2

1、IF(logical_test,[value_if_true],[value_if_false]):判断是否满足某个条件,如果满足返回一个值,如果不满足则返回另一个值 if(条件,条件成立返回的值,条件不成立返回的值) 2、IFS(logical_test1,value_if_true1,…):检查是否…

【深度学习 | 数据可视化】 视觉展示分类边界: Perceptron模型可视化iris数据集的决策边界

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

基于Three.js的WebXR渲染入门

1、Three.js 渲染管线快速概览 我不会花太多时间讨论 Three.JS 渲染管道的工作原理,因为它在互联网上有详细记录(例如,此链接)。 我将在下图中列出基础知识,以便更容易理解各个部分的去向。 2、WebXR 设备 API 入门 在我们深入了解 WebXR API 本身之前,您应该知道 WebX…

AutoSAR系列讲解(深入篇)13.7-Mcal Adc配置(上)

目录 一、AdcGeneral 二、AdcSafety 三、AdcConfigSet 在之前的章节中,咱们在Port的配置中讲解了工具的初步使用与一些技巧;在Dio的配置中讲解了生成的代码的内容;在mcu的配置里讲解了外部一些 第三方简便工具的使用。这一次咱们配合ADC模块,就详细的讲讲每个配置项的作…

STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

只用STM32单片机SD卡耳机插座,实现播放MP3播放器! 看过很多STM32软解MP3的方案,即不通过类似VS1053之类的解码器芯片,直接用STM32和软件库解码MP3文件,通常使用了labmad或者Helix解码库实现,Helix相对labm…

Kubernetes网络模型

Kubernetes 用来在集群上运行分布式系统。分布式系统的本质使得网络组件在 Kubernetes 中是至关重要也不可或缺的。理解 Kubernetes 的网络模型可以帮助你更好的在 Kubernetes 上运行、监控、诊断你的应用程序。 网络是一个很宽泛的领域,其中有许多成熟的技术。对于…

学习总结(TAT)

项目写完了,来写一个总的总结啦: 1.后期错误 Connection,Statement,Prestatement,ResultSet都要记得关闭接口;(一定要按顺序关闭); 在写群聊的时候写数据库名的时候不要…

Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限

文章目录 背景环境代码实现0. 项目结构图(供参考)1. 数据库中的表(供参考)2. 依赖(pom.xml)3. 配置文件(application.yml)4. 配置文件(application-dev.yml)5…

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法,这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法:基于GitHub上ShiftMediaProject/FFmpeg项目,下面对编译过程进行说明…