20125133 马国祥 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
对Linux系统的理解及学习Linux内核的心得:
- Linux是一个极为庞大的,由C与汇编语言写成的操作系统。
- Linux分开内核态和保护态,内核态拥有最高的访问权限,常常帮助用户态进程实现功能。
- Linux创建新进程的代码十分的漂亮,fork()函数和execve()函数创建进程的方式是把父进程的复制一遍再破坏掉。
- Linux的进程切换做到了“智能”,在schedule()中有一个类似于OOD的策略模式封装在pick_next_task,挺让我惊讶的,而且随着内核版本迈进4.0时代,Linux的运行将有可能更高效。
- Linux的设计处处精巧,在这八个星期里面我们只学了汇编基础、程序的装载、线程的切换。让我们受益良多。
实验目录:
第一周实验
反汇编一个简单的C程序,分析汇编代码在计算机中的工作过程 http://user.qzone.qq.com/617434934/blog/1425827080
第二周实验
一个简单的时间片轮转多道程序内核代码 http://rc.qzone.qq.com/blog
第三周实验
跟踪分析Linux内核的启动过程查看 http://user.qzone.qq.com/617434934/2
第四周实验
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 http://weibo.com/p/1001603825522235866495?from=page_100505_profile&wvr=6&mod=wenzhangmod
系统调用是进程进入内核空间的一种方法,稍后我们会接触到第二种进入内核的方式:中断。
第五周实验
分析system_call中断处理过程 http://weibo.com/p/1001603828405169700271?from=page_100505_profile&wvr=6&mod=wenzhangmod
中断异常也是一种进入内核态的方法之一,不过这个方法是不受程序所控制的,既我们无法预知和控制中断的到来。所以在中断的到来之前,我们必须做好准备。中断和系统调用一样,都会进入核心态,而且他们使用了一个同样的办法。定时器中断,它给系统提供了固定时间的中断间隔,也就是每过一个固定的时间,定时器都会发生一次中断。通过上面的学习,我们知道中断的发生,可以检查是否要发生进程的切换。所以在一定程度上,定时器中断可以调高系统的相应时间,尽量减少了进程长时间得到不处理器运行的饥饿情况。
第六周实验
分析Linux内核创建一个新进程的过程 http://weibo.com/p/1001603830732274442197?from=page_100505_profile&wvr=6&mod=wenzhangmod
内核同步是保证整个软件系统安全运行的一个非常重要的手段。进程是占用了一定的系统资源的一个程序的实体,或者说是正处于执行期的程序。进程不仅仅是一段可执行的代码,它还包括一些其他系统资源,如打开的文件、挂起的信号、内核内部数据、处理器的状态、地址空间以及一个或多个执行线程,当然还包括用来存放全局变量的数据段。
第七周实验
Linux内核如何装载和启动一个可执行程序http://weibo.com/p/1001603833670539597307?from=page_100505_profile&wvr=6&mod=wenzhangmod
第八周实验
理解进程调度时机跟踪分析进程调度与进程切换的过程 http://www.cnblogs.com/emochuanshuo/p/4394972.html
进程的调度是内核里面非常重要的一个部分,该模块完成了进程的切换功能,既它要选择一个最合适的进程去执行。
总结:
学习这门课最大的收获就是明白了一些分析代码问题的思路与方法,我觉得这也是最重要的的,抓住零散的代码中的关键才是深入理解的必要条件。也学会了边上课便做笔记,这样子的学习效率特别高,而且可以拓展到Offline的课堂,甚至到生活中去。夸张一点地说,学会记笔记,延长了自己的生命。因为当一天过去以后,不用思考自己这一天是不是又浑浑噩噩地度过了,至少我知道我记录下了我今天遇到的东西。等到有一天自己大脑的记忆体不再好用的时候,我还可以查看以前的笔记。学习了孟宁老师的课程收获挺多的,实在找不到什么最大的遗憾。要说遗憾就是因为时间有限,没能把Linux-3.18.6的内核代码全部分析一变,希望以后有时间可以完成这个艰巨的任务。