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

linux start_kernel相关进程的思考

时间:2015-03-19 21:59:06      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:


退休的贵族进程 0号进程


所有进程的祖先叫做进程0
 在系统初始化阶段由start_kernel()函数从无到有手工创建的一个内核线程
 进程0最后的初始化工作创建init内核线程,此后运行cpu_idle,成为idle进程
控制权的接力棒从bios-->bootloader-->idle,某种程度上说,就是完成子系统初始化使命后,就退居二线了。
0号进程一直处于皇宫“内核态”,没有出过宫“到用户态”,所谓贵族终身。

0号进程的代码概要图

技术分享

进入loop的堆栈样本如下:
(gdb) bt
#0  cpu_idle_loop () at kernel/sched/idle.c:201
#1  cpu_startup_entry (state=<optimized out>) at kernel/sched/idle.c:274
#2  0xc175d22d in rest_init () at init/main.c:418
#3  0xc1a4bb59 in start_kernel () at init/main.c:680
#4  0xc1a4b360 in i386_start_kernel () at arch/x86/kernel/head32.c:49
#5  0x00000000 in ?? ()
来个截图吧,贴吧中少有的动态库,展示的是进入Loop后的堆栈 ,还有loop中的代码运行
技术分享


用户1号进程的前世今生

进程1又称为init进程,是所有用户进程的祖先
由进程0在start_kernel调用rest_init创建
init进程PID为1,当调度程序选择到init进程时,init进程开始执行kernel_init ()函数
init是个普通的用户态进程,它是Unix系统内核初始化与用户态初始化的接合点,它是所有用户进程的祖宗。在运行init以前是内核态初始化,该过程(内核初始化)的最后一个动作就是运行/sbin/init可执行文件


概念验证:
关键代码位置:
用户态进程:看堆栈。(核心态进入内核,check)




附录:
题目自拟,内容围绕Linux内核的启动过程,即从start_kernel到init进程启动;
博客中需要使用实验截图
博客内容中需要仔细分析start_kernel函数的执行过程
总结部分需要阐明自己对“Linux系统启动过程”的理解,尤其是idle进程、1号进程是怎么来的。


所有进程的祖先叫做进程0
在系统初始化阶段由start_kernel()函数从无到有手工创建的一个内核线程
进程0最后的初始化工作创建init内核线程,此后运行cpu_idle,成为idle进程

概念验证:
主要流程图
(start)--->rest_init--->(被调度)--一个loop中

进程1又称为init进程,是所有用户进程的祖先
由进程0在start_kernel调用rest_init创建
init进程PID为1,当调度程序选择到init进程时,init进程开始执行kernel_init ()函数
init是个普通的用户态进程,它是Unix系统内核初始化与用户态初始化的接合点,它是所有用户进程的祖宗。在运行init以前是内核态初始化,该过程(内核初始化)的最后一个动作就是运行/sbin/init可执行文件
概念验证:
关键代码位置:
用户态进程:看堆栈。(核心态进入内核,check)


附录:
题目自拟,内容围绕Linux内核的启动过程,即从start_kernel到init进程启动;
博客中需要使用实验截图
博客内容中需要仔细分析start_kernel函数的执行过程
总结部分需要阐明自己对“Linux系统启动过程”的理解,尤其是idle进程、1号进程是怎么来的。

linux start_kernel相关进程的思考

标签:

原文地址:http://blog.csdn.net/titer1/article/details/44464647

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