Linux内存分页:原理、优势与实践

一、分页机制核心原理

1.1 分页技术原理

核心思想
将虚拟地址空间和物理内存划分为固定大小的页(Page),通过页表(Page Table)建立虚拟页到物理页框(Page Frame)的映射。例如,x86_64架构的4级页表结构:

虚拟地址: [63-48] | [47-39] PGD | [38-30] PUD | [29-21] PMD | [20-12] PTE | [11-0] 页内偏移保留位       全局目录      上层目录       中间目录      页表项

关键流程

  1. CPU通过CR3寄存器定位页全局目录(PGD)
  2. 逐级查询页表项(PGD→PUD→PMD→PTE)
  3. 最终物理地址 = 物理页框号 << 12 + 页内偏移

🚀 面试题1:分页和分段的主要区别是什么?

答案要点

  • 划分粒度:分页是固定大小(4KB),分段是逻辑单元(代码/数据段)
  • 碎片问题:分页只有内部碎片,分段有外部碎片
  • 地址空间:分页提供线性虚拟地址,分段是二维地址(段基址+偏移)
  • 应用场景:分页是现代OS标准,分段用于嵌入式或特殊场景

1.2 多级页表设计

设计动机
直接映射所有虚拟地址需要巨大页表(48位地址需256TB页表)。多级页表通过稀疏存储节省空间,仅分配实际使用的页表项。

Linux四级页表示例

// 内核源码示例(arch/x86/include/asm/pgtable.h)
#define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address))
#define p4d_offset(pgd, address) (p4d_val(*(pgd)) & _PAGE_PRESENT ? p4d_offset_pgd(pgd, address) : NULL)
// ... 类似定义pud_offset/pmd_offset/pte_offset

🚀 面试题2:为什么使用多级页表?计算48位地址空间单级页表的内存占用?

答案要点

  • 空间优化:单级页表需要 (2^{48} / 2^{12} \times 8B = 256TB)(不可行)
  • 实际占用:四级页表仅分配进程实际使用的内存区域
  • 计算示例
    若进程使用1GB内存,四级页表总大小 ≈ (1GB/2MB \times 4 \times 8B = 16KB)

二、分页技术的核心优势

2.1 内存保护与隔离

页表项权限位

// 页表项标志位(arch/x86/include/asm/pgtable_types.h)
#define _PAGE_PRESENT  BIT(0)  // 页是否在物理内存
#define _PAGE_RW       BIT(1)  // 可写权限
#define _PAGE_USER     BIT(2)  // 用户态可访问
#define _PAGE_PWT      BIT(3)  // Write-Through缓存策略
#define _PAGE_NX       

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

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

相关文章

文件上传漏洞与phpcms漏洞安全分析

目录 1. 文件上传漏洞简介 2. 文件上传漏洞的危害 3. 文件上传漏洞的触发条件 1. 文件必须能被服务器解析执行 2. 上传目录必须支持代码执行 3. 需要能访问上传的文件 4. 例外情况&#xff1a;非脚本文件也可能被执行 4. 常见的攻击手法 4.1 直接上传恶意文件 4.2 文件…

模块和端口

1、模块 模块内部的5个组成是&#xff1a;变量声明 数据流语句 低层模块实例 函数和任务 行为语句 SR锁存器 timescale 1ns / 1psmodule SR_latch(input wire Sbar ,input wire Rbar ,output wire Q ,output wire Qbar);nand…

爬虫(持续更新ing)

爬虫&#xff08;持续更新ing&#xff09; # 网络请求 # url统一资源定位符&#xff08;如&#xff1a;https://www.baidu.com&#xff09; # 请求过程&#xff1a;客户端的web浏览器向服务器发起请求 # 请求又分为四部分&#xff1a;请求网址&#xff0c;请求方法&#xff08…

2025.3.2机器学习笔记:PINN文献阅读

2025.3.2周报 一、文献阅读题目信息摘要Abstract创新点网络架构实验结论不足以及展望 一、文献阅读 题目信息 题目&#xff1a; Physics-Informed Neural Networks of the Saint-Venant Equations for Downscaling a Large-Scale River Model期刊&#xff1a; Water Resource…

使用IDEA如何隐藏文件或文件夹

选择file -> settings 选择Editor -> File Types ->Ignored Files and Folders (忽略文件和目录) 点击号就可以指定想要隐藏的文件或文件夹

前端基础之脚手架

脚手架结构 目录结构 这里的package.json&#xff0c;存放着我们去执行npm run serve 或是npm run build的脚本文件 package-lock.json中存放着我们使用的外部包的版本类型&#xff0c;相当于maven src下的main.js是整个项目的入口文件 src下的components用于存放组件&#xff…

MacBook上API调⽤⼯具推荐

在当今的软件开发中&#xff0c;API调用工具已经成为了开发者不可或缺的助手。无论是前端、后端还是全栈开发&#xff0c;API的调试、测试和管理都是日常工作中的重要环节。想象一下&#xff0c;如果没有这些工具&#xff0c;开发者可能需要手动编写复杂的CURL命令&#xff0c;…

pgsql行列转换

目录 一、造测试数据 二、行转列 1.函数定义 2.语法 3.示例 三、列转行 1.函数定义 2.语法 3.示例 一、造测试数据 create table test ( id int, json1 varchar, json2 varchar );insert into test values(1,111,{111}); insert into test values(2,111,222,{111,22…

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量&#xff08;个&#xff09;&#xff1a;决定了 GPU 并行处理能力&#xff0c;在 AI 等并行计算类业务下&#xff0c;CUDA 核心越多性能越好。 显存容量&#xff08;GB&#xff09;&#xff1a;决定了 GPU 加载数据量的大小&#xff0c;在 AI…

《Python实战进阶》No 10:基于Flask案例的Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻击

第10集&#xff1a;Web 安全性&#xff1a;防止 SQL 注入、XSS 和 CSRF 攻击 在现代 Web 开发中&#xff0c;安全性是至关重要的。无论是用户数据的保护&#xff0c;还是系统稳定性的维护&#xff0c;开发者都需要对常见的 Web 安全威胁有深刻的理解&#xff0c;并采取有效的防…

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

盛铂科技SCP4000射频微波功率计与SPP5000系列脉冲峰值 USB功率计 区别

在射频&#xff08;RF&#xff09;和微波测试领域&#xff0c;快速、精准的功率测量是确保通信系统、雷达、卫星设备等高性能运行的核心需求。无论是连续波&#xff08;CW&#xff09;信号的稳定性测试&#xff0c;还是脉冲信号的瞬态功率分析&#xff0c;工程师都需要轻量化、…

自学微信小程序的第十三天

DAY13 1、使用map组件在页面中创建地图后&#xff0c;若想在JS文件中对地图进行控制&#xff0c;需要通过地图API来完成。先通过wx.createMapContext()方法创建MapContext&#xff08;Map上下文&#xff09;实例&#xff0c;然后通过该实例的相关方法来操作map组件。 const m…

深入解析 C# 中的泛型:概念、用法与最佳实践

C# 中的 泛型&#xff08;Generics&#xff09; 是一种强大的编程特性&#xff0c;允许开发者在不预先指定具体数据类型的情况下编写代码。通过泛型&#xff0c;C# 能够让我们编写更灵活、可重用、类型安全且性能优良的代码。泛型广泛应用于类、方法、接口、委托、集合等多个方…

H5DS编辑器是如何让企业快速构建动态页面

H5DS编辑器核心亮点&#xff1a; 1.拖拽式操作&#xff0c;小白友好&#xff1a;无需设计与代码基础&#xff01;通过简单拖拽元素、调整文字和动画&#xff0c;即可生成交互式H5页面。内置海量模板和素材库&#xff0c;支持自定义设计风格&#xff0c;轻松适配企业品牌需求。…

Unity ECS与MonoBehaviour混合架构开发实践指南

一、混合架构设计背景 1. 技术定位差异 ECS&#xff08;Entity Component System&#xff09;&#xff1a;面向数据设计&#xff08;DOD&#xff09;&#xff0c;适用于大规模实体计算&#xff08;如10万单位战斗&#xff09; MonoBehaviour&#xff1a;面向对象设计&#xf…

[项目]基于FreeRTOS的STM32四轴飞行器: 三.电源控制

基于FreeRTOS的STM32四轴飞行器: 三.电源控制 一.IP5305T芯片手册二.电源控制任务 一.IP5305T芯片手册 注意该芯片低功耗特性&#xff0c;为防止进入待机&#xff0c;每隔一段时间发送一个电平。 官方提供的芯片外围电路设计图&#xff1a; 电气特性&#xff1a; 当负载电流持…

java环境部署

java环境部署 一、准备工作 jrejdkeclipse jdk下载&#xff1a;21和1.8-----官网&#xff1a;Oracle&#xff1a;Java 下载 |神谕 该处选择要依据自身的系统类型选择下载 idea的下载安装&#xff1a;IntelliJ IDEA | Other Versions 二、安装 三、环境配置 四、使用 五、i…

微服务通信:用gRPC + Protobuf 构建高效API

引言 在微服务架构中&#xff0c;服务之间的通信是系统设计的核心问题之一。传统的RESTful API虽然简单易用&#xff0c;但在性能、类型安全和代码生成等方面存在一定的局限性。gRPC作为一种高性能、跨语言的RPC框架&#xff0c;结合Protobuf&#xff08;Protocol Buffers&…

使用 Docker 和 Nginx 高效部署 Web 服务(适用于慈云数据云服务器)

前言 在现代 Web 服务部署中&#xff0c;Docker 和 Nginx 的结合是一种高效、灵活且可扩展的解决方案。 Docker 使应用程序及其依赖项封装到一个独立的容器中&#xff0c;确保一致性&#xff0c;并简化部署过程。Nginx 作为高性能 Web 服务器和反向代理&#xff0c;能够高效处…