zoukankan      html  css  js  c++  java
  • 第三周 内核调试

    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进程则主要是在系统的空闲时被系统调用。

  • 相关阅读:
    浅谈flume
    浅谈storm
    浅谈zookeeper
    IntelliJ IDEA 使用教程
    浅谈spark
    添加本地jar包到maven仓库
    eclipse通过maven进行打编译
    pom.xml中添加远程仓库
    maven编译错误maven-assembly-plugin:2.2-beta-5:assembly (default-cli) on project
    最长上升子序列
  • 原文地址:https://www.cnblogs.com/qtalker/p/4351903.html
Copyright © 2011-2022 走看看