MIT 6.1810: xv6 book Chapter5: Page faults 笔记

RISC-V在下列情况发生缺页中断:1.使用未被映射的虚拟地址;2.映射的PTE_V为0;3.映射的perm位禁止了对应操作(WRXU)

RISC-V区分了下列三种缺页:1. load 加载页错误;2. store 存储页错误;3.instructions 指令页错误

scause 存储了缺页的种类,stval 存储了不能被翻译的地址

在RISC-V中,13 - load page fault, 15 - store page fault, 12 - instructions page fault, 8 - ecall

利用页表和缺页中断,可以实现:

1.写时复制,在父进程和子进程间共享内存

2.内存映射文件,将文件内容放在进程的地址空间内,触发缺页中断时读取文件块

3.惰性内存分配(xv6实现)

Lazy allocation

优点:

1.惰性分配允许应用申请大量内存,内核却不必为申请的内存中不使用的页做任何事

2.将短时间分配大量物理页,均摊到很长一段时间内每次分布少量物理页

缺点:

1.缺页中断导致的额外的用户/内核切换(solutions:每次缺页中断分配一批连续页;特化entry/exit代码)

2.若触发缺页中断时内存不足,只能杀死应用而非返回error

Real world: Copy-On-Write(COW) fork

子进程在复制父进程内存时,创建子进程的PTE指向与父进程相同的物理页,将所有物理页都映射为只读,父进程和子进程可以读取同一段物理内存

当一方要写入物理内存时,因为PTE_W被设为0,触发缺页中断

内核会分配一个新的物理页,将原来物理内存的内容复制进去,并将其映射为可读写,使PTE对应到这个新的物理页

这样就可以写入物理内存了

COW需要一种引用计数机制来记录每个页是否能被释放

e.g. 一个进程产生一个存储页错误,但这个物理页引用计数为1,只被当前进程页表引用,则不需要复制,直接修改PTE权限

Real world: Demand paging

xv6中,exec会在应用开始前将应用的代码段和数据段复制到内存中

现代操作系统,则会建立页表项,将其设为invalid,使用时触发缺页中断分配物理页

当物理内存满时,需要通过换出内存中的一个页来保证能从磁盘中换入一个页

此时缺页处理延迟会很大

相关推荐
rime_neko2 小时前
开发部署笔记
笔记
AOwhisky2 小时前
MySQL 学习笔记(第三期):SQL 语言之数据操作与单表查询
linux·运维·笔记·sql·学习·mysql·云计算
Niyy_2 小时前
Rust 学习笔记 01
笔记·学习·rust
whyTeaFo3 小时前
MIT 6.1810: Lab cow: Copy-on-Write Fork for xv6
笔记
baby_hua3 小时前
ComfyUI 工作流 模型学习笔记1
笔记·学习
sheeta19983 小时前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3633. 最早完成陆地和水上游乐设施的时间 I
笔记·算法·leetcode
xuhaoyu_cpp_java3 小时前
项目学习(一)逆向工程学习
经验分享·笔记·学习
東隅已逝,桑榆非晚3 小时前
数据结构:算法效率与复杂度分析详解
数据结构·笔记·算法
数智工坊4 小时前
周志华《Machine Learning》学习笔记--第六章--支持向量机
笔记·神经网络·学习·算法·机器学习·支持向量机