Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102696
  • 博文数量: 50
  • 博客积分: 1053
  • 博客等级: 少尉
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-05 22:55
文章分类

全部博文(50)

文章存档

2016年(2)

2015年(1)

2014年(6)

2012年(11)

2011年(22)

2010年(5)

2009年(3)

我的朋友

分类: LINUX

2015-03-19 21:55:22

刘柳 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 


退休的贵族进程 0号进程


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

0号进程的代码概要图


进入loop的堆栈样本如下:
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. (gdb) bt  
  2. #0  cpu_idle_loop () at kernel/sched/idle.c:201  
  3. #1  cpu_startup_entry (state=<optimized out>) at kernel/sched/idle.c:274  
  4. #2  0xc175d22d in rest_init () at init/main.c:418  
  5. #3  0xc1a4bb59 in start_kernel () at init/main.c:680  
  6. #4  0xc1a4b360 in i386_start_kernel () at arch/x86/kernel/head32.c:49  
  7. #5  0x00000000 in ?? ()  
来个截图吧,贴吧中少有的动态库,展示的是进入Loop后的堆栈 ,还有loop中的代码运行



用户1号进程的前世今生

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 进程1又称为init进程,是所有用户进程的祖先  
  2. 由进程0在start_kernel调用rest_init创建  
  3. init进程PID为1,当调度程序选择到init进程时,init进程开始执行kernel_init ()函数  
  4. 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号进程是怎么来的。
阅读(546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~