两个进程如何在具有不同的虚拟内存空间时相互破坏

问题描述 投票:0回答:1

据我了解,每个进程都有自己的虚拟地址空间(2个进程可以有相同的范围,但操作系统会将逻辑地址映射到不同的物理地址)。 我读到了可能发生的内存损坏,例如,当进程 A 更改数据属于进程 B 时。

曲 1: 怎么可能?进程 A 可以使用它的任何虚拟地址空间,如果它试图写入它尚未使用的地址(在页面中),操作系统将产生页面错误。如果该地址被禁止访问,那么该进程将收到警报。 所以,不存在进程A更改进程B的数据的选项,因为进程A的虚拟地址空间与进程B的虚拟地址空间完全不相关。 MMU 总是将进程 A 的虚拟地址映射到它拥有的页面,或未映射的页面,因此会发生页面错误,但没有将其映射到进程 B 的物理地址的情况。 正如我所见,一个进程只能破坏它自己的数据,而不能破坏任何其他进程数据。 我的错误在哪里?

曲 2: 我知道进程的虚拟地址空间大小受磁盘大小的限制。 两个进程如何具有磁盘大小(或 RAM 大小)的虚拟地址空间大小,它们的大小总和远大于磁盘大小(或 RAM 大小)。

谢谢:)

virtual-memory memory-corruption
1个回答
0
投票

答案1:按照设计,如果相关的硬件和软件设计和实现是正确的,并且相关硬件始终正确运行,则不应发生这种情况。不同的进程应该只允许通过定义的接口更改另一个进程的内存,当它们通过设计相互通信时。

© www.soinside.com 2019 - 2024. All rights reserved.