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

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

此时缺页处理延迟会很大

相关推荐
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
深圳老胡1 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师2 天前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ2 天前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen872 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅2 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
陈年老古董2 天前
MediaPipe 姿态检测与脸部关键点检测
笔记·python·opencv·学习·dlib
彧azz2 天前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构