. 系统调用分析/%.
/)&) 年 &/ 月 * 日由留言 0
.分析
从上文可得知,.、. 和 三个系统调用所对应的系统调用服务例程均调用了
.。只不过在调用时所传递的参数有所不同,而参数的不同正好导致了子进程与父
进程之间对资源的共享程度不同。因此,分析 .成为我们的首要任务。
在进入 . 函数进行分析之前,很有必要了解一下它的参数。
clone_flags:该标志位的 1 个字节分为两部分。最低的一个字节为子进程结束时发送给父
进程的信号代码,通常为 2#3,456;剩余的三个字节则是各种 标志的组合(本文所
涉及的标志含义详见下表),也就是若干个标志之间的或运算。通过 标志可以有选
择的对父进程的资源进行复制;本文所涉及到的 标志详见下表。
statck_start:子进程用户态堆栈的地址;
regs:指向 结构体的指针。当系统发生系统调用,即用户进程从用户态切换到内核
态时,该结构体保存通用寄存器中的值,并被存放于内核态的堆栈中;
stack_size:未被使用,通常被赋值为 );
parent_tidptr:父进程在用户态下 的地址,该参数在 ,5$+-" -+!2-!!#6 标志被
设定时有意义;
child_tidptr:子进程在用户太下 的地址,该参数在 ,5$+-,4#562-!!#6 标志被设
定时有意义;
. 函数的主要作用就是复制原来的进程成为另一个新的进程,它完成了整个进程创建
中的大部分工作。
&.在一开始,该函数定义了一个 . 类型的指针 ,用来接收即将为新进程(子进
程)所分配的进程描述符。紧接着使用 函数为这个新进程分配一个 。由于
系统内的 是循环使用的,所以采用位图方式来管理。简单的说,就是用每一位( )