码迷,mamicode.com
首页 > 系统相关 > 详细

分析Linux内核创建一个新进程的过程

时间:2015-05-03 20:37:06      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:


分析Linux内核创建一个新进程的过程

沙雨济

原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

 

一、实验目的

阅读理解task_struct数据结构;分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构;使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone,验证对Linux系统创建的理解;进程是从哪里开始执行的。

 

二、实验内容

首先,进入实验楼环境,进入LinueKernel文件。

技术分享


然后,删除menu,clone一份新的,再将test.c覆盖为fork.c,make rootfs。

技术分享

进入menuOS,实现fork函数功能。

技术分享

请来大小S,进行设置断点:sys_clone, do_fork, dup_task_struct, copy_process, copy_thread。(sorry,真的好卡,设置断点的地点未达到,原理同前实验。)

跟踪分析一个fork系统调用内核处理函数sys_clone,结束实验。

 

三、 实验总结(含分析)

task_struct数据库结构很庞大,Linux进程的状态与操作系统原理中描述的进程状态有所不同,比如就绪态和运行态都是TASK_RUNNING。简略的双向循环链表。程序创建的进程具有父子关系

 

系统调用内核处理函数sys_clone创建一个新进程,通过调用do_fork来实现进程的创建,Linux通过复制父进程的PCB来创建进程,再对其进行相应修改。

 

子进程在内核中fork返回,在内核中开始执行,当子进程开始运行的时候,其ret_from_fork将做一系列工作,然后返回到用户态。 

 

通过对本章的学习,我对于task_struct有了一定了解,认识了进程创建的具体过程。

分析Linux内核创建一个新进程的过程

标签:

原文地址:http://www.cnblogs.com/Diky/p/4474568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!