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

    1.操作系统的两把宝剑和三大法宝

      两把宝剑:一把是中断上下文的切换——保存现场和恢复现场;另一把是进程上下文的切换。
      三大法宝:存储程序计算机、函数调用堆栈机制、中断。
    

    2.源代码根目录的几个关键目录

      include:头文件目录,存放公共的(各种CPU体系结构共用的)头文件。比如ARM架构特有的一些头文件在arch/arm/include目录及其子目录下。
      init:init是初始化的意思,存放Linux内核启动时的初始化代码。
      ipc目录:IPC就是进程间通信,ipc目录里面是linux支持的ipc的代码实现。
      lib目录:公用的库文件,里面是一些公用的库函数。这里的lib目录下的库函数就是用来替代标准库函数的。
    

    3.构造一个简单的linux内核

      采用如下命令行将Linux系统和一个简单的文件系统运行起来。
      $ cd ~/LinuxKernel/
      qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
       构建Linux系统MenuOS
    


    qemu仿真kernel;bzImage是vmLinux经过gzip压缩后的文件,是压缩的内核映像。 使用gdb进行调试,首先将内核启动,然后冻结。再另外打开一个窗口,启动gdb,把内核加载进来。

    (gdb)target remote:1234,用1234这个端口进行连接
    (gdb)break start_kernel 在start_kernel设置断点

    此时输入c运行,代码停留在start_kernel处
    在github上查看start_kernel代码

    在rest_init处设置断点

    在github上查看rest_init()代码

    kthread函数的任务是管理和调度其他内核线程kernel_thread。init_task()为创建init进程后,调用cpu_idle()
    演变成了idle进程,执行一次调度后,init进程运行。1号内核线程负责执行内核的部分初始化工作及进行系统配置,最后调用
    do_execve加载init程序,演变成init进程,init进程是内核启动的第一个用户态进程。kthreadd(PID为2)进程由0号进程
    创建,始终运行在内核空间,负责所有内核线程的调度和管理。

  • 相关阅读:
    Spring IOC 容器源码分析
    OAuth协议简介
    MySQL安装步骤
    C# read and compute the code lines number of cs files based on given directory
    C# StreamWriter log batch message sync and async
    HttpClient SendAsync
    WebRequest, WebRequest.Create GetResponse() GetResponseStream()
    C# FileSystemWatcher
    Access Volumn via extern and invoke win 32 dll
    Change file readonly property File.SetAttribute and new FileInfo readonly property
  • 原文地址:https://www.cnblogs.com/baoxiyuan/p/13888051.html
Copyright © 2011-2022 走看看