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

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

此时缺页处理延迟会很大

相关推荐
不会代码的小猴7 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 2 章 IOC 思想与实现 阅读笔记 1
spring boot·笔记·后端
蒸蒸yyyyzwd9 小时前
秋招不熟悉力扣学习笔记1
笔记·学习·leetcode
LuminousCPP10 小时前
数据结构-双向循环链表
c语言·数据结构·笔记·链表
302wanger12 小时前
【阅读笔记】当AI拿走一切之后
笔记
疯狂打码的少年14 小时前
【数据结构】串(字符串):基本概念与存储
数据结构·笔记
Hotchip_MEMS16 小时前
TWS耳机微米级较量:超薄LGA封装如何助力MEMS麦克风小型化?
人工智能·笔记·物联网·电脑
Ztt66666666616 小时前
金泉方壶四面端正,月白釉却把棱角放柔了
经验分享·笔记·其他·百度·微信公众平台
学习和思考16 小时前
非自动化专业如何自学PLC?我的6个月学习路线图
笔记·学习·自动化·学习方法
疯狂打码的少年17 小时前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法