Linux内核分析课程总结

时间:2022-11-18 16:49:50

对Linux内核的理解

计算机如何工作的?

  • 计算机是通过从内存中运行第一条指令,并根据其指令的内容和要求,对存储器进行相应的操作和运算,最后根据地址将结果保存至制定的位置之中。接下来,周而复始,不断的提取和运行指令,最终保存结果。直到出现停止的指令,才会停止工作。

操作系统是如何工作的?

  • 操作系统能够完成很多功能,例如:程序创建、程序执行、I/O设备访问、控制对文件的访问、系统访问、查错和纠错、簿记。
  • 操作系统的两把双刃剑:中断上下文和进程上下文的切换
  • 通过对myinterrupt.c的代码分析理解进程的切换机制
  • 操作系统保存了一些队列,每个队列都是一组等待某些资源的进程。
  • 短程队列是由在主存中并处于就绪状态的进程组成。这些进程中的任何一个进程都可以作为处理器的下一个选用者,具体选择哪个进程由分派程序决定。(中断上下文)
  • 长程队列是一列等待使用系统的新进程。操作系统通过将一个进程从长程队列转移到短程队列,向系统增加任务。每个I/O设备都有一个I/O队列。等待使用某个设备的所有进程都排在该设备队列中。当中断发生时,操作系统得到处理器的控制权。一个进程可能会求助于操作系统提供的一些服务。在这种情况下,服务调度处理程序成为进入操作系统的入口。

构造一个简单的Linux系统MenuOS

  • 将内核编译成一个init文件,并将其拷贝在rootfs目录之下
  • 利用qemu开源仿真器模拟内自己所写系统的启动
  • 通过-kernel命令启动内核,通过-initrd命令设置存储硬盘
  • 可以使用-s与-S参数,并配合gdb来对内核启动的过程进行逐步的调试分析

中断处理

  • 中断处理可以根据以下两幅图来理解:
    Linux内核分析课程总结
    Linux内核分析课程总结

创建新进程

  • 步骤如下:
  • dup_task_struct中为其分配了新的堆栈
  • 调用了sched_fork,将其置为TASK_RUNNING
  • copy_thread中将父进程的寄存器上下文复制给子进程,保证了父子进程的堆栈信息是一致的
  • 将ret_from_fork的地址设置为eip寄存器的值
  • 最终子进程从ret_from_fork开始执行。

可执行文件的装载

  • 可以通过下图来理解:
    Linux内核分析课程总结

目录链接

对于Linux系统的理解

       在本文章的开头已经对所学习的Linux课程的各个小部分进行了简要的记录阐述。说实在的,对于Linux这种开放源的系统,我们所能学到的东西特别多。我们现在所学的仅仅是一些最基本的内容,也可以说是了解一下Linux系统的骨架。但是在实际操作之中,更加有趣的便是能够利用所了解到的这些基础的内容,再加上自己的一些理解,在一个简单的系统之上去慢慢添加一些功能和内容,逐步得做出属于自己的Linux系统。虽然这种想法很美好,似乎完成之后也很有成就感。但是,以我现在的基础,还是很难实现的。但是我想,将一开始最基础的内核启动、中断处理、进程切换等基础的内容再进行深入的了解吧,从而做到积少成多,不能仅仅知道其中的一些皮毛而满足。到最后希望自己也能够真正理解Linux这个“*”的系统!也希望老师您能开设进阶的课程,让我们继续能够探索Linux!

经验感受

       由于是学校课程的要求,在还未开学的时候就已经接触到了这门课程。在这门课程之前,并未接触过网课的模式。但在第一周的时候,就喜欢上了这种上课的模式。每周的视频学习,根据所布置的任务,再进行进一步的学习和了解。所以每周都是过着很充实的生活,当然很重要的是能够自己将任务合理地分配到一周的7天,并且在学习的过程之中要懂得查阅资料和记录每一个成果和问题,最终通过整理和分析来得到结果。

“原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”