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

    构造一个简单的Linux内核

    Linux是一种开源电脑操作系统内核,它是一个用C语言写成。主要子系统:
    1.系统调用接口
    2.进程管理
    3.内存管理
    4.虚拟文件系统

    qemu是一个开源模拟处理器,在实验中

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

    qemu需要创建窗口,它在纯命令系统下无法工作,需要使用图形化界面的虚拟机。qemu仿真kernel,bzImage是vmLinux经过gzip压缩后的文件,此即为压缩后的内核镜像。vmLinux是编译出来最原始的ELF文件。如下图所示的即是使用实验楼的虚拟机搭建环境调试的过程:

    打开另一个shell窗口,启动gdb进行断点调试,如图所示:

    设置断点在start_kerenl()和 rest_init()处,按c继续执行,结果如图所示:

    start_kernel()相当于c语言的main函数,是除了汇编语言的程序执行的起点
    start_kernel()几乎涉及了内核的所有模块:
    trap_init():中断向量的初始化
    mm_init():内存管理的初始化
    sched_init(): 调度模块的初始化
    init_task()(0号进程),是进程描述符,使用宏进行初始化,而后对其他模块进行初始化
    代码如下:
    asmlinkage __visible void __init start_kernel(void)
    {
    char *command_line;
    char *after_dashes;

        /*
         *Need to run as early as possible, to initialize the
         *lockdep hash:
         */
        lockdep_init();
        set_task_stack_end_magic(&init_task);
        smp_setup_processor_id();
        debug_objects_early_init();
        
    	/*
       	 *Set up the initial canary ASAP
    	 */
    	boot_init_early();
    
        local_irg_disable();
    	early_boot_irgs_disabled=TRUE;
    }  
    

    总结:0号进程在创建init进程后调用cpu_idle(),而后一号线程负责执行内核的部分初始化工作及进行系统配置

  • 相关阅读:
    服务器开启超线程
    redhat用kickstart.cfg自动安装后,挂载ISO镜像并从中拷贝文件
    关于网卡特性TSO、UFO、GSO、LRO、GRO
    Linux 网卡特性配置ethtool详解
    SecureCRT设置标签显示标题
    关闭SecureCRT的声音
    SecureCRT设置Vim显示颜色
    centos关闭swap分区
    制作CentOS7.6 自动安装ISO镜像光盘
    带阵列卡的机器打开磁盘cache
  • 原文地址:https://www.cnblogs.com/besti-20199303/p/11628068.html
Copyright © 2011-2022 走看看