微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决共享地址空间与复制页表项

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。