接下来,加载程序创建一个基本页表。此页表映射虚拟内存基础上的64 MB(从虚拟地址开始) 0)直接到相同的物理地址。它也映射相同 物理内存从虚拟地址LOADER_PHYS_BASE开始,其中 默认为0xc0000000(3 GB)。 Pintos内核只需要后者 映射,但如果我们不包括,那就有鸡和蛋的问题 前者:我们当前的虚拟地址大约是0x20000的位置 装载机放在哪里,直到我们转弯才能跳到0xc0020000 在页面表上,但如果我们打开页面表而不跳转 在那里,我们刚从地下拉出地毯。
引用来自:https://web.stanford.edu/~ouster/cgi-bin/cs140-winter16/pintos/pintos_6.html
我认为我不明白上面写的是什么。 我的问题:
我们假设内核是由引导程序加载到0x20000物理地址。据我所知,两个不同的虚拟地址映射到内核的同一个地方。第一个直接映射:~0x20000 -> ~0x20000
。第二个~0xc0000000 -> ~0x20000
。但是,为什么需要使用两个映射?
我看不出为什么页面表(和页面目录)必须按身份映射。
请解释。