赞
踩
lab3 主要是页表相关,难度突然提高了好多,遇到了无数个坑,太难了。
第一个进程启动时打印页表内容
内容分析:
… 0:
… … 0:
… … … 0:标志位0x1f,用户可以访问,是代码,全局变量页表
… … … 1:标志位0x0f,用户不可以访问,就是守护页,因为栈是往下增长的,防止用户栈增长到守护页,最多只能到栈底
… … … 2:标志位0x1f,表示堆栈
… 255:
… … 511:
… … … 510:标志位0x07,可读写,是trapframe页,用来恢复和保存寄存器的页
… … … 511:标志位0x0b,可执行可读,trampoline页
实现:
kernel/vm.c
里添加,递归实现即可
目前xv6的实现里,每个进程只有一张独立的用户地址空间页表,共享一张内核页表,这样的话每次内核不能直接使用用户指针,只能先将其通过用户页表转为物理地址。本节及下一节要做的是使内核可以直接解引用用户指针,就是可以直接通过虚拟地址访问。
本节要做的就是为每个进程复制一个内核页表。
省略了 添加函数到defs.h
的步骤,这一节一些实现与下一节相关。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。