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(),而后一号线程负责执行内核的部分初始化工作及进行系统配置

  • 相关阅读:
    Oracle Linux 6.1 说明
    Oracle Golden Gate 系列 小结
    Oracle 执行计划 提示 'PLAN_TABLE' is old version 解决方法
    Oracle 聚合函数(Aggregate Functions)说明
    Oracle 11g 行列互换 pivot 和 unpivot 说明
    Oracle 聚合函数(Aggregate Functions)说明
    MySQL 数据文件 说明
    MySQL 启动故障 处理 小记
    Oracle Validated Configurations 安装使用 说明
    Oracle DBMS_STATS 包 和 Analyze 命令的区别
  • 原文地址:https://www.cnblogs.com/besti-20199303/p/11628068.html
Copyright © 2011-2022 走看看