Linux--fork创建子进程,操作系统都做了什么

一句话总结:为该进程创建内核数据结构task_struct、地址空间mm_struct、页表并创建映射关系,一定程度上还要将该进程的代码和数据加载进内存

以下是对上面的解释:

首先,fork创建子进程,是不是操作系统里多了一个进程?是的!

进程=内核数据结构(操作系统维护)+进程代码和数据(一般从磁盘中来,也就是你的c/c++程序,加载之后的结果)

进程调用fork,当控制转移到内核中的fork代码后,内核做:

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程部分数据结构内容拷贝至子进程
  • 添加子进程到系统进程列表当中
  • fork返回,开始调度器调度Linux--fork创建子进程,操作系统都做了什么_第1张图片

创建子进程,给子进程分配对应的内核结构,必须子进程自己独有了,因为进程具有独立性!理论上,子进程也要有自己的代码和数据!可是一般而言,我们没有加载的过程,也就是说,子进程没有自己的代码和数据!!所以子进程只能“使用”父进程的代码和数据!

代码:都是不可被写的,只能读取,所以父子共享,没有问题!

数据:可能被修改,所以必须分离!Linux--fork创建子进程,操作系统都做了什么_第2张图片

Linux--fork创建子进程,操作系统都做了什么_第3张图片

 OS为何要选择写时拷贝的技术,对父子进程进行分离

1.用的时候,再给你分配,是高效使用内存的一种表现

2.OS无法在代码执行前预知哪些空间会被访问

Linux--fork创建子进程,操作系统都做了什么_第4张图片

你可能感兴趣的:(Linux,linux)