Lab3 Page Tables
0 lecture 4 & chapter 3
Lecture 4
Chapter 3 Page tables
xv6的页表映射机制
xv6 内核地址空间
xv6的页表代码
vm.c
核心数据结构:==pagetable_t==
核心函数:==walk== 和 ==mappages==
物理地址分配代码
kalloc.c
核心数据结构:==kmem==
核心函数:==kfree== 和 ==kalloc==
进程地址空间
系统调用:sbrk 和 exec
sbrk:为一个进程去减少或者增加它的内存(kernel/sysproc.c
)
exec:创建一个地址空间的用户部分
what is trampoline?
trampoline page存储了用户空间和内核空间相互切换的代码,无论是在内核空间还是在用户空间它都映射在相同的虚拟地址,这样在切换之后还可以继续工作。
相关文章:What is trampoline?
what is trapframe?
trapframe
是存在于用户地址空间,位于trampoline
下面的大小为PGSIZE
(4096字节)的一块内存,用于在用户地址空间向内核地址空间切换时保存用户空间的寄存器。
1 Speed up system calls
任务描述:加速getpid()
系统调用。方法是在trapframe
前面映射一个只读的页,在这个页的开始,存储一个结构体syscall
,结构体里存储当前进程的pid
,然后通过已经提供的ugetpid()
函数获得pid
。
思路:可以参考trapframe
的构造。
1 |
|
2 Print a page table
任务描述:如题要求打印页表。
思路:参考freewalk
函数进行递归。
1 |
|
3 Detecting which pages have been accessed
任务描述:检测页表是否被访问,实现pgaccess
系统调用。
思路:通过walk
函数找到虚拟地址对应的pte
,检查PTE_A
位即可。
1 |
|
:zap:访问页表时将
PTE_A
置1的工作由RISC-V硬件做了,在代码中不需要自己设置。
Lab3 Page Tables
http://example.com/2022/12/27/6.S081/6.S081-lab3-pgtbl/