关于fork函数你不知道的一些小细节

  • 1、 fork在创建子进程的时候完成的事情:

    • 1.1创建子进程,子进程拷贝父进程的PCB。
    • 1.2分配新的内存块和内核数据结构(task_ struct) 给子进程
    • 1.3将父进程部分数据结构内容拷贝至子进程,
      • 只是拷贝部分,例如子进程的PID进程号就是自己的,并不是拷贝于父进程。
    • 1.4添加子进程到系统进程列表当中,添加到双向链表当中
    • 1.5fork返回,开始调度器(操作系统开始调度)调度。

  • 2、用户空间&内核空间

    • 我们用一张图来理解用户空间和内核空间
    • 内核空间:
      • Linux 操作系统和驱动程序运行在内核空间。换句话说, 系统调用的函数都是在内核空间运行的,因为是操作系统提供的函数。
    • 用户空间:
      • 应用程序 都是运行在用户空间的。换句话说,我们程序员自己写的代码都是运行在用户空间的。但是,当程序猿写的代码调用了系统调用函数,则会切换到内核空间进行执行。执行完毕之后,在返回到用户空间继续执行用户的代码。
    • 3.写时拷贝

      • 父进程创建出来子进程,子进程的PCB的拷贝父进程,页表也是拷贝父进程的。在最初的时候,同一个变量的虚拟地址和物理地址的映射关系的一样的,也就是说, 操作系统并没有给子进程当中的变量在物理内存当中分配空间进行存储,子进程的变量还是原来父进程的物理地址当中的内容。
      • 当发生改变时:才以写时拷贝的方式进行拷贝一份.此时父子进程通过各自的页表指向时不同的物理地址。

看到这里如果感觉有用不如点个赞再走吧!!! 

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月半木斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值