Linux 内核学习(15) --- linux MMU 和 分页机制

目录

        • 虚拟内存和分页机制介绍
        • MMU 基本概念
        • 虚拟地址基本概念
        • 物理地址基本概念
        • 页表基本概念
        • 多节页表的映射过程
        • 内核空间页表
虚拟内存和分页机制介绍

早期计算机系统的内存是比较小,不过相应的程序也是比较小的,这时程序可以直接加载到内存中运行,
后来为了支持多个程序的并行,内存中出现了固定分区,在编译阶段将不同程序,划分在不同的内存区域上
这种方式存在不少问题:

  1. 内存分区大小与程序大小要匹配,
  2. 是地址空间无法动态的增长

内存动态分区思想便诞生了,内存上线划出一块区域给操作系统,然后剩余的内存空间给用户进程使用,这样用户程序所使用的内存空间,跟随程序大小及数目进行变动

不论是静态分析,还是动态分区,都存在一些问题:

  1. 进程地址空间安全问题(地址空间不隔离)

  2. 内存使用效率低(不能动态回收或者交换)

  3. 虚拟内存技术的产生

为了能够让多程序安全、高效地并行运行,物理内存中需要存放多个程序的代码及数据,这时虚拟内存便诞生了,虚拟内存是一个伟大的发明,一方面它让每个程序认为自己是独自、连续的使用内存
另一方面,每个程序之间的内存形成了安全隔离,避免程序破坏彼此的内存

后来随着软件的快速发展,一个程序的大小变得很大,这时物理内存大小跟不上程序大小增加的速度,
这样便不能将整个程序加载到物理内存中,一是物理内存没有这么大,二是如果将整个程序加载到内存,为了多程序并行,就需要将大量的数据及代码换入、换出,这导致程序运行效率低下

虚拟内存并没解决高效使用内存的问题,好在程序运行遵循时间、空间局部性原理,进而出现了分页机制
分页机制从根本上解决了高效使用物理内存的问题,每次只需要将几页的代码、数据从磁盘中加载到内存,程序就能正常运行
当程序运行的过程中,需要新的代码、数据会产生缺页异常,这些代码、数据就会从磁盘加载到内存,然后程序从异常恢复正常运行

  1. 分页机制的产生

对于支持虚拟内存,分页机制的系统,处理器直接寻址虚拟地址,这个地址不会直接发给内存控制器,而是先发给内存管理单元(Memory Manager Unit
MMU就是负责将虚拟地址转换和翻译成物理地址的一个硬件模块,其实MMU所做的事,完全可以通过CPU来实现,为啥还要一个 MMU 硬件模块呢?就是为了提升虚拟地址到物理地址转换的速度,减少转换所消耗的时间
MMU包含两个模块TLB(Translation Lookaside Buffer)和TWU(Table Walk Unit)
TLB是一个高速缓存,用于缓存页表转换的结果,从而缩短页表查询的时间,TWU是一个页表遍历模块,页表是由操作系统维护在物理内存中,但是页表的遍历查询是由TWU完成的,这样减少对CPU资源的消耗

MMU 基本概念

SMPSymmetric Multi Process,对称多处理器)系统中,每个处理器内置了 MMU 模块
MMU模块包含了TLBTWU两个子模块,TLB是一个高速缓存,用于缓存虚拟地址到物理地址的转换结果
页表的查询过程是由TWU硬件自动完成的,但是页表的维护是需要操作系统实现的,页表存放在主存中

页表的查询是一个耗时的过程,理想情况下,TLB命中,可以从中直接得到虚拟地址对应的物理地址
TLB未命中的时候,MMU才会通过TWU查询页表,从而翻译虚拟地址得到物理地址
得到物理地址后,首先要查询该物理地址的内容是否存在于Cache中,若Cache命中,则直接取出物理地址对应的内容返回给处理器

Cache没有命中,会进一步访问主存获取相应的内容,然后回写到Cache,并返回给处理器
如果没能在页表中查询到虚拟地址对应的物理地址,则会触发一个与MMU相关的缺页异常,
在异常处理的过程中,会将ROM 存储器中相关的数据加载到主存,然后建立相应的页表,然后将物理地址对应的内容返回给Cache及处理器

虚拟地址基本概念

虚拟内存(Virtual Memory,VM):为每个进程提供了一致的、连续的、私有的内存空间,简化了内存管理
虚拟地址空间(Virtual Address Space,VAS):每个进程独有,每个进程占有的虚拟地址范围
虚拟页(Virtual Page,VP):把虚拟内存按照页表大小进行划分
虚拟地址(Virtual Address,VA):CPU 处理器实际使用的地址
虚拟页号(Virtual Page Number,VPN):用于定位页表的PTE

物理地址基本概念

物理内存(Physical Memory,PM):主存上能够使用的物理空间
物理页(Physical Page):把物理内存按照页表的大小进行划分
物理地址(Physical Address,PA):物理内存划分很多块,通过物理内存进行定位
物理页号(Physical Page Number,PPN):定位物理内存中块的位置

页表基本概念

页表(Page Tabel):虚拟地址与物理地址映射表的集合(注意是一个映射的集合)
页全局目录(Page Global Directory,PGD):多级页表中的最高一级
页上级目录(Page Upper Directory,PUD):多级页表中的次高一级
页中间目录(Page Middle Directory,PMD):多级页表中的一级
页表条目(Page Table Entry,PTE):虚拟地址与独立地址具体对应的记录

说明: 页表时一个映射的集合,保存在内存中,规定了如何映射到物理地址

页表(Page Table) 是操作系统在物理内存(RAM)中分配的一段数据结构
它由一系列 页表项(Page Table Entry,PTE) 组成,每个PTE通常为 8 字节(在 64 位系统中)
每个PTE包含:
下一级页表或物理页的物理地址(高几位)
权限位(可读/可写/可执行)
是否有效(Valid
是否被访问过(Accessed
是否被修改过(Dirty
是否是全局页(Global

虽然页表在内存中,但CPU需要知道 从哪里开始查找,这就用到了寄存器:
x86-64中:CR3寄存器保存 顶层页表(如PML4)的物理基地址
ARM64中:TTBR0_EL1TTBR1_EL1寄存器分别保存 用户/内核顶层页表(L0)的物理基地址

TLB是寄存器吗?
TLBTranslation Lookaside Buffer) 是CPU内部的高速缓存(Cache),用于缓存最近使用的 VA → PA 映射,
它不是通用寄存器,而是专用的关联存储器(CAM),属于MMU的一部分,TLB的内容来源于页表,但本身不是页表

多节页表的映射过程

物理页面大小一级地址总线宽度不同,页表的级数也不同,以AArch64运行状态,4KB大小物理页面,48位地址宽度为例,页表映射的查询过程如图:

对于多任务操作系统,每个用户进程都拥有独立的进程地址空间,也有相应的页表负责虚拟地址到物理地址之间的转换
MMU查询的过程中,用户进程的一级页表的基址存放在TTBR0
操作系统的内核空间公用一块地址空间,MMU查询的过程中,内核空间的一级页表基址存放在TTBR1

TLB未命中时,处理器查询页表的过程如下:

  1. 处理器根据虚拟地址第63位,来选择使用TTBR0或者TTBR1,当VA[63]0时,选择TTBR0TTBR中存放着L0页表的基址

  2. 处理器以VA[47:39]作为L0的索引,在L0页表中查找页表项,L0页表有512个页表项

  3. L0页表的页表项中存放着L1页表的物理基址,处理器以VA[38:30]作为L1索引,在L1页表中找到相应的页表项,L1页表中有512个页表项 (L1中会存储L2页表的物理基址)

  4. L1页表的页表项中存放着L2页表的物理基址,处理器以VA[29:21]作为L2索引,在L2页表中找到相应的页表项,L2页表中有512个页表项

  5. L2页表的页表项中存放着L3页表的物理基址,处理器以VA[20:12]作为L3索引,在L3页表中找到相应的页表项,L3页表中有512个页表项

  6. L3页表的页表项里,存放着 4KB 页面的物理基址,然后加上VA[11:0],这样就构成了物理地址,至此处理器完成了一次虚拟地址到物理地址的查询与翻译的工作

简化的流程:
TLB 未命中 → 触发页表遍历(page table walk),
检查 VA[63](更准确说是 VA[63:48]):
若为 0 → 使用 TTBR0_EL1(用户空间)
若为 1 → 使用 TTBR1_EL1(内核空间)
从 TTBR 拿到 L0 页表的物理基址,
用 VA[47:39] 索引 L0 → 得到 L1 基址
用 VA[38:30] 索引 L1 → 得到 L2 基址
用 VA[29:21] 索引 L2 → 得到 L3 基址
用 VA[20:12] 索引 L3 → 得到 4KB 页的物理基址
物理地址 = (L3 页表项中的物理页号 << 12) | VA[11:0]

现代CPU通常有 硬件页表遍历器(page walker),自动完成这个过程,无需软件干预

内核空间页表

即使在内核态(kernel mode),CPU仍然运行在虚拟地址模式下

  • 内核代码、数据、堆栈等都使用虚拟地址
  • 所有内核空间的虚拟地址(包括直接映射区、vmalloc 区、内核代码段等)都必须通过MMU+ 页表 转换为物理地址
  • 内核本身在虚拟地址空间中,只是这个空间是所有进程共享的(在 x86_64 等架构中,高地址部分是内核空间)

内核页表存放位置
页表是内存中的页(通常是 4KB 对齐的,它们自己也必须能被CPU访问
因此,页表所在的物理页也被映射到内核的虚拟地址空间中(通常是直接映射区)
例如:pgd(页全局目录)可能位于物理地址0x12345000,那么它的虚拟地址就是PAGE_OFFSET + 0x12345000

进程页表和内核页表
内核的页表本质上是普通内存中的数据结构,由内核自己分配和管理

在支持进程隔离的系统中,每个进程有自己的一套页表(PGD
但所有进程的内核空间页表项是相同的
也就是说:当进程 A 和进程 B 切换时,虽然用户空间页表不同,但内核空间的映射是复用的(或快速切换)

切换到内核态时,会自动加载页表吗

  1. 用户态 → 内核态(如系统调用、中断)
    因为当前进程的页表 已经包含了内核空间的映射
    当 CPU 陷入内核(例如执行 syscall),MMU 仍然使用当前进程的页表(即 CR3 寄存器未变)
    内核可以直接访问其虚拟地址,因为页表中已经建立了从内核虚拟地址 → 物理地址的映射

  2. 进程切换(进程 A → 进程 B)
    此时会切换页表:将CR3寄存器更新为进程BPGD(页全局目录)物理地址
    但新页表中同样包含完整的内核空间映射,所以内核代码依然可访问

  3. 内核页表初始化

启动早期(汇编阶段):
内核在head.S中建立临时页表(identity mapping+ 直接映射,启用MMU后,跳转到C代码(此时已使用虚拟地址)

start_kernel()阶段:
调用paging_init()zone_sizes_init()等函数,建立完整的直接映射区、vmalloc区、内核代码段等映射
为每个新创建的进程复制/共享内核页表部分

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

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

相关文章

实时威胁检测最佳实践:低成本云端部署方案

实时威胁检测最佳实践&#xff1a;低成本云端部署方案 引言 医院作为关键基础设施&#xff0c;每天面临大量网络安全威胁。传统防火墙和杀毒软件往往只能识别已知威胁&#xff0c;对新型攻击束手无策&#xff0c;还会产生大量误报让信息科疲于应对。AI驱动的实时威胁检测系统…

AI智能体数据分析入门必看:云端GPU按需付费成主流

AI智能体数据分析入门必看&#xff1a;云端GPU按需付费成主流 1. 为什么AI智能体需要云端GPU&#xff1f; AI智能体数据分析是当前最热门的技术方向之一&#xff0c;它能让计算机像人类一样理解数据、发现规律并做出决策。但对于转行学习数据分析的新人来说&#xff0c;最大的…

5个最火AI智能体推荐:0配置开箱即用,10块钱全试遍

5个最火AI智能体推荐&#xff1a;0配置开箱即用&#xff0c;10块钱全试遍 引言 作为一名数据分析师&#xff0c;你是否经常遇到这样的困扰&#xff1a;老板突然要求评估不同AI智能体的性能表现&#xff0c;但本地环境配置复杂&#xff0c;光是搭环境就要花上大半天&#xff1…

插混电力再加码 比亚迪4款210km纯电长续航DM-i车型加推上市

2026年元旦刚过&#xff0c;比亚迪正式开启了“大电池插混”时代&#xff0c;旗下4款热销插混轿车正式加推大电池DM-i&#xff0c;CLTC纯电续航均达210km&#xff0c;综合续航超2110km。其中&#xff0c;A级插混家轿2026款秦PLUS DM-i、2026款海豹05DM-i各加推2个版本&#xff…

AI安全分析师速成:1天掌握实体行为检测,云端实验环境已备好

AI安全分析师速成&#xff1a;1天掌握实体行为检测&#xff0c;云端实验环境已备好 引言&#xff1a;当职场新人遇上AI安全项目 上周刚入职的小王遇到了典型职场危机&#xff1a;领导临时安排他负责公司新启动的AI安全项目&#xff0c;要求一周内完成实体行为检测的可行性验证…

环保AI智能体案例:低成本监测空气质量变化

环保AI智能体案例&#xff1a;低成本监测空气质量变化 引言 对于社区工作者来说&#xff0c;实时掌握当地的空气质量状况至关重要。传统的监测设备往往价格昂贵&#xff0c;动辄上万元&#xff0c;对于预算有限的社区来说难以承担。而今天我要介绍的AI智能体解决方案&#xf…

Python 类型注解Type Annotations

类型注解(Type Annotations)是 Python 3.5 引入的特性,旨在为代码添加静态类型提示,提高可读性和可维护性。它通过语法标记变量、函数参数和返回值的预期类型,但不影响运行时行为。 基本语法 变量类型注解使用冒号后跟类型: name: str = "Alice" age: int =…

Tavily 库

Tavily 是一个 Python 库,主要用于简化网络搜索和数据获取的过程。它通过封装复杂的网络请求和解析逻辑,提供了一种高效的方式来从网页中提取结构化数据。 Tavily 特别适合用于数据采集、自动化测试和研究分析等场景。 Tavily 的核心功能 Tavily 的核心功能包括网页内容的…

智能健身AI体开发教程:可穿戴设备+云端分析方案

智能健身AI体开发教程&#xff1a;可穿戴设备云端分析方案 引言&#xff1a;当健身教练遇上AI助手 想象一下这样的场景&#xff1a;你的会员正在跑步机上挥汗如雨&#xff0c;而他手腕上的智能手环正在实时监测心率、步频和卡路里消耗。但手环的算力有限&#xff0c;无法即时…

AI论文图表解析:自动提取数据实体,科研效率提升3倍

AI论文图表解析&#xff1a;自动提取数据实体&#xff0c;科研效率提升3倍 引言&#xff1a;科研党的福音来了 作为一名研究生&#xff0c;你是否经历过这样的痛苦&#xff1a;导师突然要求你写领域综述&#xff0c;需要从上百篇PDF论文中手动提取数据图表&#xff1f;眼睛盯…

5大AI安全模型实测对比:云端GPU 2小时完成选型,1块钱起

5大AI安全模型实测对比&#xff1a;云端GPU 2小时完成选型&#xff0c;1块钱起 1. 为什么需要AI安全模型选型&#xff1f; 作为企业CTO&#xff0c;当团队需要部署威胁检测方案时&#xff0c;最头疼的问题莫过于&#xff1a;市面上AI安全模型种类繁多&#xff0c;效果参差不齐…

基于python的医药进销存管理系统[python]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着医药行业的蓬勃发展&#xff0c;医药企业对于进销存管理的效率和准确性要求日益提高。本文旨在设计并实现一个基于Python的医药进销存管理系统&#xff0c;通过对系统的功能需求和非功能需求进行深入分析&#xff0c;采用合适的技术架构和数据库设计&#…

AI视频分析云端方案:直播流实时侦测,按需付费不浪费

AI视频分析云端方案&#xff1a;直播流实时侦测&#xff0c;按需付费不浪费 引言&#xff1a;为什么MCN机构需要按需付费的视频分析&#xff1f; 对于MCN机构而言&#xff0c;直播间的观众互动热区分析是优化内容策略的重要工具。传统的解决方案往往需要长期租用昂贵的视频分…

AI智能体音乐生成教程:没显卡也能创作,1小时1块

AI智能体音乐生成教程&#xff1a;没显卡也能创作&#xff0c;1小时1块 1. 为什么选择AI音乐生成&#xff1f; 你是否想过创作自己的音乐&#xff0c;却被专业音频工作站的价格和复杂度劝退&#xff1f;现在&#xff0c;借助AI音乐生成技术&#xff0c;即使没有专业设备和高配…

AI智能体金融风控案例:3步复现模型

AI智能体金融风控案例&#xff1a;3步复现模型 引言&#xff1a;为什么金融风控需要AI智能体&#xff1f; 在金融行业&#xff0c;风控专员每天都要处理海量的交易数据&#xff0c;识别潜在的欺诈行为或信用风险。传统方法往往依赖规则引擎和人工审核&#xff0c;效率低且难以…

智能侦测模型轻量化指南:云端蒸馏+量化一站式方案

智能侦测模型轻量化指南&#xff1a;云端蒸馏量化一站式方案 引言 作为一名嵌入式工程师&#xff0c;你是否遇到过这样的困境&#xff1a;精心训练的检测模型在树莓派上跑得比蜗牛还慢&#xff1f;本地电脑跑蒸馏训练时风扇狂转却迟迟不出结果&#xff1f;今天我要分享的这套…

学生党福利:AI智能体学习1小时1块随便玩

学生党福利&#xff1a;AI智能体学习1小时1块随便玩 引言&#xff1a;计算机专业学生的AI学习困境 作为一名计算机专业的学生&#xff0c;相信你一定遇到过这样的烦恼&#xff1a;AI课程设计需要跑模型&#xff0c;实验室的电脑总是排不上队&#xff0c;自己的笔记本性能又跟…

零代码玩转AI监控:拖拽式分析界面+云端GPU,小白也能做安防

零代码玩转AI监控&#xff1a;拖拽式分析界面云端GPU&#xff0c;小白也能做安防 1. 为什么超市老板需要AI监控&#xff1f; 超市防盗是个老难题。传统监控摄像头只能录像&#xff0c;事后查证时往往为时已晚。专业安防系统又需要布线、安装、调试&#xff0c;还得配备专人值…

AI智能体数据可视化:5分钟生成动态报表,1小时1块

AI智能体数据可视化&#xff1a;5分钟生成动态报表&#xff0c;1小时1块 1. 为什么市场分析师需要AI智能体数据可视化 作为一名市场分析师&#xff0c;你是否经常遇到这些困扰&#xff1a; 每周都要手动更新销售报表&#xff0c;复制粘贴数据到Excel&#xff0c;调整格式就要…

StructBERT轻量CPU版性能优化:推理速度提升

StructBERT轻量CPU版性能优化&#xff1a;推理速度提升 1. 背景与挑战&#xff1a;中文情感分析的工程落地需求 在自然语言处理&#xff08;NLP&#xff09;的实际应用中&#xff0c;中文情感分析是企业级服务中最常见的需求之一。无论是电商平台的用户评论、客服对话的情绪识…