- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于Linux源码分析
Linux 源码分析
1. Linux进程概述
进程简单的说就是一个程序一次执行的过程,它是一个动态的概念。按照教科书上的定义,进程是程序执行的实例,是linux的基本调度单位。?对于程序员来说,最重要的就是要区分进程和程序的区别,程序是指一段完成功能的代码,或者说是一个工具,它是一个静态的概念,而进程,它是动态的,比如,linux的vi编辑器,它就是一段在linux下用于文本编辑的工具,那么它是一个程序,而我们在linux终端中,可以分别开启两个vi编辑器的进程。一旦提到进程,我们的脑子里就应该产生——程序从代码的第一句动态的执行到最后一句这样的一个思路。?一个进程由如下元素组成:?1. 进程的当前上下文,即进程的当前执行状态;?2. 进程的当前执行目录?3. 进程访问的文件和目录?4. 进程的访问权限,比如它的文件模式和所有权?5. 内存和其他分配给进程的系统资源?在linux系统中,内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,运行多久以及采用什么特性运行它。内核的调度器负责在所有的进程间分配CPU执行时间,称为时间片(time slice),它轮流在每个进程分得的时间片用完后从进程那里抢回控制权。?OS会为每个进程分配一个唯一的整型ID,做为进程的标识号(pid)。进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,ID为1,init进程是内核自检后的一个启动的进程。init进程负责引导系统、启动守护(后台)进程并且运行必要的程序。?
2.Linux进程源码分析
Linux 中有3 个系统调用fork、vfork 和clone 用来产生进程,在核心中分别对应sys_fork、sys_vfork 和sys_cloen,进一步都调用内部函数do_fork()完成,区别仅是调用do_fork()的参数不同。
do_fork 参数:
unsigned long clone_flags: 特征参数
unsigned long stack_start: 子进程堆栈起始地址
struct pt_regs* regs: 寄存器结构指针
unsigned long stack_size: 堆栈容量,该参数未使用
int __user * parent_tidptr:父进程tid 指针
int __user * child_tidptr: 子进程tid 指针
sys_fork 参数:
struct pt_regs* regs
调用do_fork 时格式:
clone_flags = SIGCHLD:子进程结束(terminate)或停止(stop)时向父进程发送该信号
stack_start = regs-rsp:共用父进程堆栈,使用COW 机制进行复制
regs = regs
stack_size = 0
parent_tidptr = NULL
child_tidptr = NULL
sys_vfork 参数:
struct pt_regs* regs
调用do_fork 时格式:
clone_flags = CLONE_VFORK | CLONE_VM | SIGCHLD:与父进程共用一个地址空间;
并且使父进程挂起进入等待状态,直至子进程释放地址空间,即结束或执行一个新程序;
其他与sys_fork 相同
sys_clone 参数:
unsigned long clone_flags
unsigned long newsp
void __user* parent_tid
void __user* child_tid
struct pt_regs* regs
调用do_fork 时格式:
stack_start = newsp ? : regs-rsp
stack_start = 0
其它参数对应使用
下面分析do_fork()过程
1 pid = alloc_pidmap():分配一个空闲的pid 号
2 检测current-ptrace 标记,如果需要跟踪子进程,则在clone_flags 加入CLONE_PTRACE 标记
3 p = copy_process():创建进程描述字
I 如果clone_flags 同时带有CLONE_NEWNS 和CLONE_FS 标记则出错。CLONE_NEWNS 表
示使用新的命名空间(namespace);CLONE_FS 表示与父进程共享current-fs 结构,即fs_struct
II 如果clone_flags 带有CLONE_THREAD 标记但没有CLONE_SIGHAND 标记则出错。
CLONE_THREAD:将子进程加入到父进程的线程组中,强制子进程共享父进程
您可能关注的文档
- 003杭州市住宅区配套公建建设管理暂行规定旺角城王浩.doc
- 大学化学1-4章练习.doc
- 高三第一次月文科考试题.doc
- 艺术常识140题.doc
- 办公室术语常识(中英对照).doc
- 《液压及气压传动》期末试题E.doc
- 压缩工-WinRAR.ppt
- 教育技术能力远程培训学习总结.doc
- 海南苗族宗教文化的演变与融合fdu.doc
- 12.10动词特训.doc
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江西省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年安徽省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年福建省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年广东省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河南省高考英语试卷(含答案解析)+听力音频.docx
- 2024年湖北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江苏省高考英语试卷(含答案解析)+听力音频+听力原文.docx
文档评论(0)