寄存器、缓存、内存(虚拟、物理地址)、DDR、RAM的关系

寄存器、缓存、内存、DDR、RAM的关系

  • 1. 主要概念
  • 内部存储器:
    • 2.1 寄存器,register
    • 2.2 主存储器,内存,memory
    • 2.3 缓存,高速缓冲存储器,cache
  • 外部存储器
    • 2.4 快闪存储器,闪存,flash Memory
    • 2.5 硬盘存储器
  • 2. 一些概念上的区分
    • 2.1 缓存和内存
    • 2.2 内存和 CPU
    • 2.3 SRAM 和 DRAM
    • 2.4 DDR 和 SDR
    • 2.5 Cache Miss
    • 2.6 多级缓存层次结构
    • 2.7 虚拟地址和物理地址
      • 2.7.1 定义
      • 2.7.2 引入原因
      • 2.7.3 工作机制
    • 2.8 数据从内存传输到寄存器的基本过程

Reference:

  1. 计算机的内部存储(内存、缓存、闪存…)

在这里插入图片描述

1. 主要概念

内部存储器:

2.1 寄存器,register

寄存器距离CPU最近、访问数据速度最快存储介质,用来做一些最基本的指令和地址存储。寄存器内存中获取数据,然后在CPU中进行处理,处理完后又将数据暂时存放在寄存器中,再从寄存器传输到内存寄存器不需要很大容量,但是必须有匹配CPU的数据传输速度,所以它被集成在了CPU内部节省数据传输的时间,是CPU的一部分。寄存器 具有高性能、高耗电的特点,所以造价成本较高

2.2 主存储器,内存,memory

主存储器 就是我们常说的(狭义的)内存,使用的是 DRAM, Dynamic Random-Access Memory

DRAM 之所以叫动态,是因为将数据写入 DRAM 后,一段时间过后数据会丢失,需要一个额外的电路不断对其进行刷新操作才行。因为DRAM储存数据利用的是电容中是否有电荷,有代表1,无代表0。但是电容会放电或吸电,刷新操作会对其进行检查。如果电量大于满电量的1/2,则将电充满,否则将电全部放掉。

内存有以下特点:

  1. 高速访问:内存的访问速度非常快,比硬盘等外部存储设备快得多,因此数据处理效率高
  2. 易失性:内存是易失性存储器,这意味着当电源关闭时,内存中的数据会丢失。
  3. 大容量:相对于缓存,内存的容量较大,通常以GB(千兆字节)为单位。

2.3 缓存,高速缓冲存储器,cache

如果程序要获取的数据刚好在寄存器中,可以直接获得该数据。如果在内存中,则需50-200个周期。可见速度差别非常大。如果每次寄存器都从内存中去读取数据,则耗费时间将会相当多。为了弥补这一速度差异,工程师们设计了缓存这一工作方式。CPU频繁访问的数据被存储在了缓存中。CPU要获取数据时,首先访问缓存,如果命中则得到数据,如果没有命中(cache miss)则再去访问内存。至于缓存怎么判断哪些数据是会被频繁访问的,这就涉及到相关的算法问题了。

缓存使用的是比一般的RAM(Random Access Memory)存取速度更快的SRAM(Static Random Access Memory)

RAM一般分为静态RAM(static RAM, SRAM)动态RAM(dynamic RAM, DRAM)SRAM 的速度虽然比 DRAM 快,但成本高得多,所以不可能将 DRAM 全部替换成 SRAM。CPU访问数据先是在一级缓存(L1 Cache)中找,找不到再到二级缓存(L2 Cache)中找,再没有就去内存中找。

缓存有以下特点:

  1. 更高速访问:缓存的访问速度比内存更快,因为它通常使用更快的存储技术(如SRAM)。
  2. 小容量:缓存的容量通常较小,常见的以KB或MB为单位。
  3. 多级结构:现代计算机系统中,缓存通常有多级结构,如L1、L2和L3缓存。L1缓存是最快的,位于处理器核心内部;L2缓存稍慢,容量更大;L3缓存更慢,但容量更大,通常在整个处理器芯片上共享。

内存缓存广义上整体被称为内(部)存储器(简称内存)或主存储器,而其他外部不依赖电存储数据的设备(如磁盘、光盘、闪存等)统称外存储器辅助存储器内存CPU外部存储设备之间的桥梁,用来存放那些将要被CPU处理的数据,以及与外部设备交换数据

外部存储器

2.4 快闪存储器,闪存,flash Memory

一种外部存储器,多用于照相机、音乐播放器、手机等设备,如SD卡。现在的游戏卡一般都是闪存。U盘用的也是快闪技术。另外,快闪存储器也在作为磁盘存储器的替代品越来越多地被使用,即所谓的 固态硬盘(ssd,solid state disk)。不同于内存,它在电源关闭时(或故障时)数据可保存下来。

2.5 硬盘存储器

磁盘存储器就是 磁盘硬盘机械硬盘。是长期联机存储数据的主要介质。为了能够访问数据,系统必须将数据从 磁盘 移到 内存。完成处理后,数据要写回 磁盘。由于访问 磁盘 非常耗时,而且频繁操作 磁盘 也会造成 磁盘 损伤,所以有了”磁盘缓存“这一设计。

移动硬盘机械硬盘还是固态硬盘?都有。固态的移动硬盘一般较贵,容量较小。

2. 一些概念上的区分

2.1 缓存和内存

缓存是CPU的一部分,它存在于CPU中。内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。

注意:

  1. 因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
  2. 因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。

2.2 内存和 CPU

CPU 是负责运算和处理的,内存 是交换数据的
通常 CPU 找数据或指令的顺序是:先到 一级缓存 中找,找不到再到 二级缓存 中找,如果还找不到就只有到 内存 中找了。一级缓存二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。

2.3 SRAM 和 DRAM

RAM(Random Access Memory) 分为两种:

  1. 静态RAM,SRAM(Static Random-Access Memory)
    • 优点:访问速度快、功耗低、数据稳定(只要有店员,数据就不会丢失)
    • 缺点:存储密度低(集成度低,存储相同的数据,SRAM 的体积是 DRAM 6 6 6 倍)、成本高(同容量的 SRAMDRAM 4 4 4 倍)
    • 用途:主要用于 CPU 缓存,也可用在某些嵌入式系统中作为主内存
  2. 动态RAM,DRAM(Dynamic Random-Access Memory)
    • 优点:存储密度高、成本低
    • 缺点:访问速度较慢,需要周期性刷新以保持数据。
    • 用途:主要用作计算机的主内存。

2.4 DDR 和 SDR

DDR(Double Data Rate) 是指 DRAM 的一种改进技术,能够在一个时钟周期内传输两次数据(在时钟信号的上升沿和下降沿各一次)。这使得 DDR 内存比传统的 单倍数据率(SDR,Single Data Rate)内存速度更快。

2.5 Cache Miss

cache miss, 缓存未命中 指的是当一个程序或系统试图从缓存中读取数据,但所需的数据并不在缓存中,从而需要从较慢的主存储器(如主内存或磁盘)中获取数据的情况。缓存未命中会导致性能下降,因为访问主存储器的速度通常比访问缓存的速度慢得多。

缓存未命中通常可以分为以下几类:

  1. 冷缓存未命中(Cold Miss 或 Compulsory Miss):这是指数据首次被访问时,因为缓存中还没有任何数据,必然会发生缓存未命中。
  2. 冲突未命中(Conflict Miss):即使缓存中有足够的空间来存储数据,但由于缓存映射策略(例如直接映射缓存)导致多个数据块被映射到同一个缓存位置,从而导致未命中。
  3. 容量未命中(Capacity Miss):当缓存大小不足以容纳程序工作集中所有需要的数据时,即使缓存已经满了,仍需要移除一些数据以腾出空间给新的数据,从而导致未命中。

缓存命中和未命中对系统性能有显著影响,设计良好的缓存系统可以通过减少未命中率来显著提升系统性能。这通常通过增加缓存大小、优化缓存替换策略(如LRU、FIFO等)、以及改进缓存映射策略来实现。

2.6 多级缓存层次结构

  1. L1缓存(一级缓存)
    • 位置:通常集成在 CPU 核心内部,每个核心有自己的独立L1缓存
    • 速度:最快的缓存,具有最低的延迟,但容量相对较小(通常在几KB到几十KB之间)。
    • 分区:通常分为两个部分:L1指令缓存(L1 Instruction Cache)L1数据缓存(L1 Data Cache),分别用于存储指令和数据。
    • 功能:主要功能是存储频繁使用的数据和指令,以便 CPU 能够快速访问。
  2. L2缓存(二级缓存)
    • 位置:集成在 CPU 内部,但可以与多个核心共享或每个核心有自己的L2缓存。
    • 速度:比L1缓存稍慢,但比RAM快得多。容量比L1缓存大(通常在几百KB到几MB之间)。
    • 功能:用于存储L1缓存未命中的数据和指令,提供次一级的高速数据访问。
  3. L3缓存(三级缓存)
    • 位置:通常在多核 CPU 中共享,所有核心都可以访问同一个L3缓存。
    • 速度:比L2缓存慢,但仍比RAM快。容量较大(通常在几MB到几十MB之间)。
    • 功能:用于存储L2缓存未命中的数据和指令,进一步减轻RAM的访问负担。

2.7 虚拟地址和物理地址

2.7.1 定义

  1. 虚拟地址(Virtual Address)程序使用的地址
  2. 物理地址(Physical Address)在内存中实际存储数据的地址

2.7.2 引入原因

虚拟地址(Virtual Address)物理地址(Physical Address) 的存在是为了提高系统的效率和安全性。具体来说,虚拟地址和物理地址的引入有以下几个主要原因:

  1. 内存保护

    • 用户程序隔离:虚拟地址 使得每个进程都拥有独立的地址空间,防止一个进程无意或恶意地访问另一个进程的内存,从而增强了系统的安全性和稳定性
    • 内核保护:操作系统内核和用户进程运行在不同的地址空间中,用户进程无法直接访问内核内存,这样可以防止用户程序破坏系统的正常运行。
  2. 地址空间扩展

    • 虚拟地址 空间允许程序使用比实际 物理内存 更大的地址空间。通过 虚拟内存 技术,操作系统可以将不常用的数据暂时存放到硬盘上,从而腾出物理内存供活跃的程序使用。这使得系统能够运行比物理内存更多和更大的应用程序
  3. 内存管理的简化

    • 内存分配虚拟地址 空间使得内存分配和回收变得更加灵活。操作系统可以使用 分页(Paging)分段(Segmentation) 技术将虚拟内存映射到物理内存,从而简化内存管理。
    • 内存共享虚拟内存 允许多个进程共享同一段 物理内存。例如,多个进程可以共享同一个库文件,而不需要为每个进程分别分配一份 物理内存 副本。
  4. 程序的可移植性

    • 虚拟地址使得程序不需要关心实际的物理内存布局。程序可以使用统一的虚拟地址进行编译和运行,无需在不同机器上进行修改。这增强了程序的可移植性。
  5. 地址空间的抽象

    • 虚拟地址提供了一个抽象层,屏蔽了底层物理内存的细节,使得程序开发和系统管理更加简便。程序员可以在一个统一的、连续的地址空间中工作,而不必关心物理内存的实际分布。

2.7.3 工作机制

操作系统和硬件(如 内存管理单元,MMU,Memory Management Unit)协同工作,将虚拟地址映射到物理地址。常见的机制包括:

  • 分页:将虚拟地址空间划分为固定大小页(Page),并将这些页映射到物理内存中的 页框(Page Frame)
  • 分段:将虚拟地址空间划分为不同大小段(Segment),每个段独立映射到物理内存

这些机制使得操作系统可以灵活地管理内存,提高内存使用效率,同时确保系统的安全和稳定。

2.8 数据从内存传输到寄存器的基本过程

  1. CPU请求数据
    当CPU需要执行一条指令(例如从内存读取数据),它会通过 地址总线(用于传输内存地址) 将所需的数据地址发送到 内存控制器,比如 DDRC, DDR Controller

  2. 内存控制器 接收到地址信息后,负责从 内存 中读取相应的数据。这通常涉及以下几个步骤:

    • 地址译码内存控制器 会对接收到的地址进行译码,以确定需要访问的具体 内存单元
    • 数据读取:一旦找到相应的 内存单元内存控制器 会将数据从内存中读取出来。
  3. 数据传输到CPU缓存(可选)
    在现代计算机系统中,内存和CPU之间通常有一层或多层高速缓存(Cache)。从内存读取的数据首先会被传输到缓存中。缓存有多个级别(L1、L2、L3等),每一级缓存的访问速度和容量不同。缓存的目的是加速数据访问。

  4. 数据传输到寄存器
    最后,缓存 中的数据通过数据总线(用于传输实际的数据内容)传输到CPU中的 寄存器 中。寄存器 是CPU中最小但最快的存储单元,CPU可以直接对 寄存器 中的数据进行操作


上面描述的详细步骤:

  1. 指令取出(Fetch)
    • CPU执行指令周期的第一步是从内存中取出指令。程序计数器(PC)中的地址指向当前指令所在的内存地址。
    • CPU通过地址总线将PC中的地址发送给内存控制器。
  2. 指令解码(Decode)
    • 取回的指令被解码,以确定需要执行的操作和操作数的位置。
    • 如果指令需要从内存读取数据(如加载指令),指令解码单元将产生相应的内存地址。
  3. 执行(Execute)
    • CPU将解码得到的内存地址发送到内存控制器,通过地址总线传递。
    • 内存控制器将数据从指定的内存地址读取出来。
  4. 数据传输
    • 读取的数据首先可能进入缓存(如果缓存命中)。
    • 最终,数据通过数据总线传输到CPU中的特定寄存器。

示例:
举个具体的例子,假设 CPU 执行一条 MOV A, [B] 指令,即将内存地址B处的数据移动到寄存器A中:

  1. CPU将B的值通过地址总线发送到内存控制器
  2. 内存控制器 读取地址B处的数据,返回给CPU。
  3. 数据先经过 缓存(如果命中缓存)。
  4. 最终,数据通过数据总线传输到寄存器A。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 使用kotlin Retrofit2 + Dagger2完成网络请求跟依赖注入组合使用

文章目录 (一)引入依赖(二)基本概念Dagger中的基本概念:Retrofit介绍 (三)Dagger2 Module 和 Provides 和 Component Inject(四)Retrofit2 创建数据类Bean跟Service服务&…

wpf listbox实现选中动画

效果如下&#xff1a; 参考&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers/blob/master/src/WPFDevelopers.Samples.Shared/Controls/NavigateMenu/NavigateMenu.xaml 实现上述效果的前台代码&#xff1a; <Windowx:Class"ListBox.MainWindow"…

用户管理的小demo--查询

目录 1、先在数据库中 添加数据 2、servlet层 2.1 在servlet中 找到上一模块“LoginServlet.java”&#xff0c;在里面添加代码 2.2 在servlet层 new SelectUserServlet类 2.3 在web.xml 中&#xff0c;新增配置 3、service 层 4、 dao层 4.1 UserDao 4.2 UserDaoImpl…

ldap协议(常用于统一身份认证)与dict协议(在线词典)

文章目录 LDAPDICT LDAP LDAP&#xff08;Light Directory Access Portocol&#xff09;&#xff0c;轻量目录访问协议。 目录是一个为查询、浏览和搜索而优化的数据库&#xff0c;它成树状结构组织数据&#xff0c;类似文件目录一样。 目录数据库和关系数据库不同&#xff0c…

AI早班车6.3

1.蚂蚁技术日&#xff1a;支付宝三大「AI 管家」亮相。 2.百度赵世奇&#xff1a;百度搜索&#xff0b;文心智能体平台&#xff0c;助力智能体人人可用。 3.腾讯&#xff1a;发布大模型App腾讯元宝。 4.AFAC2024金融智能创新大赛启动&#xff0c;让高质量金融服务人人可用 …

Flutter开发效率提升1000%,Flutter Quick教程之定义Api(二)

如何定义一个Api Request。其他的地方依照常规填写就行&#xff0c;讲一讲需要注意的地方。 1,Headers 当tab是headers的时候&#xff0c;点击下面的加号按钮&#xff0c;会弹出 输入框下面有提示输入Headers的规则&#xff0c;即以分号隔开。比如 content-type:application…

超大功率光伏并网逆变器学习(三相) 一

1.超大功率用的IGBT开关频率通常很低,比如6KHz 2.线电压和相电压的关系 相电压 A AB线电压-CA线电压 相电压 B BC线电压-AB线电压 相电压 C CA线电压-BC线电压 3.坐标变换 ABC三相信号通过Clark坐标变换得到αβ两相静止信号,其中α与A相重合,β与α…

文件访问被拒绝,原来可以这样处理!

在使用电脑的过程中&#xff0c;我们有时会遇到无法访问某些文件的情况&#xff0c;通常会看到“文件访问被拒绝”的错误提示。这种情况可能是由于文件权限设置问题、文件正在被其他程序使用、系统错误或者病毒感染等原因引起的。本文将介绍三种解决文件访问被拒绝问题的方法&a…

深度学习创新点不大但有效果,可以发论文吗?

深度学习中创新点比较小&#xff0c;但有效果&#xff0c;可以发论文吗&#xff1f;当然可以发&#xff0c;但如果想让编辑和审稿人眼前一亮&#xff0c;投中更高区位的论文&#xff0c;写作永远都是重要的。 那么怎样“讲故事”才能让论文更有吸引力&#xff1f;我总结了三点…

JVM学习-字节码指令集(三)

代码下载 操作数栈管理指令 如同操作一个普通数据结构中的堆栈那样&#xff0c;JVM提供的操作数栈管理指令&#xff0c;可以用于直接操作数栈的指令 将一个或两个元素从栈顶弹出&#xff0c;并且直接废弃&#xff1a;pop,pop2复制栈顶一个或两个数值并将复制值成双份的复制值…

半导体光子电学期末笔记1: 电磁光学基本理论

Chapter 2: 电磁光学基本理论 电磁光学理论概述 真空中麦克斯韦方程组[p9] 在自由空间中&#xff0c;麦克斯韦方程组可以写成如下形式&#xff1a; { ∇ H ϵ 0 ∂ E ∂ t (1) ∇ E − μ 0 ∂ H ∂ t (2) ∇ ⋅ E 0 (3) ∇ ⋅ H 0 (4) \begin{cases} \nabla \times \…

Dubbo调用流程与启动流程

Dubbo调用流程与启动流程技术文档 一、概述 Dubbo是一个高性能、轻量级的开源服务框架&#xff0c;用于开发高性能微服务应用。它主要提供了三大核心功能&#xff1a;服务治理、远程调用和集群容错。本文档将详细介绍Dubbo的调用流程和启动流程。 二、Dubbo调用流程 2.1 服务…

SD NAND、SD卡和NOR Flash的区别

存储技术在现代电子设备中的应用越来越广泛&#xff0c;三种常见的存储解决方案是SD卡、SD NAND和NOR Flash。了解它们之间的区别&#xff0c;有助于选择合适的存储介质以满足特定的应用需求。 SD卡 1.接口和传输速度:SD卡&#xff08;Secure Digital Card&#xff09;是一种广…

迅狐短剧小程序源码:打造个性化的追剧体验

随着移动互联网的普及&#xff0c;短剧小程序源码的开发成为了影视爱好者的新宠。它不仅为用户提供了便捷的追剧体验&#xff0c;还通过推荐系统、观看历史、个性化喜好等特色功能&#xff0c;满足了用户的多样化需求。本文将深入探讨短剧小程序源码的特点、优势以及如何实现多…

fly-barrage 前端弹幕库(6):实现人像免遮挡

项目官网地址&#xff1a;https://fly-barrage.netlify.app/&#xff1b; &#x1f451;&#x1f40b;&#x1f389;如果感觉项目还不错的话&#xff0c;还请点下 star &#x1f31f;&#x1f31f;&#x1f31f;。 Gitee&#xff1a;https://gitee.com/fei_fei27/fly-barrage&a…

(文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略

参考文献&#xff1a; [1]潘虹锦,高红均,杨艳红,等.基于主从博弈的售电商多元零售套餐设计与多级市场购电策略[J].中国电机工程学报,2022,42(13):4785-4800. 1.摘要 随着电力市场改革的发展&#xff0c;如何制定吸引用户选择的多类型零售套餐成为提升售电商利润的研究重点。为…

【TB作品】MSP430F5529,单片机,打地鼠游戏

功能 针对这块开发板做了一个打地鼠游戏&#xff1a; 1 给单片机上电后&#xff0c;初始化显示界面&#xff0c;显示出分数和等级。 2 游戏是一轮一轮进行的&#xff0c;每一轮会以50%几率点亮板子上的五个小灯&#xff0c;表示地鼠露头需要打了。 3 一轮游戏开始后&#xff…

最难沟通的,是那些一脸正确的人!寻找那上等的螃蟹!——早读(逆天打工人爬取热门微信文章解读)

端午节的代表&#xff1a;粽子 引言Python 代码第一篇 最难沟通的&#xff0c;是那些一脸正确的人第二篇结尾 路漫漫其修远兮&#xff0c;吾将上下而求索 ——屈原 引言 端午节 马上就要到了 大家有吃粽子的习俗吗&#xff1f; 我们潮汕那边就有 不过基本都是肉粽 去年还是前…

【Qt知识】Qt窗口坐标系

Qt的窗口坐标体系遵循标准的计算机图形坐标系统规则 Qt窗口坐标体系特点 坐标原点&#xff1a;窗口坐标体系的原点位于窗口的左上角&#xff0c;即坐标(0, 0)位置。 轴方向&#xff1a; X轴&#xff1a;向右为正方向&#xff0c;随着X坐标值的增加&#xff0c;元素在窗口中从…

Maven项目通过maven central 发布到中央仓库 https://repo.maven.apache.org/ 手把手教学 最新教学

一、注册maven central账号 ​ https://central.sonatype.com/publishing/namespaces 我这里直接使用github账号登录 &#xff0c;可以自己注册或者直接使用google账号或者github账号登录 这里github账号登录之后 应该只出现io.github 下面的io.gitee我也验证过 所以这里出…