• 2019-2020-1 20199319《Linux内核原理与分析》第四周作业


    MenuOS的构造

    基础知识

    1、操作系统的两把宝剑:①中断上下文的切换:保存现场和恢复现场;②进程上下文的切换。
    2、Linux内核以A.B.C.D方式命名:A和B变得无关紧要,C是内核的真实版本,D是安全补丁和bug修复。
    3、Linux内核源码的目录结构:

    • arch:与体系结构相关的子目录列表。存放了许多CPU体系结构的相关代码,使Linux内核支持不同的CPU和体系结构。
    • block:存放Linux存储体系中关于块设备管理的代码。
    • crypto:存放常见的加密算法的C语言代码,如crc32、md5等。
    • Documentation:存放文档。
    • drivers:驱动目录。分门别类地存放了Linux内核支持的所有硬件设备的驱动源代码。
    • fs:文件系统。列出了Linux支持的各种文件系统的实现。
    • include:头文件目录。存放各种CPU体系结构共用的头文件。
    • init:存放Linux内核启动时的初始化代码。其中的main.c源文件中的start_kernel是整个Linux内核启动的起点。
    • ipc:Linux支持的IPC(进程间通信)的代码实现。
    • kernel:存放内核本身需要的核心代码文件。
    • lib:共用的库文件。内核编程中不能用C语言标准库函数。
    • mm:存放Linux的内存管理代码。
    • net:网络相关的代码,例如TCP/IP协议栈等。

    构造一个简单的Linux内核

    启动MenuOS

    在实验楼中打开shell,执行以下两个命令:

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

    注:qemu仿真kernel;bzImage是vnLinux经过gzip压缩后的文件,是压缩的内核映像;initrd是内存根文件系统;linux-3.18.6是内核源代码的目录;rootfs是编译好的文件系统。
    启动结果如下:

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

    使用gdb跟踪调试内核,需要两个参数:

    • -s:在1234端口上创建了一个gdb-server。
    • -S:使CPU初始化之前冻结起来。

    启动内核

    用以下命令启动内核,可以看到它被冻结起来。

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

    建立连接

    再打开一个窗口进行水平分割,输入以下命令,启动gdb,用gdb把带有符号表的内核镜像加载进来,然后连接gdb server。

    gdb
    file linux-3.18.6/vmlinux
    target remote:1234
    

    设置断点

    在start_kernel处设置断点,按“c”则继续执行,系统启动执行到start_kernel函数的位置停在断点处。

    设置断点rest_init,继续执行然后停在断点处,rest_init是在start_kernel的尾部进行调用的。

    start_kernel()


    main.c中没有main函数,start_kernel()相当于C语言中的main函数。 start_kernel是一切的起点,几乎涉及了内核的所有主要模块。

    总结

    内核在启动过程中,init_task()即0号进程创建init进程,调用cpu_idle()演变成idle进程,执行一次调度后,init进程运行。kernel_init()1号内核线程执行内核的部分初始化工作及进行系统配置,最后调用do_execve加载init程序,演变成init进程即内核启动的第一个用户态进程。kthreadd()2号内核线程,是所有内核态其他守护线程的父线程,始终运行在内核空间。

  • 相关阅读:
    linux下mysql忘记密码
    ORACLE 锁表处理,解锁释放session
    二.hadoop环境搭建
    并行与并发的理解
    PgSQl临时表的创建
    UNION types numeric and text cannot be matched
    Excel 自定义关闭按钮
    Excel关闭事件
    VBA 获得绝对地址控制焦点的设置
    Excel TargetRange.Validation为空的
  • 原文地址:https://www.cnblogs.com/fanxiaonan/p/11643287.html
Copyright © 2020-2023  润新知