实验要求:

  • 使用gdb跟踪调试内核从start_kernel到init进程启动

  • 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:

    • 题目自拟,内容围绕Linux内核的启动过程,即从start_kernel到init进程启动;

    • 博客中需要使用实验截图

    • 博客内容中需要仔细分析start_kernel函数的执行过程

    • 总结部分需要阐明自己对“Linux系统启动过程”的理解,尤其是idle进程、1号进程是怎么来的。

  • 3)请提交博客文章URL到网易云课堂MOOC平台Linux内核分析MOOC课程,编辑成一个链接可以直接点击打开。

/////////////////////////////////////////////////////////////////////////////////////////////////

实验流程只贴图

gdb 可以使用 -tui 参数 达到命令和源码分屏效果 如下

设置两个断点

 

一直跟踪到rest_init()

总结

  1.idle是一个进程,其pid为0。
  2.主处理器上的idle由原始进程(pid=0)演变而来。从处理器上的idle由init进程fork得到,但是它们的pid都为0。
  3.Idle进程为最低优先级,且不参与调度,只是在运行队列为空的时候才被调度。
  4.Idle循环等待need_resched置位。默认使用hlt节能。
  5.init pid 为1 
  6.init通关kernel_thread()创建

  #1-4 参考https://www.douban.com/note/56531301/

参考

gdb 命令