内存储器之只读存储器(ROM),随机存取存储器(RAM)和Cache详解

本文主要是介绍内存储器之只读存储器(ROM),随机存取存储器(RAM)和Cache详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内存储器

计算机中的存储器分为内存和外存两大类。

  • 内存的存取速度快而容量相对较小,它与CPU直接相连,用来存放等待CPU运行的程序和处理的数据;
  • 外存的速度较慢而容量相对很大,它与CPU并不直接连接,用于永久性地存放计算机中几乎所有的信息。

寄存器

CPU内部的存储器就叫做寄存器,运算器中的通用寄存器、专用寄存器;控制器中的指令寄存器等都属于寄存器。寄存器的存取速度最快(和CPU的速度一样快),价格最高,容量最小。一般有十几个甚至上百个寄存器。

内存储器由称为存储器芯片的半导体集成电路组成。按照是否能随机地进行读写,半导体存储器芯片分为只读存储器(Read Only Memory,ROM)随机存取存储器(Random Access Memory,RAM)两大类

只读存储器(ROM)

ROM是英文Read Only Memory的缩写,其中文名称为只读存储器。

ROM只读存储器里的信息只能被反复地读出而不能随便写入,当断开电源后,ROM中的信息不会丢失。在ROM中一般存放重要的、经常使用的程序或其他信息。

按照ROM的内容是否能被改写,ROM可分为以下几类:

  • Mask ROM(掩膜ROM):存储的数据由工厂在生产过程中一次形成,此后无法进行修改
  • PROM(Programmable ROM,可编程只读存储器):这种ROM允许用户或制造商在产品制造后写入数据一次。这些数据写入后即无法更改,但可以读取。
  • EPROM(Erasable Programmable ROM,可擦除可编程只读存储器):这种ROM在写入数据后可以被擦除,然后重新编程。因此,它可以被多次重新编程,但每次都需要通过紫外线照射来擦除数据。
  • Flash ROM(快擦型存储器,简称闪存):它是一种新型的非易失性存储器,在低电压下,存储的信息可读不可写;而在较高电压下,所存储的信息可以更改和删除。在PC中用于存储BIOS程序,还可在数码相机和U盘中使用

随机存取存储器(RAM)

RAM是英文Random Access Memory的缩写,其中文名称为随机存取存储器。

RAM存储器可随机地向指定的存储单元读写信息,但计算机断电后,这种存储器中的信息将完全丢失,这一特点被称为数据的易失性。

RAM的优点是存取速度快、读写方便,缺点是数据不能长久保存、断电自行消失

根据工作原理和结构的不同可分为SRAM(静态随机存取存储器)和DRAM(动态随机存取存储器)

SRAM

SRAM(静态随机存取存储器)是一种利用双稳态触发器来存储数据的存储器。每个存储单元由6个晶体管组成,具有高速、稳定、无需刷新等优点。由于其结构复杂,SRAM的集成度较低,功耗也相对较大,通常用于高速缓存存储器或CPU的一级、二级缓存。

SRAM芯片用于构造Cache,它的速度几乎与CPU一样快。计算机在执行程序时,CPU将预测可能会使用那些数据和指令,并将这些数据和指令预先送入Cache。当CPU需要从内存读取数据或指令时,先检查Cache中是否存有,若有,就直接从Cache中读取,而不用访问主存;若没有,CPU再直接访问主存。所以,Cache中的数据只是主存很小一部分内容的副本。与DRAM相比,SRAM电路较复杂,集成度低、功耗较大、制造成本高、价格贵、速度快

说明:Cache用于匹配CPU和内存两者的工作速度,发挥CPU的高速性能

DRAM

DRAM(动态随机存取存储器)利用电容存储电荷的原理保存信息,电路简单,集成度高。DRAM的基本存储单元是一个电容和一个晶体管,通过电容存储电荷的数量来表示存储数据的状态。由于任何电容都存在漏电,因此需要定期刷新电路来补充丢失的电荷,以保持数据稳定。DRAM常用于大容量存储器,如计算机的主内存、手机的RAM等。

与SRAM相比,DRAM电路相对简单,集成度高,功耗较低,制造成本较低,速度较慢等特点

主存储器主要是由DRAM芯片组成的。它含有大量的存储单元,每个存储单元可以存放1个字节(8个二进制位)。存储器的存储容量就是指它所包含的存储单元的总和。单位是MB(1MB=220字节)或GB(1GB=230字节)。为了区分不同的存储单元,必须给每一个存储单元分配一个编号(这些编号从0开始),被称为存储单元地址。CPU按地址访问存储单元。每个存储单元都有一个地址,CPU就按地址对存储器进行访问。

存储器的存取时间是指从CPU给出存储器地址开始到存储器读出数据并送到CPU(或者是把CPU数据写入存储器)所需要的时间。主存储器存取时间的单位是纳秒(ns,1 ns=10-9s)

随着CPU前端总线工作效率的进一步提高,近几年来,大多数的PC已经改用DDR SDRAM(双倍数据速率同步DRAM)和性能上更优越的DDR2 SDRAM、DDR3 SDRAM。

主存储器在物理结构上由若干内存条组成。内存条必须插入主板中相应的内存条插槽中才能使用。DDR2和DDR3均采用双列直插式内存条(DIMM内存条)。PC主板中一般都各配有2个或4个DIMM插槽

半导体存取器分类

请添加图片描述

Cache

Cache内存是一种高速缓冲存储器,其原始意义是指存取速度比一般随机存取存储器(RAM)来得快的一种RAM。它通常使用昂贵但较快速的SRAM技术,并且是存在于主存与CPU之间的一级存储器。高速缓冲存储器的容量较小,但速度比主存高得多,接近于CPU的速度。在计算机存储系统的层次结构中,高速缓冲存储器和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的,其最重要的技术指标是命中率。为了提高Cache的命中率,Cache分为L1Cache(一级高速缓冲存储器)、L2Cache(二级高速缓冲存储器)。

高速缓冲存储器作为CPU和主存之间的桥梁,可以提高整个系统的性能。由于寄存器和DDR之间速度差异太大,DDR的速度远不能满足寄存器的需要,因此需要使用高速缓冲存储器来缓存指令和数据,以减少对主存的访问,提高系统的整体速度。

根据cache中存储的是指令还是数据,可以分为I-cache和D-cache。I-cache用于缓存指令,D-cache用于缓存数据。CPU的寄存器是L1的高速缓存,L1是L2的高速缓存,以此类推。高速缓存存储器的级别越高,容量越小,速度越快。

现在一般在CPU中都固化了Cache,另外硬盘也有自己的Cache,用于数据交换的进行

计算机存储器的层次结构

请添加图片描述

操作数是指等待CPU处理的数据,也是指等待处理的数据所在的内存地址。操作数包括标识符和标识参数,标识符分为主标识符和辅助标识符。

CPU访问程序和数据时,采取如下流程

  1. 寄存器访问:CPU首先查看需要的操作数是否已经在寄存器中。这是最快的访问方式,因为寄存器是与CPU核心紧密耦合的,可以以极快的速度访问。
  2. Cache访问:如果操作数不在寄存器中,CPU会查看高速缓存(Cache)中是否有该数据,如在,取自Cache。Cache是主存和CPU之间的一个高速存储层次,用于存储经常访问的数据,以减少对主存的访问。
  3. 主存访问:如果操作数不在Cache中,CPU将直接访问主存储器(RAM),如在RAM中,则取自RAM。主存是计算机系统中的一个主要存储区域,其速度比硬盘快,但比Cache慢。
  4. 硬盘访问:如果操作数不在主存中,CPU会发出磁盘I/O请求。这意味着数据可能位于硬盘上。硬盘是计算机中的一种低速存储设备,但可以存储大量的数据。从硬盘读取数据通常是一个相对较慢的过程。
  5. 数据传输:一旦确定了数据的来源(例如硬盘),系统将开始数据传输过程。数据首先从硬盘传输到RAM,然后可能从RAM传输到Cache,最后可能从Cache传输到寄存器。顺序是硬盘——>RAM——>Cache——>寄存器
  6. 预取和缓存管理:许多现代CPU还使用所谓的预取技术,这涉及预测未来的数据和指令访问模式,并将这些数据提前加载到Cache或更高级别的存储中。此外,CPU还有专门的缓存管理单元(CMU),负责维护和更新Cache的内容。
  7. 内存管理单元(MMU):在某些情况下,特别是涉及虚拟内存时,CPU还会与内存管理单元(MMU)交互。MMU负责将虚拟地址转换为物理地址,并管理页表和其他内存相关的功能。

这篇关于内存储器之只读存储器(ROM),随机存取存储器(RAM)和Cache详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657240

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ