Linux内核分析总结-路过的小游侠

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

- 这是分割线-
学期过去一半,孟老师的课程也结束了,尽管预料之中的事,但总有些突然。回顾整个课程,一开始的我对Linux内核庞大的代码量望而却步,然而课程开始只是通过孟老师的时间片轮转多道程序内核代码来进入内核代码,内容虽浅,却讲述了操作系统的核心功能 中断和进程调度。由浅入深,从框架到细节。

第一周:计算机是如何工作的

函数堆栈、反汇编C程序、AT&T汇编基础讲解
本节内容简述了在Linux操作系统中是如何调度各个进程的。
Linux内核是一个基于分时的调度机制,所以我们也可以简单的理解为同一时刻只有一个进程在CPU中真正的执行着。

第二周:操作系统是如何工作的

三大法宝:存储程序计算机,函数堆栈,中断
理解进程切换的原理

第三周:构造一个简单的Linux系统MenuOS

start_kernel分析,系统的启动,sched_init(),
init_task完成初始化,成为idle task
使用gdb进行调试,b,s,n

第四周:扒开系统调用的三层皮(上)

用户态内核态中断的理解,系统调用的过程(API和int 0x80)
理解应用程序、封装例程、系统调用处理程序及系统调用服务例程之间的关系

第五周:扒开系统调用的三层皮(下)

对于系统调用,从用户态到内核中的处理函数sys_***,整个过程需要自己体会和分析。
int 0x80与system_call:通过中断向量表匹配

Linux内核分析总结-路过的小游侠_第1张图片

第六周:进程的描述和进程的创建

user code ---> fork() ---> int 0x80                                     user code
                              |                                             |
                         kernel mode ---> sys_call ---> sys_call_table -->sys_***

第七周:可执行程序的装载

ELF描述描述程序一些执行时候被用到的属性,例如文件执行起始位置,堆栈信息等。
动态链接和静态链接的区别
shell环境下用参数执行程序的过程

第八周:进程的切换和系统的一般执行过程

调度类型
调度时机
调度过程
schedule函数调用context_switch来进行上下文切换,其调用内联汇编switch_to来进行关键上下文切换。 
收藏的图:

Linux内核分析总结-路过的小游侠_第2张图片

总结:

经过两个月的学习,对操作系统的启动、系统功能调用、函数堆栈、进程的创建、切换和可执行程序加载有了一定的了解。
人的学习过程是一个曲线式的螺旋上升的过程,很多知识点从不知,似懂非懂,自以为懂了,到讨论,遇到问题时候的再次学习理解,从而提升理解程度,后来甚至还可以举一反三,这一点这门课上体会很深。
整个课程收获最大的还是调试的技巧(gdb),阅读分析代码的技巧和耐心。对于Linux基本框架的理解也是受益良多,我知道Linux的内容海量,但是理解操作系统调度的原理已经让我觉得收获满满。
本课程的学习也培养了对操作系统的兴趣,我已经开始计划把现代操作系统这本书放到书架前面了。
回归课程上来,其实Linux内核的调度原理是非常理性的一个过程,逻辑严谨,丝毫不差,按着步骤,一步步来,讲道理的话,一般不会出差错。
遗憾是很多其他知识学了忘,以后我会积极的把学的知识,我的理解写到博客上。
希望类似的课程会更多一些,大家要写下自己的理解,在阅读他人博客的时候也会与自己的理解相互辨析,互相学习。
最后,谢谢孟老师,谢谢云课堂的平台,万分感谢。

你可能感兴趣的:(linux内核分析)