在copy on write (COW)
之前,当它表示父进程和子进程共享相同的地址空间时,这意味着它们共享相同的代码段,数据段,堆和堆栈吗?
如果父进程和子进程在COW之前共享相同的地址空间,那么the page table entries are copied from parent process to child process
意味着什么?
复制页表条目是否意味着重复地址空间?
答案 0 :(得分:5)
假设你的进程得到var名称X,其虚拟地址为100,物理地址为200。 PTE正在保存从虚拟100到物理200的地址映射。
在fork之后,每个进程(父进程和子进程)将拥有他的私有PTE。此时,两个PTE都会将虚拟100映射到物理200.只要两个进程都从那里读取,它们都将从物理地址200读取。
当第一个将尝试在那里写时,来自物理地址的数据将被复制到一个新的物理空间,比方说300,并且他的(并且只有他的)PTE将被更新,因此虚拟100将被映射到物理300.这样一来,它对流程是透明的,因为他仍在使用相同的(虚拟)地址。
*注意:这只是一个摘要,真实的事情发生在页面解析中。
答案 1 :(得分:2)
页表是一个按进程数据结构,它在线性地址和物理地址之间进行映射。页表条目从父项复制到子项,这意味着在fork()
之后,两个进程都使用相同的页表,这些页表将相同的物理地址映射到每个进程地址空间中的相同线性地址。但是,在此之后,当每个COW故障发生并且其他地址空间发生变化时,页表开始发散。
答案 2 :(得分:2)
是的,进程(父级和子级)共享相同的物理内存。
这意味着每个人都有自己的PTE,将虚拟地址空间转换为物理地址空间。在叉子之后它们通常是相同的。
是的,这意味着在fork之后每个人都有自己的地址空间,这些地址空间在开始时是相同的,但可以并且稍后会更改。例如关于COW,malloc,free,基本上是为了改变进程的内存使用情况。