跟踪分析Linux内核的启动过程

实验3:跟踪分析Linux内核的启动过程

姓名:李冬辉

学号:20133201

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

 

【计算机三个法宝】

1)存储程序计算机

2)函数调用堆栈

3)中断

【操作系统两把宝剑】

1)中断上下文的切换:保存现场和恢复现场

2)进程上下文的切换

 

Linux内核源代码简介

  • arch/ 支持不同cpu的源代码
  • Documentations/ 文档存储
  • init/ 内核启动相关代码
  • kenerl/ 进程调度相关代码
  • ipc/ 进程间通信
  • lib/ 公共库文件
  • mm/ 内存管理相关的代码

 

实验步骤
 1.使用实验楼的虚拟机打开shell并输入命令cd LinuxKernel/
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
    观察menuOS 运行。

 linux内核分析 第三周 构造一个简单的Linux系统MenuOS - 毕业好多年 - 写作业专用

2.在menuOS中使用自带的3个命令,观察效果。

linux内核分析 第三周 构造一个简单的Linux系统MenuOS - 毕业好多年 - 写作业专用

3.使用gdb调试观察start_kernel。

linux内核分析 第三周 构造一个简单的Linux系统MenuOS - 毕业好多年 - 写作业专用

4.使用gdb调试观察init。

linux内核分析 第三周 构造一个简单的Linux系统MenuOS - 毕业好多年 - 写作业专用

三、总结

 idle是一个进程,其pid号为 0。其前身是系统创建的第一个进程,也是唯一一个没有通过fork()产生的进程。每个处理器单元有独立的一个运行队列,而每个运行队列上又有一个idle进程,即有多少处理器单元,就有多少idle进程。
        加载linux内核开始运行后,进程开始执行start_kernel()完成Linux内核的初始化工作。包括初始化页表,初始化中断向量表,初始化系统时间等。继而调用 fork(),创建第一个用户进程:  kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); 这个进程就是着名的pid为1的init进程,它会继续完成剩下的初始化工作,然后execve(/sbin/init), 成为系统中的其他所有进程的祖先。这就是我们看到的init进程,进程号为1。初始化的最后linux调用scheule()整个系统就运行起来了。可以用进程查看命令来验证  # ps aux  。

 

posted on 2016-03-11 23:08  雷牛克斯  阅读(252)  评论(0编辑  收藏  举报