zoukankan      html  css  js  c++  java
  • 2018-2019-1 20189204《Linux内核原理与分析》第四周作业

    《庖丁解牛》第3章——MenuOS的构造

    3.1Linux内核源代码简介

    计算机三大法宝:存储程序计算机、系统调用堆栈、中断

    操作系统两把宝剑:中断切换上下文、进程切换上下文

    Linux内核源码的目录结构

    其中,arch目录是与体系结构相关的子目录列表,里面存放了许多CPU体系结构的相关代码,使得Linux内核可以支持不同的CPU和体系结构(指令集)。我们重点关注x86目录
    init目录存放内核启动时的初始化代码,/init/main.c中的start_kernel是Linux内核启动的起点。

    3.2构造一个简单的Linux内核

    在“实验楼”环境下构造MenuOS
    根文件系统一般包括内存根文件系统和磁盘文件系统。
    initrd即 initial ramdisk,普通用户一般感知不到这个内存根文件系统的存在,因为内核启动时先访问initrd文件系统(内存根文件系统),然后在切换到磁盘文件系统。图为构建Linux系统MenuOS

    3.3跟踪调试Linux内核的启动过程

    输入命令qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s,内核被冻结
    在start_kernel()处设置断点

    在gdb模式下按c继续

    在rest_init()处设置断点并继续

    3.4内核代码分析

    start_kernel()

    start_kernel()是内核启动的起点,在此函数被调用前内核代码主要用于完成硬件系统初始化工作。在start_kernel()中几乎完成了内核所有模块初始化工作。在这其中,最先生成的是0号进程(init_task)

    init_task

    init_task(pid=0),类型是tast_struct,使用宏INIT_TASK进行初始化。

    rest_init()

    rest_init()新建kernel_init和kthreadd内核线程
    405行用Kernel_thread执行kthreadd,创建PID=2的内核线程

    实践中学习到的其他知识

    在自己的机器上搭建MenuOS的时候,第一步就是要先下载Linux内核源码。在下载快要完成的时候网络中断,内心非常崩溃,又不甘心重新下载,因为网速实在是太慢了(微笑),所以我赶紧查了查wget的功能,想着还可以抢救一下。下图是wget下载中断后的样子,在固定的时间长度下会自动发送一个request并等待服务器的response。

    wget在默认情况下是不支持续传的,如果下载的时候网络中断,这时候再用wget不会续传而是生成一个名为重复文件名1的文件
    那么wget是否支持继续传输呢?如何继续传输?
    老师说过只要想清楚问题就已经找到了答案
    输入wget -c 下载地址 就可以续传之前下载中断的文件了,结果如图所示

    更多wget的参数及用法

    没有解决的问题

    1.compiler-gcc7.h找不到文件或目录

    在自己的虚拟机上安装MenuOS的时候,遇到了这样的问题

    查询linux-3.18.6的源码并没有找到compiler-gcc7.h

    在网上搜了一下也没有找到compiler-gcc7.h,不知道大家有没有好的解决方法。

    2.init_task究竟是一个变量还是一个方法呢

    在《庖丁解牛》中把init_task写成了一个方法,但是start_kernel()中的代码是set_task_stack_end_magic(&init_task);

  • 相关阅读:
    Vue父子组件传值$parent , ref,$refs,props大总结
    Vue-axios
    tensorflow2知识总结(杂)---1、安装tensorflow
    线性回归和逻辑回归的区别
    %matplotlib inline的含义
    王阳明的心学到底是啥
    Windows Anaconda 修改为国内源
    Reporting Services Single Sign On (SSO) Authentication
    .NET
    WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive)
  • 原文地址:https://www.cnblogs.com/bowendky/p/9901311.html
Copyright © 2011-2022 走看看