共享地址空间与复制页表项

问题描述

| 在“ 0”之前,当说父进程和子进程共享相同的地址空间时,就意味着它们共享相同的代码段,数据段,堆和堆栈,对吗? 如果父进程和子进程在COW之前共享相同的地址空间,那么“ 1”是什么意思? 复制页表项是否意味着复制地址空间?     

解决方法

        可以说,您的进程获得的变量名X具有虚拟地址100和物理地址200。 PTE正在保存从虚拟100到物理200的地址映射。 分叉之后,每个进程(父级和子级)都将拥有自己的私有PTE。此时,两个PTE都会将虚拟100映射到物理200。 只要两个进程都从那里读取,它们都将从物理地址200读取。 当第一个尝试写入那里时,来自物理地址的数据将被复制到一个新的物理空间(假设为300),并且他(并且只有他的)PTE将被更新,因此虚拟100将被映射到物理300。对过程透明,因为他仍在使用相同的(虚拟)地址。 *注意:这只是一个抽象,真正的事情发生在页面解析中。     ,        页表是每个进程的数据结构,在线性地址和物理地址之间进行映射。页表项从父级复制到子级,这意味着在ѭ2after之后,两个进程都使用相同的页表,这些页表将相同的物理地址映射到每个进程地址空间中的相同线性地址。但是,此后,随着每个COW故障的发生以及其他地址空间的更改,页表开始发散。     ,         是的,进程(父级和子级)共享相同的物理内存。 这意味着每个人都有自己的PTE,可以将虚拟地址空间转换为物理地址空间。就在叉子之后,它们通常是相同的。 是的,这意味着在派生之后每个都有自己的地址空间,这些地址空间在开始时是相同的,但是以后可以更改。例如,在COW上,malloc,free,基本上用于进程内存使用的任何更改。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...