地址空间和页表之间的关系是什么?我知道每个进程都应该有一个页面表,它在虚拟地址和物理地址之间进行映射。但是地址空间的作用是什么呢?在os161中,地址空间看起来像:
struct addrespace {
vaddr_t as_vbase1;
paddr_t as_pbase1;
size_t as_npages1;
vaddr_t as_vbase2;
paddr_t as_pbase2;
size_t as_npages2;
paddr_t as_stackpbase;
}
我们使用以下方法将虚拟地址(vaddr)转换为物理地址:
paddr = vaddr - as_vbase1 + as_pbase1
我们似乎可以使用addrespace从虚拟地址中获取物理地址。如果我们可以使用addrespace来进行虚拟到物理内存的映射,为什么我们需要页面表?
期待您的帮助!谢谢
首先,非常感谢您的提问。尽管我还是OS161的新手,正在努力理解代码,但我会告诉你我到目前为止所理解的内容。请随时纠正我。
我们需要一个页面表来跟踪分配给我们流程的所有页面,而不仅仅是因为我们需要从虚拟地址转换为物理地址。
如果页面在内存中,并且所需页面在磁盘上,则页面表还会跟踪页面,这将触发页面故障。在这种情况下,我们应该分配一个新页面,从磁盘加载一个页面,更新页面表,并更新TLB条目。
任何页面都会经历不同的状态,如空闲、脏(应该写入磁盘)等。有些页面永远不应该交换出去,它们总是留在内存中。页面表也会跟踪这些状态。
即使这篇文章也可能对你有所帮助。。为什么每个进程一页表