• 第三周 内核调试


    1.实验结果

    这周主要是搭建linux内核测试的环境,以及简单分析linux内核的相关函数和执行步骤。

    首先是将一个内存镜像装入内核中运行的实验,这里是使用menu程序。实验结果如下。

    第二个实验主要是搭建gdb的测试平台,利用gdb设置断点,将断点设置在start_kernel处。以下是实验结果

    2运行分析

    这里主要分析以下内核启动时进程以及线程的初始化流程。首先附上代码地址。

    http://codelab.shiyanlou.com/xref/linux-3.18.6/

    我们要关注的内核初始化代码主要位于init/main.c 中的start_kernel函数中,其中函数首先对各个硬件以及环境变量进行初始化,其中561行trap_init()主要是进行中断的初始化,我们需要关注的进程初始化函数rest_init()位于start_kernel最后一行。其程序调用的大致框图如下,下图主要说明了程序进程的初始化作用,其中主要思想是初始化一个process0然后通过process0再生成其它的进程。即下图中的kthread参数。cpu_idle_loop则主要是个while(1)函数,用于协调进程间调用。

    3总结

      linux启动过程中首先有一个启动进程即0号进程,而这个进程是对linux系统不可见的,而其它所有的进程都是由这一个进程创建的。也就是说process1也是由process0创建而来的。而idle进程则主要是在系统的空闲时被系统调用。

  • 相关阅读:
    奇葩json结构解析--key是数字的json处理
    设计模式 -- 备忘录模式
    Django 模型
    Django 模板
    Django篇系列教程学习
    Django管理工具django-admin.py创建项目
    Django安装
    SQLite使用
    SQLite Manager插件安装与使用(firefox)
    CH-9 管理你的数据
  • 原文地址:https://www.cnblogs.com/qtalker/p/4351903.html
Copyright © 2020-2023  润新知