寄存器、缓存、内存(虚拟、物理地址)、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。

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

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

相关文章

快手游戏《无尽梦回》官宣开测:热血动作肉鸽来袭

易采游戏网最新消息:5月30日11:00,快手自研的梦境主题动作冒险手游《无尽梦回》正式宣布开启测试。此次测试名为“肉鸽进化实验”,旨在测试多角色技能交会的玩法。游戏将开放32人同局竞技,让玩家在激烈的战斗中角逐出唯一的胜利者…

Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)

前言 本来是想着写多表关系的,不过写了一半发现重复的部分太多了,想了想与其做一些重复性工作,不如把一些当时觉得抽象的东西记录一下,就当用一篇杂记完成专栏的最后一篇文章吧。 预加载 简单示例 预加载主要用于在多表关系中…

【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

数据标准的制定落地

目录 什么是数据标准 基本定义 目的 数据标准体系分类 从内容层面分类 从管理视角分类 从面向的对象分类 从数据结构的角度分类 数据标准价值 业务价值 技术价值 管理价值 数据标准和数据治理的关系 数据标准在数据治理各项任务中的作用 数据标准与主数据 数据…

【Linux】中常见的重要指令(下)以及重要的几个热键

目录 一、时间相关的指令date 1.时间戳 二、Cal指令 三、find指令 1.whereis 2.which 四、grep指令 五、zip和unzip指令 六、tar指令 七、bc指令 八、重要的几个热键[Tab],[ctrl]-c,[ctrl]-d 一、时间相关的指令date date 指定格式显示时间&…

夜天之书 #98 Rust 程序库生态合作的例子

近期主要时间都在适应产品市场(Product Marketing)的新角色,不少想法还在酝酿和斟酌当中,于是文章输出没有太多时间来推敲和选题,只能保持每月发布相关的进展或一些零碎的思考。或许我可以恢复最早的模式,多…

node.js点餐系统app-计算机毕业设计源码84406

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

脚本实现登陆滑块

脚本实现登陆滑块 仅供学习参考,简单操作 你知道吗,滑动验证码居然是为了验证人类比机器人蠢而设计的。 你以为自己快速、准确地滑动拼图、对齐图案,才被允许通过,系统还说你超越了99%的用户,夸你“比闪电还快”&am…

算法-随机快排及荷兰国旗优化

文章目录 算法介绍 :1. 随机快排解析2. 荷兰国旗问题3. 随机快排优化4. 总结随机快排 算法介绍 : 随机快速排序和传统的快速排序的逻辑本质是一致的,都是找到一个值作为划分的中间位置,左边数值均小于该数值,右边数值均大于该数值,但是与传统的快排又不一致的是,我们的这个位置…

Chrome DevTools

Console 面板 此章节请打开 justwe7.github.io/devtools/console/console.html 一起食用 一方面用来记录页面在执行过程中的信息(一般通过各种 console 语句来实现),另一方面用来当做 shell 窗口来执行脚本以及与页面文档、DevTools 等进行交…

动态SQL IF语句

IF语句学习 第一种写法(标准) 我们先来看以下标准写法: select * from .. <where> <if test""> and ....... <if test""> and ....... <where> 我们用了一个where标签 , 内嵌if语句 第二种写法: 这是第二种写法:不用where标…

综合交易模型--雪球跟单参数说明支持qmt,同花顺

经过测试&#xff0c;目前完成了这个策略。支持多策略&#xff0c;支持全市场&#xff0c;包括股票&#xff0c;etf,可转债 全部的参数 { "雪球跟单":"跟单原理", "原理":"比重变大默认买入&#xff0c;变小默认卖出&#xff0c;持股…

【SpringBoot】SpringBoot项目关于默认port以及context path的配置 application.yml

application.yml server port [端口号] 配置/修改默认端口号 # server configurationserver:port: 8080context path [虚拟目录] 配置/修改默认虚拟目录 # server configurationserver:servlet:context-path: /spring configuration # spring configuration spring:applica…

mysql DDL——增删改

简略版&#xff1a; 详细版&#xff1a; DDL&#xff1a;对库中表的的记录进行增删改操作&#xff1b; 分别对应&#xff1a;添加&#xff08;insert&#xff09;&#xff0c;修改(update)&#xff0c;删除(delete); 一&#xff1a;添加数据 1. 对全部字段添加数据&#x…

【一刷《剑指Offer》】面试题 28:字符串的排列

牛客对应题目链接&#xff1a;字符串的排列_牛客题霸_牛客网 (nowcoder.com) 力扣对应题目链接&#xff1a;LCR 157. 套餐内商品的排列顺序 - 力扣&#xff08;LeetCode&#xff09; 核心考点 &#xff1a;全排列问题&#xff0c; DFS。 一、《剑指Offer》对应内容 二、分析题…

关于留痕的使用常见的问题

1. 登录微信 登录要导出数据的微信&#xff08;不支持微信多开&#xff0c;不支持部分老版本微信&#xff09; 相关信息 想把手机端的微信聊天记录转移到电脑上可以使用微信自带的聊天记录迁移功能 操作步骤&#xff1a; 安卓&#xff1a; 手机微信->我->设置->聊…

AI解密:语言模型生成下一个词的概率从何而来

在这个信息爆炸的时代&#xff0c;你是否曾好奇过&#xff0c;当你与聊天机器人流畅对话时&#xff0c;那些机智回复的背后&#xff0c;究竟隐藏着怎样的秘密&#xff1f;今天&#xff0c;就让我们一起乘坐时光机&#xff0c;深入语言模型的神秘腹地&#xff0c;揭开它预测下一…

【spring】第二篇 bean实例化

对象已经能交给Spring的IOC容器来创建了&#xff0c;但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程&#xff0c;在这块内容中主要解决两部分内容&#xff0c;分别是 bean是如何创建的 实例化bean的三种方式&#xff0c;构造方法,静态工厂和实例工厂 在讲解这…

iOS——类与对象底层探索

类和对象的本质 当我们使用OC创建一个testClass类并在main函数创建它的实例对象的时候&#xff0c;OC的底层到底是什么样的呢&#xff1f; 首先&#xff0c;我们要了解OC对象的底层结构&#xff0c;那么我们就得知道&#xff1a;OC本质底层实现转化其实都是C/C代码。 使用下面…

详解 Spark SQL 核心编程知识

一、SparkSQL 概述 1. 概念 Spark SQL 是 Spark 用于结构化数据 (structured data) 处理的 Spark 模块&#xff0c;使用 SQL 的方式简化 RDD 的开发 2. Hive VS SparkSQL Hive 是早期唯一运行在 Hadoop 上的 SQL-on-Hadoop 工具&#xff0c;但是 MapReduce 计算过程中大量的中…