跟踪分析Linux内核的启动过程

使用实验楼的虚拟机打开shell

使用 gdb 跟踪调试内核

使用 qemu

qemu  -kernel  linux-3.18.6  /arch/x86/boot/baImage  -initrd  rootfs.img

参数:

  — s:在初始化时冻结CPU

  — S:为gdb分配1234端口

gdb调试

另开一个shell窗口

        — gdb
—(gdb) file linux-3.18.6/vmlinux #在gdb界面中target remote之前加载符号表
—(gdb)target remote :1234 #建立连接
—(gdb)break start_kernel #设置断点

从 start_kernel 开始到 init 进程启动

-set_task_stack_end_magic()

     为了检测栈溢出

-smp_setup_processor_id()

    设置对称多处理器

-cgroup_init_early ()

 初始化 Control Groups

-page_address_init()

    页地址初始化(属于内存管理部分)

-setup_arch()

-build_all_zonelists()

-page_alloc_init ()

-setup_log_buf ()

    初始化log 缓冲区(kernel/printk/printk.c)

-pidhash_init ()

    初始化 pid 哈希表

-vfs_caches_init_early ()

-sort_main_extable ()

###初始化中断向量


    -mm_init ()

    内存管理初始化

   -sched_init ()

    调度服务初始化

   -rest_init()

    剩余初始化

             -  kernel_init:init进程

             -  kthreadd:内核线程

             -  cpu_idle进程:代码中一直循环,如果系统中没有可执行的进程时,执行 idle 进程

个人对linux启动过程的理解

   start_kernel()函数的作用是完成linux内核的初始化,几乎所有模块都是由这个函数初始化的,通过阅读代码和使用gdb 工具,完成了下列动作:

   调用sched_init()函数来初始化调度程序;调用page_alloc_init()初始化伙伴系统分配程序;调用trap_init()和init_IRQ()完成异常和中断初始化;调用softirq_init()函数初始化软中断;调用time_init()函数初始化系统和时间;等等。。。

  启动过程分析:计算机上电后,加载BIOS的硬件信息与进行自我测试,读取并执行第一个启动设备内主引导记录内的Bootloader,依据bootloader的设置加载Kernel ,Kernel会开始检测硬件与加载驱动程序。这其中的每一部分都需要大篇的文字描述,这里只是重点从进程角度来了解一下:init_task进程(0号进程)是静态创造的,是内核开发人员创造的,而不是其他进程通过do_fork形成的。它从start_kernel()初始化直到start_kernel()中最后一个函数rest_init(),从rest_init开始,Linux开始产生进程,在rest_init函数中,内核将通过kernel_thread()产生第一个真正的进程(pid=1),而此时init_task的任务基本上已经完全结束了,它将沦落为一个idle 进程,事实上在更早前的sched_init()函数中,通过init_idle(current, smp_processor_id())函数的调用就已经把init_task初始化成了一个idle 进程。

《Linux内核原理与分析》第四次作业的更多相关文章

  1. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  3. 2019-2020-1 20199329《Linux内核原理与分析》第四周作业

    <Linux内核原理与分析>第四周作业 一.上周问题总结: 虚拟机环境缺少部分库文件 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境使用gdb跟踪调试内核 1.1 在该环境下输入 ...

  4. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  5. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  6. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  7. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第四周作业

    2018-2019-1 20189221<Linux内核原理与分析>第四周作业 教材学习:<庖丁解牛Linux内核分析> 第 3 章 MenuOS的构造 计算机三大法宝:存储程 ...

  9. 20169211《Linux内核原理与分析》第四周作业

    20169211<Linux内核原理与分析>第四周作业内容列表 1.教材第3.5章节知识学习总结: 2.实验楼配套实验二实验报告: 1.<linux内核设计与实现>教材第3.5 ...

  10. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

随机推荐

  1. Django2.1.3 smtp 邮件 553报警

    用网易邮箱smtp发邮件时候一直报警553权限问题 smtplib.SMTPSenderRefused at: (553, b'Mail from must equal authorized user ...

  2. java ----> 注解/反射

    注解 一个例子,摘自Junit-4.12.jar源码. 1 @Retention(RetentionPolicy.RUNTIME) 2 @Target({java.lang.annotation.El ...

  3. 『TensotFlow』转置卷积

    网上解释 作者:张萌链接:https://www.zhihu.com/question/43609045/answer/120266511来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  4. icpc2018-焦作-D-几何模拟

    https://nanti.jisuanke.com/t/34142 上午可能是供氧不足,推的式子死活不对,晚上莫名其妙又来了一次就过了. 分两种情况讨论,如果能够完全进入弯道答案就是固定的就是: s ...

  5. SAP发布REST/HTTP接口

    1.SE24新建类:ZCL_REST_QUERY 激活,然后添加interface:IF_HTTP_EXTENSION并激活. 2.实现IF_HTTP_EXTENSION~HANDLE_REQUEST ...

  6. Python *Mix_w4

    1.什么是列表(list) 列表是一个可变的数据类型 列表由[ ]来表示,每一项元素使用逗号隔开.列表什么都能装,能装对象的对象. 列表可以装大量的数据,列表能装所有数据类型 2.列表的索引和切片 列 ...

  7. LeetCode 81 搜索旋转排序数组II

    题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给定的目标值是否存在于 ...

  8. Alpha冲刺10

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10045588.html 作业博客:https://edu.cnblogs.com/campus ...

  9. js添加锚点

    <div name="1F" id="1F"></div> <div class="top_img displayno& ...

  10. leetcode题解2. Add Two Numbers

    题目: You are given two non-empty linked lists representing two non-negative integers. The digits are ...