基于Linux源码分析

基于Linux源码分析

ID:39474265

大小:51.00 KB

页数:4页

时间:2019-07-04

基于Linux源码分析_第1页
基于Linux源码分析_第2页
基于Linux源码分析_第3页
基于Linux源码分析_第4页
资源描述:

《基于Linux源码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux源码分析1.Linux进程概述进程简单的说就是一个程序一次执行的过程,它是一个动态的概念。按照教科书上的定义,进程是程序执行的实例,是linux的基本调度单位。 对于程序员来说,最重要的就是要区分进程和程序的区别,程序是指一段完成功能的代码,或者说是一个工具,它是一个静态的概念,而进程,它是动态的,比如,linux的vi编辑器,它就是一段在linux下用于文本编辑的工具,那么它是一个程序,而我们在linux终端中,可以分别开启两个vi编辑器的进程。一旦提到进程,我们的脑子里就应该产生——程序从代码的第一句动态的执行到最后一句这样的一个思路。 一个进程由如下元素组成: 1.>进程的

2、当前上下文,即进程的当前执行状态; 2.>进程的当前执行目录 3.>进程访问的文件和目录 4.>进程的访问权限,比如它的文件模式和所有权 5.>内存和其他分配给进程的系统资源 在linux系统中,内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,运行多久以及采用什么特性运行它。内核的调度器负责在所有的进程间分配CPU执行时间,称为时间片(timeslice),它轮流在每个进程分得的时间片用完后从进程那里抢回控制权。 OS会为每个进程分配一个唯一的整型ID,做为进程的标识号(pid)。进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程

3、是同一个进程,它叫做init进程,ID为1,init进程是内核自检后的一个启动的进程。init进程负责引导系统、启动守护(后台)进程并且运行必要的程序。 2.Linux进程源码分析Linux中有3个系统调用fork、vfork和clone用来产生进程,在核心中分别对应sys_fork、sys_vfork和sys_cloen,进一步都调用内部函数do_fork()完成,区别仅是调用do_fork()的参数不同。do_fork参数:unsignedlongclone_flags:特征参数unsignedlongstack_start:子进程堆栈起始地址structpt_regs*regs:寄存

4、器结构指针unsignedlongstack_size:堆栈容量,该参数未使用int__user*parent_tidptr:父进程tid指针int__user*child_tidptr:子进程tid指针sys_fork参数:structpt_regs*regs调用do_fork时格式:clone_flags=SIGCHLD:子进程结束(terminate)或停止(stop)时向父进程发送该信号stack_start=regs->rsp:共用父进程堆栈,使用COW机制进行复制regs=regsstack_size=0parent_tidptr=NULLchild_tidptr=NULLsy

5、s_vfork参数:structpt_regs*regs调用do_fork时格式:clone_flags=CLONE_VFORK

6、CLONE_VM

7、SIGCHLD:与父进程共用一个地址空间;并且使父进程挂起进入等待状态,直至子进程释放地址空间,即结束或执行一个新程序;其他与sys_fork相同sys_clone参数:unsignedlongclone_flagsunsignedlongnewspvoid__user*parent_tidvoid__user*child_tidstructpt_regs*regs调用do_fork时格式:stack_start=newsp?:regs->rs

8、pstack_start=0其它参数对应使用下面分析do_fork()过程1pid=alloc_pidmap():分配一个空闲的pid号2检测current->ptrace标记,如果需要跟踪子进程,则在clone_flags加入CLONE_PTRACE标记3p=copy_process():创建进程描述字I如果clone_flags同时带有CLONE_NEWNS和CLONE_FS标记则出错。CLONE_NEWNS表示使用新的命名空间(namespace);CLONE_FS表示与父进程共享current->fs结构,即fs_structII如果clone_flags带有CLONE_THREA

9、D标记但没有CLONE_SIGHAND标记则出错。CLONE_THREAD:将子进程加入到父进程的线程组中,强制子进程共享父进程的信号描述符。CLONE_SIGHAND:共享信号标示表,包括信号句柄(handler)、阻塞和挂起的信号III如果clone_flags带有CLONE_SIGHAND标记但没有CLONE_VM标记则出错。CLONE_VM:父子进程共享虚地址空间IVp=dup_task_struct(orig=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。