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 函数
这里指的128是这个
4.7 kvminithart 函数
- kvminit函数设置了SATP函数
- 在这条指令之前,使用的内存地址都是真实的物理地址
4.8 walk 函数
- 为什么3级page table会比大的page table更好呢?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!