Operating system 如何将两个虚拟地址空间映射到相同的物理地址范围?

Operating system 如何将两个虚拟地址空间映射到相同的物理地址范围?,operating-system,xv6,Operating System,Xv6,我认为它们可能会覆盖彼此的数据。 我知道两个相同的虚拟地址空间可以映射到物理内存。A.大多数多处理系统支持创建共享内存,其中物理内存块可以映射到多个进程。通常,映射可以是不同的虚拟地址 B.所有虚拟内存系统共享相同的物理内存。但是,在用户模式下,同一页的物理内存不能同时映射到多个进程 c。对于所有进程,内核模式地址空间通常是相同的。操作系统保留该内存区域以防止覆盖。问题不太清楚 假设使用标准硬件,虚拟地址空间由其页转换表确定。 因此,如果有两个翻译表,并且它们的条目具有相同的物理页码, 然后,在

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

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

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


c。对于所有进程,内核模式地址空间通常是相同的。操作系统保留该内存区域以防止覆盖。

问题不太清楚

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

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

问题是人们为什么会想要这样

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

好的,在内核进行上下文切换之前,将上一个进程的数据保存到哪个位置?1。如果数据是只读的,则可以将其丢弃。这通常是从可执行映像加载的。2) 如果数据是读/写的,它将被写入页面文件。但是在它被写入页面文件之后,第二个进程(上下文切换之后)可以访问该页面并覆盖该数据。我遗漏了什么吗?它可以访问物理内存中的页面;不是页面文件中页面的副本。只有内核映射到与进程相同的物理页面?可能是指以下内容。在当今的操作系统中,将内核映射为进程地址空间的一部分是很常见的。因此,虚拟地址空间的这一部分在所有进程中都是相同的。如果运行相同的exe文件(Windows)或执行fork(Unices),也会发生类似的情况。在这种情况下,代码段也映射到相同的物理地址。