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

虚拟地址空间

mm_struct

管理进程的整个虚拟地址空间,记录代码段/数据段/堆/栈的边界,维护页表和 VMA。

struct mm_struct {
    unsigned long start_code, end_code;    // 代码段起始/结束地址
    unsigned long start_data, end_data;    // 数据段起始/结束地址
    unsigned long start_brk, brk;          // 堆的起始/当前边界
    unsigned long start_stack;             // 栈的起始地址
    unsigned long arg_start, arg_end;      // 命令行参数地址范围
    unsigned long env_start, env_end;      // 环境变量地址范围
    pgd_t *pgd;                            // 页目录表指针
    struct vm_area_struct *mmap;           // 虚拟内存区域链表头
    // ...
};

vm_area_struct

细化虚拟内存区域(如权限、文件映射),通过链表/红黑树组织

struct vm_area_struct {
    unsigned long vm_start;          // 区域起始地址
    unsigned long vm_end;            // 区域结束地址
    struct mm_struct *vm_mm;        // 所属的 mm_struct
    unsigned long vm_flags;          //访问权限
    struct file *vm_file;            // 映射的文件(如果有)
    struct vm_area_struct *vm_next;  // 链表下一个 VMA
    // ...
};

fork() 时的页表管理

  1. ​父子进程共享物理页

    • fork() 创建的子进程会复制父进程的 ​​页表​,同一虚拟地址映射相同物理页​
    • 内核会同时降级父进程和子进程的页表权限​​,将它们都标记为​​只读(Read-Only)​​,以实现写时拷贝(COW)
  2. ​写入时触发缺页异常​

    • 当父进程或子进程尝试​​写入共享页​​时,CPU 检测到​​页表权限不足​​(只读页被写入),触发 ​​缺页异常(Page Fault)​​。
    • 异常中断函数发现这是 ​​COW 页​​,于是:
      • ​分配新物理页​​,复制原页内容。
      • ​更新当前进程的页表​​,使其指向新页,并恢复​​可写权限​​。
      • ​另一进程仍指向旧页​​。

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

相关文章:

  • 第四章、SKRL(1): Examples
  • Python实例题:Python 实现简易 Shell
  • Python的传参过程的小细节
  • 什么是5G前传、中传、回传?
  • 数据分析—Excel数据清洗函数
  • Compose Kotlin Multiplatform跨平台基础运行
  • CM0启动CM7_0、CM7_1注意事项
  • PCB设计教程【入门篇】——电路分析基础-基本元件(电阻电容电感)
  • Docker 入门指南:从安装配置到核心概念解析
  • [ 计算机网络 ] | 宏观谈谈计算机网络
  • 十三、Hive 行列转换
  • 计算机视觉与深度学习 | Python实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据
  • netcore项目使用winforms与blazor结合来开发如何按F12,可以调出chrome devtool工具辅助开发
  • 通过低功耗蓝牙通信实例讲透 MCU 各个定时器
  • AT 指令详解:基于 MCU 的通信控制实战指南AT 指令详解
  • ESP32开发-两个WIFI设备的通讯搭建
  • AI大模型从0到1记录学习numpy pandas day25
  • 无人设备遥控器之数据压缩与编码技术篇
  • PLC组网的方法、要点及实施全解析
  • android13以太网静态ip不断断开连上问题
  • C++(24):容器类<list>
  • Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览
  • MAC常用操作整理
  • MAC电脑中右键后复制和拷贝的区别
  • C++:与7无关的数
  • 基于 Vue 和 Node.js 实现图片上传功能:从前端到后端的完整实践
  • 汽车零部件的EMI抗扰性测试
  • Java中的流详解
  • vue3 vite 路由
  • 容器化-K8s-镜像仓库使用和应用