linux内核执行fork时对写时复制的设置

简介: linux内核执行fork时对写时复制的设置

内核版本:Linux-5.14

在linux内核执行fork完毕后,原先父进程中可写的区域在父子进程中都被设置为了CoW,即将pte中可写的比特清除了。

下面是调用流程:[kernel/fork.c]

sys_fork
  -> kernel_clone
    -> copy_process
      -> copy_mm
        -> dup_mm
          -> dup_mmap
            -> copy_page_range
              -> copy_p4d_range
                -> 如果时PUD巨型页:copy_huge_pud: 分别将父子的PUD页表项设置为写保护
                  -> pudp_set_wrprotect(src_mm, addr, src_pud);
                  -> set_pud_at(dst_mm, addr, dst_pud, pud_mkold(pud_wrprotect(pud)));
                -> copy_pmd_range
                  -> 如果是PMD巨型页:copy_huge_pmd: 分别将父子的PMD页表项设置为写保护
                    -> pmdp_set_wrprotect(src_mm, addr, src_pmd);
                    -> set_pmd_at(dst_mm, addr, dst_pmd, pmd_mkold(pmd_wrprotect(pmd)));
                  -> copy_pte_range
                    -> copy_present_pte
                      -> 如果:is_cow_mapping(vm_flags) && pte_write(pte)
                        -> ptep_set_wrprotect(src_mm, addr, src_pte);
                        -> set_pte_at(dst_vma->vm_mm, addr, dst_pte, pte_wrprotect(pte));

如果上面的显示被自动换行了,可以点击代码右上角的全屏按钮查看

相关文章
|
6天前
|
Ubuntu Linux
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
23 0
Linux实践|设置静态 IP 地址
|
2天前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
1月前
|
存储 安全 Linux
探索Linux操作系统的心脏:内核
在这篇文章中,我们将深入探讨Linux操作系统的核心—内核。通过简单易懂的语言和比喻,我们会发现内核是如何像心脏一样为系统提供动力,处理数据,并保持一切顺畅运行。从文件系统的管理到进程调度,再到设备驱动,我们将一探究竟,看看内核是怎样支撑起整个操作系统的大厦。无论你是计算机新手还是资深用户,这篇文章都将带你领略Linux内核的魅力,让你对这台复杂机器的内部运作有一个清晰的认识。
63 3
|
1月前
|
缓存 安全 Unix
Linux 内核黑客不可靠指南【ChatGPT】
Linux 内核黑客不可靠指南【ChatGPT】
|
1月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
|
16天前
|
Linux Shell
10-8|linux date设置时间
10-8|linux date设置时间
|
1月前
|
网络协议 Ubuntu Linux
用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核
用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核
|
1月前
|
Linux
用clang编译Linux内核
用clang编译Linux内核
|
18天前
|
Unix Linux Python
Cron定时设置在linux和mac中的使用
文章详细说明了如何在Linux和Mac操作系统中使用Cron进行定时任务的设置,并提供了多个Cron表达式的实例。
31 0
|
1月前
|
Linux API 调度
关于在Linux内核中使用不同延迟/休眠机制 【ChatGPT】
关于在Linux内核中使用不同延迟/休眠机制 【ChatGPT】