xv6 lec04 Page tables
4.1 课程内容简介
4.2 地址空间(Address Spaces)
4.3 页表(Page Table)
- 页表主要是在硬件中通过处理器与内存管理单元(Memory Management Unit)实现,所以,在你们的脑海中,应该有这么一张图:CPU正在执行指令,例如sd $7, (a0)。对于任何一条带有地址的指令,其中的地址应该认为是虚拟内存地址而不是物理地址。
- 在RISC-V中,页表的地址是存放在SATP寄存器中,SATP中存的是物理地址
- MMU会去内存中读取page table,然后完成翻译
- 物理内存是56bit是因为主板上只有56根线
- MMU如果索引结果为空,那么就是page fault了?
4.4 页表缓存(Translation Lookaside Buffer)
- TLB中保存的是虚拟地址到物理地址的映射缓存
- TLB会在切换页表的时候清空,清空快表的指令是sfence
- page table是由硬件实现的,所以在xv6中,page table的查找发生在硬件中,MMU是硬件的一部分而不是OS的一部分。但是在XV6中有个叫walk的函数模拟了MMU的功能
- 每一个CPU核中,都有一个MMU与TLB,对于cache的地址索引会根据其是由物理地址还是虚拟地址索引,来决定其索引是MMU前后
4.5 Kernel Page Table
- kernel stack被映射了两次?在kernel data处也映射了kernel page,在PHYSTOP之上也映射了kernel stack,也就说高处的虚拟地址的kernel stack因为存在guard page,好处理错误,所以kernel stack的虚拟地址都用的是PHYSTOP之上的。但是在scheduler中涉及到了kernel stack的直接映射的获取,那么scheduler究竟到底什么时候被设置的?
- 在free memory对应的物理地址中存放用户进程的text,data,page table
4.6 kvminit 函数
4.7 kvminithart 函数
- kvminit函数设置了SATP函数
- 在这条指令之前,使用的内存地址都是真实的物理地址
4.8 walk 函数
- 为什么3级page table会比大的page table更好呢?