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,使用时触发缺页中断分配物理页

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

此时缺页处理延迟会很大

相关推荐
LuminousCPP30 分钟前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
一条破秋裤3 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
kyrie_sakura4 小时前
python学习笔记11 -- 进程和线程
笔记·python·学习
自小吃多4 小时前
PCB Editor软件差分对添加与设置笔记
笔记·嵌入式硬件
Capricorn19886 小时前
防编造架构实战:对比 Gemini Notebook 解析知芽 Notebook Skill 的工程实现
人工智能·笔记·elasticsearch·架构·知识图谱·论文笔记
Shell运维手记6 小时前
Linux mdadm 软 RAID + LVM 完整综合笔记
linux·运维·笔记·5g
疯狂打码的少年6 小时前
【数据库技术】SQL数据查询(SELECT基本语法)
数据库·笔记·sql·oracle
Made in Haven7127 小时前
HTML课程笔记补2
前端·笔记·html
夕除7 小时前
redis--010
笔记·分布式·学习
ouynagda7 小时前
HTTP协议与Socket网络编程笔记
网络·笔记·http