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

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

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

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

    •  

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

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

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

关于fork函数你不知道的一些小细节_第4张图片

 关于fork函数你不知道的一些小细节_第5张图片

 

你可能感兴趣的:(linux,学习笔记,linux,运维,服务器)