zoukankan      html  css  js  c++  java
  • Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程

    Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程

    实验过程截图:




    过程分析:

    在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_thread等几个函数的执行。其中start_kernel相当于普通C程序的main函数。Trap_init负责初始化中断向量,mm_init负责内存管理模块初始化,sche_init负责调度模块初始化。

    两把宝剑:

    1.中断上下文切换

    2.进程上下文切换

    Qemu工具学习:

    格式:

    qemu  -kernel  文件名 -initrd  (rootfs.img)
    

    -kernel后跟要启动的内核的文件名(不在当前目录需要全路径)

    -initrd 后跟虚拟硬盘名,默认启动其中名为init的文件。在该实验里为menuOS。

    start_kernel函数末尾调用rest_init,负责当系统没有进程需要执行时就调用到idle进程

    0号进程

    有一个全局变量init_task,是手工创建的PCB,也是最后的idle进程,与rest_init函数有配合作用。

    编译内核

    1.原因:生成符号表

    2.方法:

    (1)make config操作简单,耗时

    (2)make menuconfig图形化界面

    (3)make allnoconfig 全no选择处理

    总结:

    对于linux系统启动过程,可以类比道家的“无中生有”的思想,道生一(start_kernel....cpu_idle),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三个进程),三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)。
    通过几个最初的函数作为基础,逐渐搭建出一个体系,供其它进程进一步发挥;当其它进程工作到一段落,再重回起点,进入暂时休眠的状态。

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

  • 相关阅读:
    Linux(CentOS 7)搭建DHCP服务器实验
    Linux(CentOS 7)发布静态网站
    Linux(CentOS 7)搭建VSFTP服务器
    Linux(CentOS 7)搭建samba服务器搭建实验
    Linux(CentOS 7)软件的安装
    Linux(CentOS 7)服务于进程
    Linux磁盘配额
    Linux LVM逻辑卷管理
    Linux磁盘挂载
    Linux磁盘分区
  • 原文地址:https://www.cnblogs.com/20135319zl/p/5269198.html
Copyright © 2011-2022 走看看