Linux内核学习总结

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

历次实验目录

linux实验一,计算机是如何工作的?
本次实验主要讲了计算机的工作方式以及x86汇编基础,包括冯诺依曼体系结构,从硬件角度,逻辑上可以抽象为:CPU中存在一个寄存器IP(instruction pointer),IP总是指向内存中的某一块区域(代码段),CPU从IP中取得指令地址执行,然后IP+1,CPU继续取得指令执行,然后反复上述步骤。
从程序员的角度:可以抽象为一个for循环,CPU总是解释执行next instruction()。
CPU在实际取指令时根据cs:eip来准确定位一个指令。
linux实验二,操作系统是如何工作的?
本次实验主要讲了计算机工作的三个法宝:
存储程序计算机工作模型,计算机系统最最基础性的逻辑结构,通过不断执行eip指向地址的指令来使计算机进行工作。
函数调用堆栈,高级语言得以运行的基础,有了调用堆栈,计算机就可以调用带参数的程序,以及保存和恢复现场。
中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序.
linux实验三,构造一个简单的Linux系统MenuOS
本次实验主要讲了linux内核源代码简介,以及如何构造一个简单的Linux系统MenuOS,并且还学会了如何使用gdb跟踪调试程序.
linux实验四,扒开系统调用的三层皮(上)
本次实验主要讲了系统调用的三层皮:xyz、system_call和sys_xyz,以及用户态、内核态和中断处理过程.
以及为什么会有这种级别划分?因为没有访问权限划分容易使得系统混乱(毕竟普通程序员写的函数可能会有明显的疏漏)。
linux实验五,扒开系统调用的三层皮(下)
本次实验主要分析了system_call到iret的过程
首先保护现场,然后根据sys_call_table系统调用表调用系统调度处理函数(eax中存放系统调用号),调用完后看是否还有其他工作,如果有的话根据工作类型,决定是调用work_pend和work_notifysig处理限号,还是进行重新调度。最后restore all,恢复现场,返回(iret)。
linux实验六,进程的描述和进程的创建
本次实验主要讲了task_struct数据结构,即进程的描述,以及进程是如何创建得的.
fork、vfork和clone三个系统调用都可以创建一个新进程,而且都是通过调用do_fork来实现进程的创建,通过本次实验的内容,可以帮助我们区分这三个系统调用的异同.
linux实验七,可执行程序的装载
本次实验主要讲了可执行程序的装载,包括可执行程序是怎么得来的,目标文件的格式ELF,静态链接的ELF可执行文件和进程的地址空间,可执行程序、共享库和动态加载等内容.
linux实验八,进程的切换和系统的一般执行过程
本次实验主要讲了进程的调度时机与进程的切换,以及Linux系统的一般执行过程(最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程),以及一些操作系统的基本知识.并且通过switch_to的代码详细了解了任务切换的具体过程,包括保存恢复等过程.

课程总结

总体来说,linux内核分析是一门非常有用的课程,在孟宁老师的教导下,我们学到了很多关于linux内核的知识,但是我觉得知识是次要的,更重要的是孟宁老师教会了我们如何去深入学习linux内核,包括如何使用gdb逐步调试,如何查找linux内核中对应的代码,如何整体的把握linux系统的精神,而不是着重于具体的代码(这一点我觉得对于我的帮助是非常深远的,不仅仅应用于linux内核的学习上,在看其他大型软件工程的代码时,更要牢记这一点)常言道,授人以鱼不如授人以渔,但是孟宁老师一边交给我们最核心的一部分知识,一边对于课程篇幅有限而无法顾及的部分,又采取了启发式的教育,教育我们如何去探索答案,因此我觉得孟宁老师的课程,是既授以鱼,又授予渔.

你可能感兴趣的:(Linux内核学习总结)