当前位置: 首页 > news >正文

linux 内核 - 内存管理单元(MMU)与地址翻译(一)

        MMU 不仅负责将虚拟地址转换为物理地址,还能防止未经授权的内存访问。对于一个进程而言,它所需访问的任何页面都必须存在于该进程的某个 VMA 中,因此也必须记录在该进程的页表里(每个进程都有自己的页表)。

        内存是按照固定大小的块来组织的:在虚拟内存中称为“页(page)”,在物理内存中称为“帧(frame)”。在我们的例子中,大小为 4 KB。不过,这个大小在内核中是通过宏 PAGE_SIZE 定义并可访问的。但需要注意,页面大小是由硬件决定的。在一个以 4 KB 为页大小的系统中,字节地址 0 到 4095 属于第 0 页,字节地址 4096 到 8191 属于第 1 页,以此类推。

        引入页表(page table)的概念,是为了管理页面与帧之间的映射关系。页面被分布到页表中,每个页表项(PTE, Page Table Entry)对应着一个页面与一个物理帧之间的映射。随后,每个进程都会被分配一组页表,用来描述它所有的内存区域。

        为了在页面之间进行遍历,每个页面都会被分配一个索引,称为页号(page number)。对于物理帧来说,则称为页帧号(PFN, Page Frame Number)。这样一来,VMA(更准确地说是逻辑地址)就由两部分组成:页号和偏移量(offset)。在 32 位系统中,偏移量由地址中最低的 12 位表示;而在页大小为 8 KB 的系统中,偏移量由最低的 13 位表示。下面的示意图展示了这种将地址拆分为“页号 + 偏移量”的概念:

        

        操作系统或 CPU 是如何知道某个逻辑地址对应哪个物理地址的呢?它们使用页表作为翻译表,每个页表项的索引就是虚拟页号,而该索引对应的值就是 PFN(页帧号)。当需要通过虚拟内存访问物理内存时,操作系统首先会提取偏移量和虚拟页号,然后遍历该进程的页表,将虚拟页号与物理页匹配。一旦找到对应关系,就可以访问该物理页帧中的数据。

        

http://www.xdnf.cn/news/1334341.html

相关文章:

  • 【GPT入门】第49课 LlamaFacotory 训练千问
  • macos 多个版本的jdk
  • 从ioutil到os:Golang在线客服聊天系统文件读取的迁移实践
  • Linux 文件系统权限管理(补充)
  • 技术半衰期悖论:AI时代“不可替代领域“的深耕地图
  • 【Day 30】Linux-SQL语句
  • 23种设计模式——模板方法模式(Template Method Pattern)详解
  • JavaScript 性能优化实战:从原理到落地的完整指南
  • 深入解析RAGFlow六阶段架构
  • element table 表格多选框选中高亮
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码2
  • 【网络运维】Linux 文本处理利器:sed 命令
  • Obsidian 1.9.10升级
  • Lecture 6 Kernels, Triton 课程笔记
  • python-使用鼠标对图片进行涂抹自定义绘图
  • React框架超详细入门到实战项目演练【前端】【React】
  • 玳瑁的嵌入式日记D21-08020(数据结构)
  • 河南萌新联赛2025第六场 - 郑州大学
  • 一种数字相机中的自动曝光算法
  • Java 性能优化实战(二):JVM 调优的 5 个核心维度
  • ABAP OOP革命:ALV报表面向对象改造深度实战
  • 基于Python的反诈知识科普平台 Python+Django+Vue.js
  • 49 C++ STL模板库18-类模板-pair
  • 解决前端项目启动时找不到esm文件的问题
  • PostgreSQL 流程---更新
  • 力扣面试150(61/100)
  • 使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
  • 笔试——Day44
  • 使用RealSense相机和YOLO进行实时目标检测
  • 从零开发Java坦克大战Ⅱ(上) -- 从单机到联机(架构演进与设计模式剖析)