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

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/qtalker/p/4351903.html
Copyright © 2011-2022 走看看