fork代码解析
发布时间
阅读量:
阅读量
文章目录
- fork的整体流程
- mm_struct 结构体
fork的整体流程
-
当用户空间中的代码执行fork操作时,在此时用户的进程被阻塞状态中保存上下文信息后切换到内核空间。
-
system_call函数处理被中断的服务调用并获取来自用户态寄存器中的系统调用编号。
-
内核态基于接收的服务调用编号动态地激活相应的系统调用函数sys_fork()。
-
sys_fork()在底层利用do_fork()机制动态地生成新的子进程并分配其唯一的进程标识符。
-
首先,在执行do_fork()时会向系统资源管理模块提交一个请求以获取一个新的可用进程标识符(PID)。该PID会被分配给新产生的子进程。
(其中PID的最大值为32768,在当前最大PID基础上加一;若超出该最大值限制则从预先设定好的起始地址块中寻找下一个可用未被占用的PID)。 -
分配进程所需的pcb块
slab 分配器会专门为内核中的常用数据结构设计出高效的缓存区域, 从而显著提升内存分配效率; 该宏能够申请一个大小等于pcb块所需内存空间的内存区域
在 task_struct 结构体内存在一个指向内存块的指针 thread_info。该内存块记录了与内核进程相关的调用记录。
- 将父进程的任务信息及相关数据传输至新建结构体中。
通过地址转移将父进程的
全部评论 (0)
还没有任何评论哟~
