os161中地址空间和页表之间的关系是什么?

时间:2013-07-14 21:11:39

标签: operating-system os161

地址空间和页面表之间有什么关系?我知道每个进程都应该有一个页表,它在虚拟地址和物理地址之间进行映射。但是地址空间做了什么?在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)转换为物理地址:(假设段1中的vaddr)

paddr = vaddr - as_vbase1 + as_pbase1

似乎我们可以使用addrespace从虚拟地址获取物理地址。如果我们可以使用addrespace进行虚拟到物理内存映射,为什么我们需要页表?

期待您的帮助!谢谢!

1 个答案:

答案 0 :(得分:2)

首先,非常感谢这个问题。虽然我仍然是OS161的新手并且努力理解代码,但我会告诉你到目前为止我已经理解了什么。请随时纠正我。

我们需要一个页面表来跟踪分配给我们流程的所有页面,而不仅仅是因为我们需要从虚拟地址到物理地址转换的翻译。

页面表还会跟踪页面是否在内存中,以及所需页面是否在磁盘上,这会触发页面错误。在这种情况下,我们应该分配一个新页面,从磁盘加载页面,更新页面表,以及更新TLB条目。

任何页面都会遇到不同的状态,如free,dirty(应该写入磁盘)等。某些页面永远不会被换出,它们总是保留在内存中。页面表也会跟踪这些状态。

即使这篇文章也可能对你有帮助.. Why one page table per process