首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找哪些页面不再与“复制即写”共享。

问查找哪些页面不再与“复制即写”共享。
EN

Stack Overflow用户
提问于 2012-04-23 16:11:07
回答 2查看 323关注 0票数 4

假设我在Linux中有一个进程,我从其中fork()另一个相同的进程。在Linux之后,由于最初的进程将开始写入内存,所以Linux的即插即用机制将给出不同于分叉进程使用的进程独特的物理内存页。

如何在某个执行点知道原始进程的哪些页面已在写入时被复制?

我不想使用SIGSEGV信号处理程序,在开始时只允许对所有页面进行读访问,因为这会导致我不想要的开销。

EN

回答 2

Stack Overflow用户

发布于 2016-04-11 04:04:15

跟踪syscall -叉(),克隆():

在这里,您可以找到通过VMA遍历VMA的算法,将它们标记为“在写上复制”:

http://www.cs.columbia.edu/~krj/os/lectures/L17-LinuxPaging.pdf

http://www.cs.columbia.edu/~junfeng/13fa-w4118/lectures/l20-adv-mm.pdf

本质上(指幻灯片),如果PTE在不可写(这是基于硬件的)和VMA标记为可写(这是基于软件的)-这意味着内存是复制上写.。

您可以编写一个内核模块来完成这个任务。

票数 3
EN

Stack Overflow用户

发布于 2012-06-02 04:48:55

你可能得接受一些开销。

如果您有特权,您可以扩展/proc/self/pagemap (64位,偏移8*(addr / PAGE_SIZE))以获得PFN (它是低54位)。然后查找/proc/kpagecount中的PFN,查看页面是否共享。

如果您没有特权,您可以比较父级和子级页面中的PFN。

您可以通过比较Pss (比例设置大小)和/proc/smaps中的总大小来判断映射中的任何页面是否是共享的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10284181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档