【问题标题】:How two virtual address spaces can be mapped to the same physical address range?如何将两个虚拟地址空间映射到同一个物理地址范围?
【发布时间】:2014-05-11 19:40:04
【问题描述】:

我认为他们可能会覆盖彼此的数据。 我知道两个相同的虚拟地址空间可以映射到物理内存。

【问题讨论】:

    标签: operating-system xv6


    【解决方案1】:

    A.大多数多处理系统支持创建共享内存,其中物理内存块可以映射到多个进程。通常,映射可以到不同的虚拟地址。

    B.所有虚拟内存系统共享相同的物理内存。但是,在用户态下,同一页物理内存不能同时映射到多个进程。

    c。所有进程的内核模式地址空间通常是相同的。操作系统会维护该内存区域以防止被覆盖。

    【讨论】:

    • 好的,在内核进行上下文切换之前,前一个进程的数据保存到哪里?
    • 1.如果数据是只读的,它可以被丢弃。这通常是从可执行映像加载的。 2)如果数据是读/写的,它将被写入页面文件。
    • 但是在它被写入页面文件之后,第二个进程(在上下文切换之后)可以访问该页面并覆盖该数据。我错过了什么吗?
    • 它可以访问物理内存中的页面;不是页面文件中的页面副本。
    【解决方案2】:

    这个问题不太清楚。

    假设标准硬件,虚拟地址空间由其页面转换表确定。 因此,如果有两个翻译表,并且它们的条目具有相同的物理页码, 那么您在两个虚拟空间中都有使用相同物理页面的页面。

    如果上述情况适用于转换表中的所有条目,您会得到两个地址空间映射到相同的物理范围。

    问题是为什么要这样。

    如果您希望两个不同的进程在此配置中实际工作,那么它们不能并行运行(即在两个 CPU 上)。更糟糕的是,在计划进程 1 之前,必须确保 process1 内存的内容就位。 这可能需要复制出 process2 内存内容(到不同的内存地址、磁盘或其他)并将 process1 内存的内容复制回。

    【讨论】:

    • 只有内核映射到与进程相同的物理页面?
    • 也许你的意思如下。在当今的操作系统中,将内核映射为进程地址空间的一部分是很常见的。因此,这部分虚拟地址空间在所有进程中都是相同的。如果您运行相同的 exe 文件 (Windows) 或执行 fork (Unices),也会发生类似的情况。在这种情况下,代码部分也映射到相同的物理地址。
    猜你喜欢
    • 1970-01-01
    • 2017-05-06
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多