Linux学习总结
2016-04-21
张超《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
通过对Linux系统的学习,能跟深刻的理解系统的工作机理。还有他们的那种思想方法,也有助于我们编程能力的提升。
首先我们先对Linux的内核的启动进行了分析。我们分析它的每一行代码的含义。具体见Linux内核启动分析
然后我们作为程序员,离不开编程,有时候需要用到系统调用,这就引入了Linux下的系统调用。具体见Linux系统调用
然后就必须说说系统调用sys_call,这些操作系统为我们提供的系统调用接口。具体见Linux系统调用system_call
然后我们这时候就会想怎样创建一个新进程。具体见Linux如何创建一个新进程
然后我们知道了如何创建一个新进程,接下来就像知道Linux内核如何装载并执行一个可执行程序的,见Linux装载并执行一个可执行程序
知道了这些以后,我们就会想,Linux系统下进程是如何进行调度与切换的。具体见Linux进程调度与切换
总结:
通过《Linux内核分析》这门课,首先熟练了Linux编程以及命令,学会了如何调试程序在Linux系统下。而且更加深入的理解了Linux的部分工作原理通过对源码的跟踪与分析。我们对Linux的内核启动进行了分析。这里我当时忘了给出堆栈的分析。即Linux如何启动起来的。从0号进程,到一号进程,再到n号进程。接着我们又对系统调用的源码进行分析与追踪。了解一些系统调用函数以及系统是怎么实现系统调用的。如何从用户态切换到内核态,再从内核态切换回用户态。还有system_call。接着我们又对创建进程的源码进行了分析与追踪。了解了fork创建一个新进程不过是父进程的一个副本,以及进程队列是一个双向循环链表。接着我们又分析并追踪了Linux装载并执行一个可执行程序的源码,这里使用exec*库函数加载一个可执行程序。我们调用execve的可执行程序时,当执行到exceve时,系统调用exceve陷入内核,这时会创建一个新的用户态堆栈,实际是把命令行参数的内容和环境变量的内容通过指针的方式传递给系统调用内核处理函数的,然后内核处理函数在创建可执行程序新的用户态堆栈的时候,会把这些拷贝到用户态堆栈初始化新的可执行程序的执行上下文环境(先函数调用参数传递,再系统调用参数传递)。这时就加载了新的可执行程序。系统调用exceve返回用户态的时候,就变成了被exceve加载的可执行程序。最后对进程的调度与切换的源码进行分析与追踪,了解了进程调度的时机与进程切换,最后我们还给出了Linux的一般执行过程以及几个特殊的情况。
最大的遗憾就是Linux还有很多其他的东西还没有学习到。课程到这里就结束了。有点意犹未尽,希望能做更多的关于Linux内核知识的讲解。不过这些是核心。已经大体上帮我们构建出了Linux内核的框架。