我有一些共享库映射到我的任务的虚拟地址空间。当我在.bss部分更改某些数据时会发生什么?我使用物理页面地址作为参数的kmap
来做。我可以提出两种方法。数据会发生变化,并且会影响使用该库的所有任务或由于COW而复制某个页面。
答案 0 :(得分:0)
我认为它既不是。加载可执行文件时设置.bss区域。此时为其分配虚拟内存空间,并且该空间不会与任何其他任务共享。最初不会分配页面(默认情况下,mlock *可以更改);它们将被引用(即需求归零)。
我认为即使进程在触摸内存之前进行分叉,新进程也会获得等效的(相同的虚拟内存空间标记为demand-zero)。
因此,如果您已经拥有了实际地址,我认为已经发生了,除了属于当前流程的一个页面之外,您不会更改任何内容。