• 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 ”

  • 相关阅读:
    oracle 批量修改表名 字段为大写197
    身份证附件上传样例197
    npm 设置源197
    manajo常用命令197
    vue 父组件向子组件传参197
    将BAT文件注册为服务197
    teaweb — linux 系统资源监控
    glances — linux 系统资源监控
    emitter-Client
    urlencode编码 — 为什么要编码
  • 原文地址:https://www.cnblogs.com/20135319zl/p/5269198.html
Copyright © 2020-2023  润新知