Linux内核分析课程总结
对Linux内核的理解
计算机如何工作的?
- 计算机是通过从内存中运行第一条指令,并根据其指令的内容和要求,对存储器进行相应的操作和运算,最后根据地址将结果保存至制定的位置之中。接下来,周而复始,不断的提取和运行指令,最终保存结果。直到出现停止的指令,才会停止工作。
操作系统是如何工作的?
- 操作系统能够完成很多功能,例如:程序创建、程序执行、I/O设备访问、控制对文件的访问、系统访问、查错和纠错、簿记。
- 操作系统的两把双刃剑:中断上下文和进程上下文的切换
- 通过对myinterrupt.c的代码分析理解进程的切换机制
- 操作系统保存了一些队列,每个队列都是一组等待某些资源的进程。
- 短程队列是由在主存中并处于就绪状态的进程组成。这些进程中的任何一个进程都可以作为处理器的下一个选用者,具体选择哪个进程由分派程序决定。(中断上下文)
- 长程队列是一列等待使用系统的新进程。操作系统通过将一个进程从长程队列转移到短程队列,向系统增加任务。每个I/O设备都有一个I/O队列。等待使用某个设备的所有进程都排在该设备队列中。当中断发生时,操作系统得到处理器的控制权。一个进程可能会求助于操作系统提供的一些服务。在这种情况下,服务调度处理程序成为进入操作系统的入口。
构造一个简单的Linux系统MenuOS
- 将内核编译成一个init文件,并将其拷贝在rootfs目录之下
- 利用qemu开源仿真器模拟内自己所写系统的启动
- 通过-kernel命令启动内核,通过-initrd命令设置存储硬盘
- 可以使用-s与-S参数,并配合gdb来对内核启动的过程进行逐步的调试分析
中断处理
- 中断处理可以根据以下两幅图来理解:
创建新进程
- 步骤如下:
- dup_task_struct中为其分配了新的堆栈
- 调用了sched_fork,将其置为TASK_RUNNING
- copy_thread中将父进程的寄存器上下文复制给子进程,保证了父子进程的堆栈信息是一致的
- 将ret_from_fork的地址设置为eip寄存器的值
- 最终子进程从ret_from_fork开始执行。
可执行文件的装载
- 可以通过下图来理解:
目录链接
- 1、《计算机是如何工作的》 http://www.cnblogs.com/Spr1ngxx/p/5222168.html
- 2、《操作系统是如何工作的?》 http://www.cnblogs.com/Spr1ngxx/p/5245755.html
- 3、《构造一个简单的Linux系统MenuOS》http://www.cnblogs.com/Spr1ngxx/p/5269655.html
- 4、《两种方式使用同一个系统调用》http://www.cnblogs.com/Spr1ngxx/p/5298069.html
- 5、《系统中断在内核中的实现》http://www.cnblogs.com/Spr1ngxx/p/5325922.html
- 6、《创建新进程的过程》http://www.cnblogs.com/Spr1ngxx/p/5339257.html
- 7、《可执行程序的装载》
http://www.cnblogs.com/Spr1ngxx/p/5361615.html - 8、《进程的切换和系统的一般执行过程》http://www.cnblogs.com/Spr1ngxx/p/5388968.html
对于Linux系统的理解
在本文章的开头已经对所学习的Linux课程的各个小部分进行了简要的记录阐述。说实在的,对于Linux这种开放源的系统,我们所能学到的东西特别多。我们现在所学的仅仅是一些最基本的内容,也可以说是了解一下Linux系统的骨架。但是在实际操作之中,更加有趣的便是能够利用所了解到的这些基础的内容,再加上自己的一些理解,在一个简单的系统之上去慢慢添加一些功能和内容,逐步得做出属于自己的Linux系统。虽然这种想法很美好,似乎完成之后也很有成就感。但是,以我现在的基础,还是很难实现的。但是我想,将一开始最基础的内核启动、中断处理、进程切换等基础的内容再进行深入的了解吧,从而做到积少成多,不能仅仅知道其中的一些皮毛而满足。到最后希望自己也能够真正理解Linux这个“自由”的系统!也希望老师您能开设进阶的课程,让我们继续能够探索Linux!
经验感受
由于是学校课程的要求,在还未开学的时候就已经接触到了这门课程。在这门课程之前,并未接触过网课的模式。但在第一周的时候,就喜欢上了这种上课的模式。每周的视频学习,根据所布置的任务,再进行进一步的学习和了解。所以每周都是过着很充实的生活,当然很重要的是能够自己将任务合理地分配到一周的7天,并且在学习的过程之中要懂得查阅资料和记录每一个成果和问题,最终通过整理和分析来得到结果。
“原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”