您的位置 首页 报告

需求了解Linux0.11-fork()函数的创立进程

需要了解Linux0.11-fork()函数的创建进程-除了进程0,其它所有的进程都是fork产生的。子进程是通过复制父进程的数据和代码产生的。创建结束后,子进程和父进程的代码段、数据段共享。但是子进程有自己的进程控制块、内核堆栈和页表。

用fork创立进程

除了进程0,其它一切的进程都是fork发生的。子进程是经过仿制父进程的数据和代码发生的。创立完毕后,子进程和父进程的代码段、数据段同享。可是子进程有自己的进程操控块、内核仓库和页表。

咱们知道一个进程需求有如下3个结构

1.task[]数组中的一项,即进程操控块(task_struct)

2.GDT中的两项,即TSS段和LDT段描述符

3.页目录和页表

所以fork()的使命便是为一个新进程结构这3个结构。

sys_fork() 体系调用的实现在2个文件中。fork.c中的悉数和system_call.s中_sys_fork。sys_fork()体系调用分红2步完结,第一步调用函数find_empty_process(),在task[]数组中找一项闲暇项,第二步调用copy_process() 函数,仿制进程。

sys_fork() 进口

_sys_fork:

// 第一步,调用find_empty_process()函数,找task[]中的闲暇项。

// 找到后数组下标放在eax中。假如没找到直接跳转到ret指令。

call _find_empty_process

testl %eax,%eax

js 1f

push %gs// 中止时没有入栈的寄存器入栈,

// 作为copy_process() 函数的参数

pushl %esi

pushl %edi

pushl %ebp

pushl %eax

// 第二步,调用copy_process() 函数仿制进程。

call _copy_process

addl $20,%esp

1: ret

程序调用copy_process() 函数时,

当时进程内核仓库的状况如下:

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/89489.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部