《Linux内核分析》第三周学习报告

                                   ——构造一个简单的Linux系统MenuOS

姓名:王玮怡  学号:20135116

第一节 Linux内核源代码简介

Linux内核源代码(重点关注arch/x86目录下的代码)

1、linux-3.18.6/init中存储很多内核启动相关的代码,其中main.c中的代码为整个内核启动的起点

2、main.c中,start_kernel函数相当于普通C程序的main函数,内核开始初始化

3、linux-3.18.6/kernel中有Linux内核的核心代码

4、如何安装内核源代码:

(1)解压:gzip –cd linux-3.X.tar.gz

(2)打补丁:gzip –cd../patcj-3.x.gz

(3)进入Linu并进行清理中间代码:cd linux  make mrproper-

第二节 构造一个简单的Linux系统MenuOS

1、启动Linux内核

cd LinuxKernel

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

2、内核启动完成进入menu程序,支持三个命令quit、version、help

3、ipc和进程通信相关的目录

第三节 跟踪调试Linux的内核启动过程

一、使用gdb跟踪调试Linux内核的方法

1、qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

#-S:在CPU初始化之前将其冻结起来

#-s:在-gdb tcp::1234端口上创建了一个gdbserver(若不想1234端口,可以使用-gdb tcp:xxxx)

2、另外打开一个shell窗口,就可以使用gdb (使用水平分割)

(gdb)file linux-3.18.6/vmlinux #将带有符号表对应的内核镜像加载进来

(gdb)target remote:1234 #建立与gdbserver之间的链接(按C让qemu上的Linux解除冻结状态,继续运行)

(gdb)break start_kernel #设置断点,跟踪内核(可以在target remote之前,也可以在其之后),按C让qemu上的Linux解除冻结状态,继续运行至start_kernel

(gdb)list #可以看到start_kernel附近的代码

二、简单分析start_kernel

1、在init/main.c代码中找到start_kernel

其中第510行的init_task即手工创建的PCB,0号进程即最终的idle进程

2、不管分析内核的哪一部分都会涉及到start_kernel

3、trap init:初始化中断向量,mm init资源管理初始化,sched init进程调度初始化

4、rest init:其他中断,其中包括kernel_thread(kernel_init),就是start_kernel从内核已启动是就一直存在的0号进程

5、kernel_init中有run_init_process,run_init_process创建了一号进程,默认路径下的程序 init_process 一号进程默认的

6、CPU_idle_loop:当系统没有进程需要执行时就调度到idle进程

总结:

在这周的学习中,我们首先复习了计算机有三个法宝:存储程序计算机、函数调用堆栈、中断,操作系统有两把剑:中断上下文的切换(保存现场和恢复现场)和进程上下文的切换。此外,我们这周还跟踪调试Linux的内核启动过程。关于idle进程,内核启动完毕后,会进入CPU_idle_loop循环,当系统没有进程需要执行时就调度到idle进程;关于1号进程,rest_init()中有kernel_thread,其中包括kernel_init,kernel_init中有run_init_process,创建了一号进程。通过这周的学习,我们对Linux内核有了进一步的了解。

 

《Linux内核分析》第三周学习报告的更多相关文章

  1. 《Linux内核分析》第二周学习报告

    <Linux内核分析>第二周学习报告 ——操作系统是如何工作的 姓名:王玮怡  学号:20135116 第一节 函数调用堆栈 一.三个法宝 二.深入理解函数调用堆栈 三.参数传递与局部变量 ...

  2. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...

  3. Linux内核分析第三周学习笔记

    linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程

    Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...

  5. 20135320赵瀚青LINUX内核分析第三周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...

  6. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  7. Linux内核分析——第三周学习笔记

    20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...

  8. 《Linux内核分析》第一周学习报告

    第一周:计算机是如何工作的 姓名:王玮怡  学号:20135116 第一节 存储程序计算机工作模型(冯诺依曼体系结构) IP指向的内存地址,取指令执行,完成后,IP值自加一,取下一条指令再执行. AP ...

  9. Linux内核分析——第三周学习笔记20135308

    第三周 构造一个简单的Linux系统MenuOS 计算机三个法宝: 1.存储程序计算机 2.函数调用堆栈 3.中断 操作系统两把宝剑: 1.中断上下文的切换:保存现场和恢复现场 2.进程上下文的切换 ...

  10. Linux内核分析第三周学习总结

    Linux内核源码简介 arch/ 该目录中包含和硬件体系结构相关的代码,每种平台占一个相应的目录. 和32位PC相关的代码存放在x86目录下. 每种平台至少包含3个子目录:kernel(存放支持体系 ...

随机推荐

  1. 2018.08.31 16:26 调试 Swift 和 Pycharm 与 github 之间的链接

    花了一段时间调试Swift和Pycharm的链接,网上查了一下有关信息,再加上自己的摸索,一会就掌握了.

  2. Balanced Search Trees

    平衡搜索树 前面介绍的二叉搜索树在最坏情况下的性能还是很糟糕,而且我们不能控制操作的顺序,有时根本就不是随机的,我们希望找到有更好性能保证的算法. 2-3 search trees 于是先来了解下 2 ...

  3. MongoDB中_class字段的作用

    我们知道,如果你用Java的Sping Data 框架映射Pojo为MongoDB数据时,数据库中会自动给你添加一个_class字段,那这个字段是干嘛用的呢?我们可以不可以不要这个字段呢? 直接上结论 ...

  4. python第二十九课——文件读写(读取读取中文字符)

    演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...

  5. Swift学习笔记十:属性

    1.存储属性       1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值. 存储属性可分为变量存储属性(keywordvar描写叙述)和常量存储属性(keywordlet描写叙述) ...

  6. [Usaco2007 Jan]Balanced Lineup

    嘟嘟嘟 一道RMQ板子题,分别维护最大值和最小值,不解释. #include<cstdio> #include<iostream> #include<algorithm& ...

  7. 有意思的flex 色子布局

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. Scrapy实践----获取天气信息

    scrapy是一个非常好用的爬虫框架,它是基于Twisted开发的,Twisted又是一个异步网络框架,既然它是异步的,那么执行起来肯定会很快,所以scrapy的执行速度也不会慢的! 如果你还没没有学 ...

  9. 数据同步canal服务端介绍

    1.下载安装包 canal&github的地址,最权威的学习canal相关知识的地方 https://github.com/alibaba/canal 在下面的wiki列表中找到AdminGu ...

  10. Qt Creator无法debug,报错:The selected debugger may be inappropriate for the inferior. Examining symbols and setting breakpoints by file name and line number may fail. The inferior is in the Portable ...

    看到这个报错我是绝望的 解决:下载windows sdk  win10 sdk 只安装Debugging Tools for Windows 打开 工具-选项-Kits 安装sdk成功后我们可以看到 ...