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

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

此时缺页处理延迟会很大

相关推荐
ab1237681 小时前
Spring WebSocket(STOMP)
笔记·websocket·springboot·stomp
Xudde.1 小时前
PwnLab: init 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
2402_846295771 小时前
eDNA常用的基因片段
笔记
AI视觉网奇2 小时前
3Dconnexion 按照笔记
笔记
海海不掉头发2 小时前
软件开发方法第七周笔记_CSDN博客
人工智能·笔记·学习·软件工程
Vae_Mars2 小时前
幂等性学习笔记
笔记·学习·wpf
Xudde.3 小时前
HackMe 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
先途检测认证3 小时前
塑料、硅胶、不锈钢材质,欧盟食品接触的测试项目有什么区别?
笔记·材质
跨知易知识产权4 小时前
美国发明专利和外观专利保护期限分别是多久,起算时间怎么界定?
笔记
wdfk_prog4 小时前
LWIP教程 16:从 MTU 到 `ip4_frag()` / `ip4_reass()`——IPv4 分片、重组、超时与内存压力
运维·服务器·网络·笔记·学习