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

Video Lecture 8 Page Fault

文章目录

      • 2.2 Zero-fill-on-demand
      • 2.3 Copy-on-write-fork
      • 2.4 Demand Paging
  • 思考问题
  • MIT 6.S081 Lecture 8 – Page Fault 课堂笔记
    • 1. 页故障(Page Fault)基础
    • 2. Lazy Allocation(按需分配)
    • 3. Copy-on-Write Fork
    • 4. Zero-fill-on-demand
    • 5. 与后续实验/主题的衔接
    • 6. Memory-mapped files
    • 6. 课堂 Q&A 精选
    • 6. 小结

关键词:copy-on-write fork, zero fill-on-deman

2.2 Zero-fill-on-demand

2.3 Copy-on-write-fork

2.4 Demand Paging

思考问题

1 Linux系统如何处理Page fault? FreeRTOS如何处理Page Fault?

MIT 6.S081 Lecture 8 – Page Fault 课堂笔记

课程主页:
https://pdos.csail.mit.edu/6.828/2021/schedule.html
对应视频:2020/2021 版 Lecture 7(Frans)或 Lecture 8(2021 版为 Q&A),下文统一按「Lecture 8」整理。
建议阅读:xv6 book §4.6「Page-fault exceptions」


1. 页故障(Page Fault)基础

  • 触发条件
    在XV6系统中,Page Fault只会发生在用户空间。
    CPU 访问某虚拟地址时发现 PTE 无效或权限不符 → 抛出 page-fault exception。

  • 硬件为 OS 提供的三要素[6]

    1. STVAL:触发故障的虚拟地址。
    2. SCAUSE:故障类型(13=读缺页,15=写缺页,12=指令缺页)。
    3. SEPC:触发指令的 PC,用于返回后重试。
  • 处理入口
    usertrap()r_scause() 判断为 page fault → 交给相应处理例程。
    Scause寄存器说明


2. Lazy Allocation(按需分配)

Eager AllocationLazy Allocation
sbrk() 立即分配物理页仅增加 p->sz,不分配物理页
进程实际未用也占内存真正访问时才 page-fault,再分配
易导致物理内存耗尽显著节省内存,提高 fork+exec 效率
  • 实现要点[1]

    1. sbrk 只修改 p->sz
    2. 首次访问新 heap 区域 → page fault → 检查 va 位于 [old_sz, new_sz) 之间。
    3. kalloc 一页 → 清零 → mappages 建立映射 → 返回用户空间重新执行指令。
    4. 若已无物理页可分配 → 直接杀死进程(lazy lab 简化处理)。
  • 如何区分「合法未分配」与「非法地址」
    低于当前 p->sz 且高于 stack 视为合法 heap;否则视为段错误,杀死进程[1]。


3. Copy-on-Write Fork

  • 动机
    传统 fork 立即复制父进程全部页 → 耗时且浪费内存。
    COW 让父子进程共享所有物理页,但把对应 PTE 设为 只读

  • 工作流程[1]

    1. fork 复制页表,但所有 PTE 清除 PTE_W、置 COW 标志(利用 PTE 的 RSW 位)。
    2. 任一进程对共享页执行写操作 → 触发 page fault(写保护异常)。
    3. 内核识别 COW 位 → kalloc 新页 → 拷贝旧页内容 → 更新子(或父)页表,使其 可写且私有 → 重新执行指令。
    4. 未修改页继续共享,显著减少内存占用。
  • PTE 标志位约定
    RISC-V PTE 低 8 bit 外还有两位 RSW(supervisor usable)。
    实验中用 RSW 第 8 位表示 “这是 COW 页”,区分普通只读页[1]。


4. Zero-fill-on-demand

对于分配未初始化变量的BSS段,由于它们的值都为0,因此它们的VA可以指向同一个数据都为0的PA(该PA设置为只读)。当有写操作写到该VA时,会触发Page fault,进而进行进一步处理。

5. 与后续实验/主题的衔接

Lab/主题与 Page Fault 的关联
Lab: traps (lazy allocation)实现上述 lazy allocation 机制。
Lab: cow (copy-on-write fork)实现 COW 的完整 fork 优化。
Lab: mmap用 page fault 惰性填充文件映射页,支持按需读/写文件页[3]。
后续 LectureDemand paging、Memory-mapped files、Page replacement 等进一步利用 page fault。

6. Memory-mapped files

Memory-mapped files(内存映射文件)是一种将文件内容直接映射到进程虚拟地址空间的技术,使应用程序可以像访问内存一样读写文件数据,无需传统read/write系统调用。
文件内容被映射到进程虚拟地址空间,程序通过指针直接读写文件数据,消除用户态与内核态的数据复制开销

6. 课堂 Q&A 精选

  • Q:如果物理内存耗尽怎么办?
    A:简化版直接 kill 进程;真实 OS 可能 swap 或内存压缩。

  • Q:如何知道是 COW 还是普通写保护?
    A:利用 PTE 的保留位做标记,page fault 时检查。

  • Q:父进程写共享页也会被 COW 吗?
    A:是的,与进程身份无关,只要 PTE 为只读+COW 位。


6. 小结

  1. Page fault 是把「缺页或权限异常」转化为「内核机会」的核心机制。
  2. 通过 lazy allocation 与 copy-on-write,xv6 显著降低了内存占用与 fork 成本。
  3. 两个实验(lazy、cow)将课堂概念落地,并为后续 mmap、demand paging 奠定基础。
http://www.dtcms.com/a/324798.html

相关文章:

  • 7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序
  • LightGBM 与 GBDT 在机器学习中的性能与特点比较
  • element-ui el-progress在有小数的情况下,会换行显示。解决不换行的问题。
  • redis集群-本地环境
  • 【前端基础】14、CSS设置背景(background相关的)
  • 正则表达式常用语法参考
  • STM32H7 以太网配置引申的内存问题
  • A2A协议深度理解与实践
  • 解决 .NET Core 6.0 + PostgreSQL 网站首次连接缓慢问题
  • 安全生产基础知识(一)
  • 去除Edge微软浏览器与Chrome谷歌浏览器顶部出现“此版本的Windows不再支持升级Windows 10”的烦人提示
  • 深度剖析 Linux 信号:从基础概念到高级应用,全面解析其在进程管理与系统交互中的核心作用与底层运行机制
  • 【牛客刷题】REAL799 翻转01 (饿了么面试题)
  • Vue 事件冒泡处理指南:从入门到精通
  • 亚麻云之监控管家——CloudWatch基础监控
  • socket编程中系统调用send()详细讲解
  • 《算法导论》第 16 章 - 贪心算法
  • ATF(TF-A)安全通告 TFV-12(CVE-2024-5660)
  • 2025年Java 面试题及答案整理(金九银十最新版,持续更新)
  • vuhub Beelzebub靶场攻略
  • 从零学习three.js官方文档(二)——图元
  • 数据结构2线性表——顺序表
  • Python高阶
  • 企业架构之导论(1)
  • 2025华数杯比赛还未完全结束!数模论文可以发表期刊会议
  • C# 异步编程(并行循环)
  • 内存溢出的原因有哪些,如何排查线上问题?
  • 【Spring Boot刷新上下文核心流程详解】
  • UNIVERSAL IMAGE RESTORATION PRE-TRAINING VIA DEGRADATION CLASSIFICATION
  • 【Python 工具人快餐 · 第 5 份】