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

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       

相关文章:

  • pytest框架 核心知识的系统复习
  • vulnhub靶场之【digitalworld.local系列】的mercy靶机
  • c++变量和声明的语法总结
  • 塔能物联运维:城市照明极端天气下的“定海神针”
  • 计算机毕设-基于springboot的网上商城系统的设计与实现(附源码+lw+ppt+开题报告)
  • CoreDNS 可观测最佳实践
  • /***************************所有笔记汇总目录***************************/
  • 【卫星语音通信】神经网络语音编解码算法:AudioDec
  • vtk 3D坐标标尺应用 3D 刻度尺
  • DeepSeek架构革命:动态异构计算
  • Ubuntu22.04安装Ollama部署DeepSeek-R1:32B模型
  • 《2025国内免费DeepSeek-R1自部署平台实测指南:三大运营商/腾讯/华为哪家强?附避坑清单》
  • LLM | 论文精读 | GIS Copilot : 面向空间分析的自主GIS代理
  • vLLM代码推理Qwen2-VL多模态大模型(远程服务器解决方案,无需UI)
  • 数据显示不符合用户阅读习惯
  • Qt中如何从头到尾自定义设计一个标题栏
  • libcoap在Ubuntu下的编译(基于CMake)
  • Exoplayer2源码编译FFmpeg拓展模块实现音频软解码
  • 深度探索:直击服务器权限获取之旅
  • 快速开始React开发(一)