进程控制模块分析文档初稿

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程控制模块分析

一、模块名称:

进程控制模块,在linux体系结构中属于用户接口层。

二、模块功能描述:

进程控制模块,主要负责:

1 进程的运行控制包括创建,注销,停止。

2 进程的信息管理,包括命名空间管理,PID管理。

3 进程的资源管理。

三、模块结构图:

四、模块接口说明:

1接口名: 获得进程的数字ID

接口的功能描述:得到进程在给定命名空间,指定类型的数字ID号。

接口包含的函数:

1)pid_t task_pid_nr_ns(structtask_struct *tsk

structpid_namespace *ns)

●入口参数:

a)structtask_struct*tsk:需要查询的进程的描述

符。

b)structpid_namespace *ns:需要查询的进程所

在的命名空间。

●返回值:

a)pid_t:需要查询的进程的数字pid号。

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。详细介绍见模

块主要结构体说明。

b)pid_t:进程的数字ID号定义为int类型。

●函数说明

根据进程描述符,获得在制定命名空间的进程数字

pid。

2)pid_t task_tgpid_nr_ns(structtask_struct*tsk

structpid_namespace *ns)

●入口参数:

a)structtask_struct*tsk

b)structpid_namespace*ns

●返回值:pid_t: 进程的数字ID号定义为int类型。

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。详细介绍见模

块主要结构体说明。

b)pid_t:进程的数字ID号定义为int类型。

●函数说明

根据进程描述符,获得在制定命名空间的进程组

的数字pid。

3)pid_t task_pgrp_nr_ns(structtask_struct *tsk

structpid_namespace*ns

●入口参数:

a)structtask_struct *tsk

b)structpid_namespace *ns

●返回值:pid_t

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。

b)pid_t:进程的数字ID号定义为int类型。

●函数说明

得到进程在命名空间ns的进程组号(pgrp)。

4)pid_t task_session_nr_ns(structtask_struct *tsk

structpid_namespace*ns

●入口参数:

a)structtask_struct*tsk

b)structpid_namespace *ns

●返回值:pid_t: 进程在命名空间ns的会话ID号(SID.)

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。

b)pid_t:进程的数字ID号定义为int类型。

●函数说明

得到进程在命名空间ns的会话ID号(SID)。

2接口名: 根据pid号和指定命名空间,查询进程描述符。

接口的功能描述:得到进程在给定命名空间,给定ID号时的进程描述符。

接口包含的函数:

1)pid_t find_task_by_pid_ns(pid_t nr,

structpid_namespace*ns)

●入口参数:

a)pid_t nr

b)structpid_namespace*ns

●返回值:structtask_struct

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。

b)pid_t:进程的数字ID号定义为int类型。

c)pid_namespace pid命名空间的结构体。

●函数说明

得到进程在给定命名空间,给定ID号时的进程描述符。

2)structtask_struct find_task_by_vpid(pid_t vnr)

●入口参数:

a)pid_t vnr

●返回值:structtask_struct

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。

b)pid_t:进程的数字ID号定义为int类型。

●函数说明

通过局部数字PID号查询进程描述符。

3)pid_t find_task_by_vpid(pid_t nr)

●入口参数:

a)pid_t nr

●返回值:pid_t

●重要的结构体说明:

a)task_struct:存储的了进程的各种控制信息,

详细定义参见重要数据结构。

b)pid_t:进程的数字ID号定义为int类型。

●函数说明

得通过全局数字PID号查询进程描述符。

3接口名: 生成进程PID

接口的功能描述:得到进程在给定命名空间,给定ID号时的进程描述符。

接口包含的函数:

1)struct* pid alloc_pid(structpid_namespace*ns)

●入口参数:

a)structpid_namespace*ns:命名空间的结构体

●返回值:struct* pid : pid管理数据结构。

●重要的结构体说明:

a)struct* pid: pid管理数据结构。

b)pid_namespace:pid命名空间的结构体。

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用“内存管理模块:kmem_cache_alloc()”接口。

2)将会被“进程控制模块:进程创建”接口调用。

3)调用“进程控制模块的:task_struct“。

4接口名:设置进程状态:

接口包含的函数:

1)void set_task_state(Structtask_struct*tsk ,int state)

●入口参数:

a)Structtask_struct*tsk:要设置的进程的进程描述符

b)int state:要设置的进程状态。

●返回值:

void

●函数说明:

该函数是实际上是一段宏定义的内联汇编将tsk的state成员变量赋值为入口参数state。

与其他接口的调用的动态关系:

1)调用”进程控制模块的:task_struct“。

5接口名设置进程状态:

接口包含的函数:

1)void set_current_state(Structtask_struct*tsk ,int state)

●入口参数:

a)Structtask_struct*tsk:要设置的进程的进程描述符

b)int state:要设置的进程状态。

●返回值:

void

●函数说明:

该函数是实际上是一段宏定义的内联汇编将tsk的state成员变量赋值为入口参数state。

与其他接口的调用的动态关系:

1)调用”进程控制模块的:task_struct“。

6接口名:sys_fork()

接口的功能描述:为当前进程创建一子进程。子进程只是完全复制父进程的资源,复制出来的子进程有自己的task_struct结构和pid,但却复制父进程其它所有的资源。函数定义在

\linux\arch\ia64\kernel\process.c中

接口包含的函数:

1)int sys_fork(structpt_regs*regs)

●入口参数:

a)structpt_regs*regs:用户态下的CPU寄存器

在核心态的栈中的保存情况。

●返回值:

a)Int: 进程创建的结果,详情请见本模块的结

构体和宏的说明部分。。

●重要的结构体说明:

a)structpt_regs*regs:该结构体描述了在执行

系统调用时,用户态下的CPU寄存器在核心

态的栈中的保存情况。

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用“进程控制模块:do_fork()”接口。

7接口名:sys_vfork()

接口的功能描述:为当前进程创建一子进程。用vfork创建的子进程与父进程共享地址空间,也就是说子进程完全运行在父进程的地址空间上,如果这时子进程修改了某个变量,这将影响到父进程。函数定义在\linux\arch\ia64\kernel\process.c中

接口包含的函数:

1)int sys_vfork(structpt_regs*regs)

●入口参数:

a)structpt_regs*regs:用户态下的CPU寄存器

在核心态的栈中的保存情况。

●返回值:

a)Int: 进程创建的结果,详情请见本模块的结

构体和宏的说明部分。。

●重要的结构体说明:

a)structpt_regs*regs:该结构体描述了在执行

系统调用时,用户态下的CPU寄存器在核心

态的栈中的保存情况。

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用“进程控制模块:do_fork()”接口。

8接口名:sys_clone()

接口的功能描述:clone()将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体

要复制哪些资源给子进程,由参数列表中的clone_flags来决定。

另外,clone()返回的是子进程的pid。函数定义在

\linux\arch\ia64\kernel\process.c中

接口包含的函数:

1)long sys_clone(unsigned long clone_flags,

unsigned long newsp,

void __user *parent_tid,

void __user *child_tid,

structpt_regs *regs)

●入口参数:

a)unsigned long clone_flags:创建进程的标志,

详情请见本模块的结构体和宏的说明部分。

b)unsigned long newsp:新用户栈的指针。

c)void __user *parent_tid:父进程的PID。

d)void __user *child_tid: 子进程的PID。

e)structpt_regs*regs:用户态下的CPU寄存器

在核心态的栈中的保存情况。

●返回值:

a)long: 进程创建的结果,详情请见本模块的结

构体和宏的说明部分。

●重要的结构体说明:

a)structpt_regs*regs:该结构体描述了在执行

系统调用时,用户态下的CPU寄存器在核心

态的栈中的保存情况。

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用“进程控制模块:do_fork()”接口。

9接口名:do_fork()

接口的功能描述:创建一个进程。

接口包含的函数:

1)long do_fork(unsigned long clone_flags,

unsigned long stack_start,

structpt_regs *regs,

unsigned long stack_size,

int __user *parent_tidptr,

int __user *child_tidptr

)

●入口参数:

a)unsigned long clone_flags:创建进程的标志,

详情请见本模块的结构体和宏的说明部分。

b)unsigned long stack_start:用户栈的起始地址。

c)structpt_regs*regs:用户态下的CPU寄存器

在核心态的栈中的保存情况。

d)unsigned long stack_size:用户栈的大小。

e)int __user *parent_tidptr:父进程的PID。

f)int __user *child_tidptr:子进程的PID。

●返回值:

a)long:进程创建的结果,详情请见本模块的

结构体和宏的说明部分。

●重要的结构体说明:

a)structpt_regs*regs:该结构体描述了在执行

系统调用时,用户态下的CPU寄存器在核心

态的栈中的保存情况。

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用“内存管理模块:kmem_cache_alloc()”接口。

2)将会调用“调试模块的:ptrace_event()接口”。

3)将会调用”进程管理模块:进程调度模块:sched_fork()接口”。

4)调用“进程控制模块的:task_struct“。

10接口名: 启动程序

接口的功能描述:从磁盘上启动新的程序。

接口包含的函数:

1)int do_execve(const char *filename,

const char __user *const __user *__argv:命令行

变量地址。

const char __user *const __user *__envp:环境变

量地址。

structpt_regs *regs

●入口参数:

a)const char *filename:可执行的文件的文件名。

b)const char __user *const __user *__argv,

c)const char __use r *const __user *__envp,

d)structpt_regs *regs:用户态下的CPU寄存器

在核心态的栈中的保存情况。

●返回值:int:载入结果标识。

●重要的结构体说明:

a)structpt_regs*regs:该结构体描述了在执行

系统调用时,用户态下的CPU寄存器在核心

态的栈中的保存情况。

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用”内存管理模块:kmem_cache_alloc()接口”。

2)将会调用”文件系统模块:file_open接口”。

3)调用“进程控制模块的:task_struct“。

11接口名: 进程退出

接口的功能描述:从磁盘上启动新的程序。

接口包含的函数:

1)void do_exit(long code)

●入口参数:

a)long code

●返回值:

void

●函数说明:

函数的具体流程是:

与其他接口的调用的动态关系:

1)将会调用”调试模块:ptrace_event()”接口。

2)将会调用”进程调度模块:schedule()”接口。

3)将会调用“计时器模块del_timer_sync()”接口。

4)将会调用“审计模块:acct_update_integrals()”接口。

5)将会调用“内存管理模块:exit_mm()”接口。

6)将会调用“进程通信模块:sem_exit()”接口。

7)将会调用“进程通信模块:sem_exit()”接口。

8)将会调用“文件系统:exit_files()”接口。

9)调用“进程控制模块的:task_struct“。

五、模块内部实现机制:

1 do_fork接口会调用alloc_pid接口。

2 sys_fork接口会调用do_fork接口。

3 sys_vfork接口会调用do_fork接口。

4 sys_clone接口会调用alloc_pid接口。

六、编译时依赖的模块:

内存管理模块,进程调度模块,文件系统模块,调试模块。

七、重要数据结构说明:

1task_struct

a)定义位置:linux\include\sched.h

b)结构体描述:储存了进程控制需要的所有信息。

c)对外提供的接口:

相关文档
最新文档