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

    计算机和操作系统的法宝

    • 计算机三个法宝 存储程序计算机、函数调用堆栈机制、中断
    • 操作系统:中断中断上下文的切换--保护和恢复现场 进程上下文的切换。

    Linux源代码目录分析

    • arch目录:代码量庞大,支持不同CPU的代码。
    • documentation:文档
    • init目录:main.c根文件 初始化内核
    • net:网络相关的代码;

    使用gdb跟踪内核运行过程

    —S free
    

    打开gdb

    file linux-3.18.6/vmlinux
    

    加载完成后,连接

    target remote:1234(关闭1234端口)
    break start_kernel
    c(系统开始执行)
    list
    


    start_kernel函数源码及简要注释

    asmlinkage __visible void __init start_kernel(void)
    {
    …
    set_task_stack_end_magic(&init_task);
    printk(KERN_NOTICE"%s", linux_banner);  /* 输出linux版本信息 */
    setup_arch(&command_line);   /* 设置与初始化硬件体系相关的环境并调用 */
    sched_init()                 /* 初始化调度器,先于中断开始前 */
    printk(boot_command_line);   /* 提取分析核心启动参数过程(从bootloader中传递) */
    parse_early_param();
    parse_args
    trap_init();                  
    return
    early_irq_init();              /* 中断初始化过程 */
    init_IRQ();          
    init_timers();                /* 初始化定时器 */
    timekeeping_init(); 
    time_init(); /* 设置定时器及返回当前时间 */
    console_init() /* 初步的初始化控制台 */
    vmalloc_init();
    vfs_caches_init_early(); 
    mem_init(); /* 初始化内存并计算可用内存大小 */
    kmem_cache_init(); /* 初始化SLAB缓存分配器 */
    calibrate_delay(); /* 延迟校准 */
    fork_init(num_physpages); /* 初始化max_threads,init_task参数为fork()提供参考 */
    buffer_init(); /* 初始化块设备读写缓冲区 */
    vfs_caches_init(num_physpages); 
    signals_init(); /* 初始化内核信号队列 */
    rest_init(); /* 最后实际进入reset_init()函数,包括所有剩下的硬件驱动,线程初始化等过程,这也最终完成start_kernel的启动过程 */
    }
    

    总结

    通过本次实验了解到了Linux系统的目录结构,及其对应目录的作用,简单的分希了start_kernel。了解到不管分别哪个模块时基本都要经过 start_kernel。

  • 相关阅读:
    Leetcode 233 Number of Digit One
    获取各种常见形状的位图
    关于编程
    LintCode-第k大元素
    基于IBM Bluemix的数据缓存应用实例
    LeakCanary:简单粗暴的内存泄漏检測工具
    MFC,C++,VC++,VS2010 之间究竟是什么关系
    我对高考考场制度(比方是否同意迟到、忘带考证、上厕所)优化的点滴思考,不一定非常有道理
    ural 1989(树状数组+多项式hash)
    TI C66x DSP 系统events及其应用
  • 原文地址:https://www.cnblogs.com/banpingcu/p/11652835.html
Copyright © 2011-2022 走看看