加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 共享内存页面和fork

发布时间:2020-12-14 00:52:40 所属栏目:Linux 来源:网络整理
导读:如果父级正在与另一个进程共享某些页面,那么我们会分叉父级.据我所知,孩子复制了页面表,我们将页面设置为只读,然后进行Copy-On-Write.但如果我们写入错误的话,这将创建共享内存页面的副本. Linux内核如何避免这种情况? 解决方法 内核知道使用共享内存操作分
如果父级正在与另一个进程共享某些页面,那么我们会分叉父级.据我所知,孩子复制了页面表,我们将页面设置为只读,然后进行Copy-On-Write.但如果我们写入错误的话,这将创建共享内存页面的副本. Linux内核如何避免这种情况?

解决方法

内核知道使用共享内存操作分配了哪些内存页.当孩子分叉时,这些页面没有标记为Copy-on-Write,因此它们将在所有进程中保持共享.

这记录在vm_area_struct数据结构中的vm_flags成员中.其中一个标志是VM_SHARED. mm / memory.c包含以下函数,用于确定是否应将页面转换为COW

static inline int is_cow_mapping(vm_flags_t flags)
{
        return (flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
}

如果要查看有关如何设置和使用此标志的更多信息,请转到Linux Cross Reference并搜索VM_SHARED.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读