【问题标题】:mapping virtual address (logical address) to physical address将虚拟地址(逻辑地址)映射到物理地址
【发布时间】:2021-05-13 13:53:44
【问题描述】:

这个问题是指使用分段和分页的架构。在这个架构中,32位的虚拟地址分为如下几个字段:

                       4 位段号 | 12 位页码 | 16位偏移

找到以下每个虚拟地址对应的物理地址(如果虚拟地址无效,请回答“bad virtual address”)。

1.00000000

2.20022002

3.10015555

请帮帮我,我不知道如何为这个映射创建页表和段表!!!

【问题讨论】:

  • 这不是常见的术语,分割只是不能那样工作。您需要有关段的信息才能知道段的开始位置。您还需要页表来说明某个地址将到达的位置。您要么没有分享问题的一些重点,要么您的老师需要了解有关分页的更多信息。

标签: operating-system mapping paging virtual-address-space


【解决方案1】:

你对细节有点害羞,所以让我们填写一些:

  1. 每个段都有与之关联的 4096 (=2^12) 个条目转换表;否则就没意思了。
  2. 每个条目都将包含一个物理基地址。
  3. 额外的偏移量将被添加到这个基地址以找到最后一个。

因此,在这个假设的 MMU 中,我们可以有如下函数:

paddr_t translate(uint32_t vaddr) {
    return segment[vaddr>>28].page[(vaddr>>16)&0xfff] + (vaddr & 0xffff);
}

真正的(有用的)mmu 会更像:

paddr_t   translate(uint32_t vaddr) {
    seg_t *seg;
    page_t *page;
    if ((seg = segment[vaddr>>28]) && (page = seg->pagetab[(vaddr>>16)&0xfff])) {
         return page->base + (vaddr & 0xffff);
    } else {
         raise(SEGV);
    }
}

这显示了段和页面映射的稀疏性。它也可能有一些权限,但这应该有助于您克服下一个障碍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多