计算机组成与体系结构:直接内存映射(Direct Memory Mapping)

news2025/4/25 6:35:03

目录

CPU地址怎么找到真实的数据?

内存映射的基本单位和结构

1. Pages(页)——虚拟地址空间的基本单位

2. Frames(页框)——物理内存空间的基本单位

3. Blocks(块)——主存和缓存之间的数据单位

4. Lines(行)——缓存中的数据单位

什么是 word(字)? 

什么是 byte-addressable memory(按字节寻址)?

🧬什么是物理地址位?

 📐 为什么我们要设计“物理地址位”?

🧮 示例讲解:直接内存映射过程

地址如何拆分?

为什么需要一种“映射规则”?

 映射过程

地址拆解(Address Breakdown) 


CPU地址怎么找到真实的数据?

当 CPU 执行一条指令,比如要访问变量 x,它会给出一个地址。但这个地址是虚拟地址(Virtual Address),不是内存真实的物理地址。

这时就出现了一个问题:

💡 CPU 提供的是“虚拟地址”,但数据真实存在“物理内存”里。那怎么找得到?

这就需要一种转换机制,叫做——内存映射(Memory Mapping)

内存映射的基本单位和结构

内存映射是一种地址翻译机制,它负责把虚拟地址 → 物理地址,好比给你提供“地图导航”,告诉你数据在哪一层、哪一块。

为了实现这个映射,操作系统就把地址空间划分成若干个单位。

1. Pages(页)——虚拟地址空间的基本单位

 问题:虚拟地址怎么组织的?

操作系统会把整个虚拟地址空间分成很多等大小的“小段”,每一段就叫做一个 Page(页)。

举例: 你写的程序其实用的是“虚拟地址”,操作系统会把这些地址一页一页地管理。

比如:每页大小是 4KB,你程序申请的内存就被切成一个个 4KB 的“页”。

2. Frames(页框)——物理内存空间的基本单位

问题:虚拟页放到内存的哪里?

页框是把物理内存(RAM)划分成的固定大小的“物理单位”,大小和“页”一样。

这样操作系统可以把某个虚拟页映射到物理内存中的某个页框中,建立虚实对应关系。

Page ↔ Frame 映射过程

每个虚拟页(page)被映射(mapping)到某个物理页框(frame)上。

虚拟内存通过 页表(Page Table) 建立从 Page → Frame 的映射关系。

这就是内存映射中最基本的核心:页式管理(Paging)。

但问题又来了:内存慢,CPU快,怎么办?

即使映射成功了,从内存里读数据还是太慢。怎么办呢?

我们再往内存映射系统的底层走,进入 缓存(Cache) 世界。这就引出了接下来的两个概念:

 3. Blocks(块)——主存和缓存之间的数据单位

 问题:主存数据怎么搬到 Cache?

主存(内存)被划分成很多块(blocks),是缓存系统从主存读取数据的最小单位。

 举例: 如果一个 block 是 64 字节,那缓存每次从内存中读取数据,都是按块来取的,不是按字节。

 4. Lines(行)——缓存中的数据单位

这些搬来的 block,会被临时存放在缓存中,对应存到缓存中的一个 Cache Line(行)。

  • Block 是从主存来的;

  • Line 是放在缓存里的;

  • 两者一一对应。

概念属于系统对应关系说明
page虚拟内存→ frame虚拟地址空间中的一页
frame物理内存← page实体内存中的一块
block主存→ line内存中被缓存系统按块划分
line缓存← block缓存中存放主存数据的最小单元

什么是 word(字)? 

在计算机中,word(字)是CPU一次能处理的数据宽度,是 CPU 使用的基本数据单位。

这个宽度取决于你的CPU是几位的:

CPU位数一个 word 的大小
16位2 字节(16 bits)
32位4 字节(32 bits)
64位8 字节(64 bits)

举个例子:

在 32 位 CPU 中,一个 word = 4 个字节。
如果你要访问一个整型变量(int),它通常就是一个 word 宽度的数据。

什么是 byte-addressable memory(按字节寻址)?

Byte-addressable memory 是指:内存中的每个地址代表一个字节(8 bits)。

也就是说:

  • 地址 0x0001 表示的是第 1 个字节;

  • 地址 0x0002 表示的是第 2 个字节;

  • ……以此类推。

这是现代计算机的标准做法。

举个例子:
假设内存中有数据:[0xFF, 0xAB, 0x01, 0x23]
那么这些字节分别位于:

  • 地址 0x1000:0xFF

  • 地址 0x1001:0xAB

  • 地址 0x1002:0x01

  • 地址 0x1003:0x23

👉 每个地址定位的是一个字节,这就叫“按字节寻址”。

类比:

  • byte 是每页纸上的“一个字”;

  • word 是每次你读的一整行;

  • byte-addressable 是你可以随便指出“某一个字”,非常灵活;

  • 而 CPU 每次读的是一整行(word),更高效。


 

🧬什么是物理地址位?

物理地址位(Physical Address Bits)指的是用于唯一标识主存中每一个字节的二进制位序列。

✅ 为什么叫“物理”地址?

在计算机体系结构中,内存分为物理地址空间(Physical Address Space)和虚拟地址空间(Virtual Address Space):

  • 虚拟地址是程序看到的地址

  • 物理地址是实际在内存条上存放数据的位置

所以我们说的 Physical Address Bits 是:CPU 最终用来从主存中“定位数据”的真实地址位序列。

 📐 为什么我们要设计“物理地址位”?

从第一性原理来看,我们提出一个核心问题:

主存很大,如何精确、高效地寻址?

用二进制位来编码地址。每一个物理地址都对应一个内存单元(通常是一个字节),并用一串 0/1 序列(即“物理地址位”)来表示它的位置。

如果主存大小是 NNN 个地址单元(比如字节),我们至少需要多少位(bits)来表示这些地址?

💡这就是 log₂(N) 的定义!

log₂(N) 是“用二进制(base 2)数表示 N 个不同值,至少需要多少位”。

比如:

  • log₂(64)=6 ⇒ 用 6 位可以表示 64 个不同地址(从 000000 到 111111)

  • log₂(16)=4 ⇒ 用 4 位可以表示 16 个不同块

🧮 示例讲解:直接内存映射过程

我们有一个主存(Physical Address Space),图中一共显示了64个字节(编号0~63),而这些地址被分成了16个块(blocks)。这些块是怎么映射到 Cache 中的呢?这就是“直接内存映射”的任务。 

 

系统参数如下:

项目参数中文解释
主存大小64 个字节Physical Address Space 是 64B(字节寻址)
每块大小4 个字节(一个block有4个字)每个 Block 有 4 个连续地址
总块数16 块64 ÷ 4 = 16 blocks(编号 0 到 15)
块编号所需位数log₂(16) = 4 bits表示 block 编号需要 4 位
每块中地址的偏移量log₂(4) = 2 bitsblock 内地址偏移(Offset)需要 2 

地址如何拆分?

图中展示了 6 位物理地址被分成两部分:

地址段位数中文含义功能
高位(左侧)4 位Block号哪个数据块(block)
低位(右侧)2 位偏移量(offset)块内第几个字节(0~3)

📌 举个实际地址的例子:


  • 块号(Block Number):前4位 0111 = 7 ⇒ 说明这个地址在 第7个块

  • 偏移(Offset):后2位 11 = 3 ⇒ 在第7块的 第3个字节

 所以,物理地址31 指向 Block 7 的最后一个字节(即地址 31)

为什么需要一种“映射规则”?

 

我们假设: 

  • Cache 大小:16字(words)

  • 每个 Cache Line 大小:4字

  • 主存:我们默认主存比 cache 大得多,比如 64字(也就是前面图片中的 16个 block,每个 block 是 4字)

我们现在的问题是: 

主存中的块(block)不能同时分配给cache中的所有行(line),我们该怎么分配这些块? 

于是我们需要一个规则 

 ROUND-ROBIN 式的映射 —— Direct Mapping(直接映射)

直接映射(Direct Mapping):让每个块只能去 Cache 中固定的一行。

这个过程类似一种 “轮流排班机制(Round-Robin)”。

 映射过程

主存中的每一个块(Block)编号记作 i
Cache 中的行号记作 j

我们使用公式:

j = i  mod Cache  行数

这就把主存中的 16 个块,轮流“安排”到 4 个 Cache 行中

 

 

地址拆解(Address Breakdown) 

物理地址总共需要 6 位,因为主存有 64 个字节。

我们把这 6 位地址拆分成 3 个字段:

 

部分中文解释位数功能
Tag bits标记位高位区分映射到同一行的不同块
Line number行号/索引位中间位决定映射到 Cache 的哪一行
Offset块内偏移低位(2位)定位 block 内具体的字节

 

图中的例子说明:

虽然 Block 3、7、11、15 是不同的内存块,但它们 都被映射到 Cache 的第3行,只能互相“打架”。

而这个打架的关键区分方式就是 Tag! 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32提高篇: 蓝牙通讯

STM32提高篇: 蓝牙通讯 一.蓝牙通讯介绍1.蓝牙技术类型 二.蓝牙协议栈1.蓝牙芯片架构2.BLE低功耗蓝牙协议栈框架 三.ESP32-C3中的蓝牙功能1.广播2.扫描3.通讯 四.发送和接收 一.蓝牙通讯介绍 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技…

SpringMVC处理请求映射路径和接收参数

目录 springmvc处理请求映射路径 案例:访问 OrderController类的pirntUser方法报错:java.lang.IllegalStateException:映射不明确 核心错误信息 springmvc接收参数 一 ,常见的字符串和数字类型的参数接收方式 1.1 请求路径的…

【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)

🌟 嗨,你好,我是 青松 ! 🌈 希望用我的经验,让“程序猿”的AI学习之路走的更容易些,若我的经验能为你前行的道路增添一丝轻松,我将倍感荣幸!共勉~ 【程序员 NLP 入门】词…

从物理到预测:数据驱动的深度学习的结构化探索及AI推理

在当今科学探索的时代,理解的前沿不再仅仅存在于我们书写的方程式中,也存在于我们收集的数据和构建的模型中。在物理学和机器学习的交汇处,一个快速发展的领域正在兴起,它不仅观察宇宙,更是在学习宇宙。 AI推理 我们…

大模型AI的“双刃剑“:数据安全与可靠性挑战与破局之道

在数字经济蓬勃发展的浪潮中,数据要素已然成为驱动经济社会创新发展的核心引擎。从智能制造到智慧城市,从电子商务到金融科技,数据要素的深度融合与广泛应用,正以前所未有的力量重塑着产业格局与经济形态。 然而,随着…

操作系统概述与安装

主流操作系统概述 信创平台概述 虚拟机软件介绍与安装 windows server 安装 centos7 安装 银河麒麟V10 安装 一:主流服务器操作系统 (1)Windows Server 发展历程: 1993年推出第一代 WindowsNT(企业级内核&am…

开发了一个b站视频音频提取器

B站资源提取器-说明书 一、功能说明 本程序可自动解密并提取B站客户端缓存的视频资源,支持以下功能: - 自动识别视频缓存目录 - 将加密的.m4s音频文件转换为标准MP3格式 - 将加密的.m4s视频文件转换为标准MP4格式(合并音视频流)…

基于javaweb的SpringBoot校园服务平台系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

PHYBench:首个大规模物理场景下的复杂推理能力评估基准

2025-04-23, 由北京大学物理学院和人工智能研究所等机构共同创建的 PHYBench 数据集,这是一个专门用于评估大型语言模型在物理场景下的复杂推理能力的高质量基准。该数据集包含 500 道精心策划的物理问题,覆盖力学、电磁学、热力学、光学、现代物理和高级…

Red:1靶场环境部署及其渗透测试笔记(Vulnhub )

环境介绍: 靶机下载: https://download.vulnhub.com/red/Red.ova 本次实验的环境需要用到VirtualBox(桥接网卡),VMware(桥接网卡)两台虚拟机(网段都在192.168.152.0/24&#xff0…

深入详解人工智能数学基础——概率论中的KL散度在变分自编码器中的应用

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

测试模版x

本篇技术博文摘要 🌟 引言 📘 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…

Openharmony 和 HarmonyOS 区别?

文章目录 OpenHarmony 与 HarmonyOS 的区别:开源生态与商业发行版的定位差异一、定义与定位二、技术架构对比1. OpenHarmony2. HarmonyOS 三、应用场景差异四、开发主体与生态支持五、关键区别总结六、如何选择?未来展望 OpenHarmony 与 HarmonyOS 的区别…

uniapp 仿小红书轮播图效果

通过对小红书的轮播图分析&#xff0c;可得出以下总结&#xff1a; 1.单张图片时容器根据图片像素定高 2.多图时轮播图容器高度以首图为锚点 3.比首图长则固高左右留白 4.比首图短则固宽上下留白 代码如下&#xff1a; <template><view> <!--轮播--><s…

R/G-B/G色温坐标系下对横纵坐标取对数的优势

有些白平衡色温坐标系会分别对横纵坐标取对数运算。 这样做有什么优势呢? 我们知道对数函数对0-1之间的因变量值具有扩展作用。即自变量x变化比较小时,经过对数函数作用后可以把因变量扩展到较大范围内,即x变化较小时,y变化较大,增加了识别数据的识别性。 由于Raw数据中的…

AI赋能安全调度系统:智能升级与功能跃迁

安全调度系统通过AI技术的深度整合&#xff0c;实现了从传统监控到智能决策的质变升级。这种智能化转型不仅提升了系统的响应速度和处理精度&#xff0c;更重塑了整个安全管理的运行范式。以下是AI技术为安全调度系统带来的核心功能强化&#xff1a; 智能风险识别与预警能力跃…

数据结构与算法(十二):图的应用-最小生成树-Prim/Kruskal

相关文献&#xff1a; 数据结构与算法(一)&#xff1a;基础理论 数据结构与算法(二)&#xff1a;线性表的实现 数据结构与算法(三)&#xff1a;线性表算法设计练习 数据结构与算法(四)&#xff1a;斐波那契数列 数据结构与算法(五)&#xff1a;LRU 数据结构与算法(六)&#xff…

项目——高并发内存池

目录 项目介绍 做的是什么 要求 内存池介绍 池化技术 内存池 解决的问题 设计定长内存池 高并发内存池整体框架设计 ThreadCache ThreadCache整体设计 哈希桶映射对齐规则 ThreadCache TLS无锁访问 CentralCache CentralCache整体设计 CentralCache结构设计 C…

系统与网络安全------弹性交换网络(2)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 Eth-Trunk 组网中经常会遇到的问题 链路聚合技术 概述 Eth-Trunk&#xff08;链路聚合技术&#xff09;作为一种捆绑技术&#xff0c;可以把多个独立的物理接口绑定在一起&#xff0c;作为一个大带宽的逻辑…

信息系统项目管理工程师备考计算类真题讲解八

一、风险管理 示例1&#xff1a;EMV 解析&#xff1a;EMV(Expected Monetary Value)预期货币价值。一种定量风险分析技术。通过考虑各种风险事件的概率及其可能带来的货币影响&#xff0c;来计算项目的预期价值。 可以用下面的较长进行表示&#xff1a; 水路的EMV:7000*3/4(7…