Linux内核分析总结

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

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

第一周:从一段代码的汇编看计算机的工作原理 http://www.cnblogs.com/20135230pjy/p/5216600.html

第二周:一个简单的时间片轮转多通道程序内核http://www.cnblogs.com/20135230pjy/p/5240823.html

第三周:从Linux内核代码分析操作系统启动过程http://www.cnblogs.com/20135230pjy/p/5271349.html

第四周:由一段代码解析系统调用原理http://www.cnblogs.com/20135230pjy/p/5296995.html

第五周:分析system_call中断处理过程http://www.cnblogs.com/20135230pjy/p/5325444.html

第六周:Linux进程启动过程简析

第七周:linux装载可执行程序简析http://www.cnblogs.com/20135230pjy/p/5372394.html

第八周:Linux进程切换代码分析http://www.cnblogs.com/20135230pjy/p/5400941.html

第一周老师介绍了计算机的基础架构:冯诺依曼架构,CPU将内存中的代码和数据读取到自己的寄存器中,再根据一条条命令调用寄存器进行进一步的操作;同时,老师对基础的汇编语言语法进行了讲解。第二周则是第一周的延伸,在课上老师讲解了一个基于C和汇编语言的程序,实现了时间片轮转多通道程序的功能,我也亲自体验了一遍上下文保存、切换、代码跳转的具体实现。

第三周,老师带我们分析了linux启动的过程,我们亲眼目睹了第一个进程的创建和idle进程的循环,对操作系统的启动过程有了更深入的了解。

第四和第五周,深入到了系统调用这个linux内核中一个重要的模块里,我们了解了系统调用的“三层皮”(API、中断向量、中断服务程序);通过汇编实现一个系统调用,认识了int 0x80的作用(这应该是我印象最深刻的一句汇编代码,O(∩_∩)O~);通过深入追踪sys_call系统调用的内核代码,我们对系统调用的具体实现有了更为深入的理解。(感谢老师提供的简化汇编代码,大大方便了我分析的工作ORz)

第六、七、八周则是分别分析了Linux内核的三个具体功能模块:进程创建、可执行程序装载、进程上下文切换,尤其注意fork这个比较特殊的系统调用,它具有“一次调用,两次返回”的特点,这是和linux中一般的进程不一样的地方。

在第八周的最后,老师对linux系统的架构和执行过程进行了总结,简单来说,用户态进程位于内存的0~3G空间中, 内核代码则位于内存3G以上的部分,在进程由用户态陷入内核态或者进程间切换之前,都要进行上下文的保存,以便返回时之前的环境。

 总结

       通过这门课的学习,加深了我对操作系统理论的理解,知道了Linux系统是如何工作的,如何通过代码阅读、调试去跟踪验证Linux系统的运行机制。

       Linux作为一个极其成功的操作系统,其内核纷繁复杂、博大精深,无疑是很难学习的,虽然在课程中孟老师化繁为简、抽丝剥茧,我也很努力地学完了本课程所有的视频,跟着老师的指导完成了全部的练习和测验,但也只感觉我是刚刚站在这一知识宝库的大门前,大门刚刚露了一个缝隙,要学习的东西真是太多太多了!

       个人觉得,在这门课程中,重要的是不是学习到了多少内核代码(虽然它也很重要);重要的是学习方法,即从何处着手学习Linux内核,课程中给了我们很多这方面的提示,例如:如何调试内核,如何看懂内核中的汇编代码,如何分析系统调用,等等。

       总之,作为入门,这门课程起到了很好的引导作用;师傅领进门,修行靠自身。所以于我来说,这门课虽结束了,但Linux内核的学习才刚刚开始……

posted on 2016-04-24 12:13  20135230潘俊洋  阅读(155)  评论(0编辑  收藏  举报