指向另一个进程的内存位置的指针

Pra*_*abu 3 virtual-memory

我遇到过这个问题:'如果进程A包含指向进程B中变量的指针,A是否可以访问和修改该变量?'

我的直觉是,由于进程A和B不同,因此不应允许它们访问彼此的地址空间,因为它会违反保护.

但经过一番思考后,我脑海中浮现出以下问题,并希望得到澄清.

(一世).当我们说A有一个指向B中变量V的指针时,A是否保存对应于V或物理地址的虚拟地址(进程B)?

我相信当我们谈论虚拟内存系统中的地址时,我们总是谈论虚拟地址.请澄清.

(ⅱ).如果A包含虚拟地址,由于A和B都可能具有相同的虚拟地址,A的页面表可能包含A保存的虚拟地址的映射(实际上是变量V的虚拟地址)过程B).然后,当A尝试访问和修改该虚拟地址时,它会在自己的地址空间中修改某些内容(由于A访问自己的地址,因此将允许此访问).

我认为当我们尝试从进程访问一些随机虚拟地址时,上述推理适用,即,我们尝试访问的地址意外地具有有效映射.

请抛出你的想法.

Dar*_*ust 5

现代操作系统中出现的流程和内存管理的全部要点是,您不能拥有从一个进程到另一个进程的指针.它们的内存是分开的,一个进程通常看不到另一个内存的内存.对于每个进程来说,它看起来几乎拥有系统可用的所有内存,就好像只有这一个进程(以及内核,它可能将内容映射到进程的内存区域).

例外是共享内存:如果两个进程共享共享内存区域并且两个进程都具有修改区域的访问权限,则是,一个进程可以修改另一个进程的内存(但仅限于该共享内存区域的范围内) ).

IIRC,它在最低级别上工作:内核管理每个进程的内存区域列表.这些区域可能映射到物理内存.如果区域未映射到物理内存并且进程尝试访问该区域,则CPU会通知内核使其可用(例如,通过从交换文件/分区加载其内容).如果两个进程使用共享内存,则对于这两个进程,这些区域将映射到相同的物理内存位置(或交换文件位置).您可能想要阅读有关MMU虚拟内存的信息.