MOOC《Linux内核分析》——学习总结
来源:互联网 发布:淘宝用支付宝登录不了 编辑:程序博客网 时间:2024/05/16 16:57
许松原创,转载请注明出处。
Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000
为期8周的Linux分析课程结束了,此间写了几篇博文来记录学习过程。之前我一直作为读者来读各位大神的文章,但真自己写的时候又完全是另外一个样子了。作为一个之前几乎从不写技术文的菜鸟之作,大家可以很明显的看到这八篇文章都是一个路子:死板有余而灵性不足,试图面面俱到但火候欠缺。希望诸位在读本人文章的时候对本人拙劣的写作能力能够多加海涵,有意见还请不要保留(希望能在这篇文章的回复里面看到有用的建议)。(>_<)
下面是这八篇博文的链接以及简单介绍:
反汇编一个简单的C程序:通过对一段简单的C语言代码进行反汇编得到其对应的汇编代码并分析之,以了解C代码的执行过程。
进程切换初观:基于一个简单的时间片轮转多道内核代码,对Linux的进程切换过程进行简单的了解。
start_kernel();Idle进程与Init进程:通过对start_kernel()函数的分析,来理解Linux中的0号进程、1号进程以及Idel进程是怎么来的。当时写这篇文章的时候完全抓不住重点……比我写的好大有人在,承蒙诸位评审抬一手给了5分评价,谬赞了。
使用库函数API与C代码嵌入汇编完成同一个系统调用:通过两种方式来调用同一个系统调用,初步理解系统调用的工作过程。
分析system_call中断处理过程:在第四篇的基础之上分析system_call的处理过程。
创建一个新进程的过程:通过fork系统调用创建一个新的进程并跟踪分析Linux内核创建一个新进程的过程。
exec*系函数对应的系统调用处理过程:通过使用exec*函数在主程序中启动一个新的程序,跟踪此过程以理解exec*系列函数的执行过程,理解Linux内核是如何启动并让新程序运行起来的。
进程切换的过程:分析schedule()函数的执行过程,理解Linux是如何进行进程调度以及切换的。
八篇博文列出来之后这么一看,原来觉得还算有点内容的东西实际上如此单薄……但既然是总结,那就必须得在这些看起来单薄的内容上压榨出来点什么:将每篇文章再总结一次无疑是无聊和无意义的,那就换个角度来提两个问题吧:
- 实际工程中为什么会有Memory Pool 和 Thread Pool?
- 为什么大家都喜欢epoll?
其实两个问题的答案都一样:因为比较快。但是如果问的更加深入一点——为什么这样做会比较快?——怎么回答?
对于第一个问题,在学习完这八周的课程之后应该很好回答了:资源的创建需要时间,而且每次创建资源使用的系统调用会使得程序进行用户态-内核态的切换,这同样也是很花费时间的。于是很自然的,一次性通过少数几次的系统调用来分配一定量的资源,等到需要的时候直接在用户态申请就可以了。这样可以避免程序频繁进行系统调用带来状态切换的开销,从而提高程序的运行效率。如果继续扯“预先分配的资源不足的话怎么办”还能扯到算法分析中的摊还分析——呃,离题太远,就当我是在吹牛好了。
对于第二个问题,很遗憾我不能在这篇文章中给出具体的回答了。原因很简单,没有分析就没有发言权,我所知的一点皮毛在相关源码剖析面前一文不值(大家可以看一下知乎上类似问题以及回答)。
自己提了一个自己回答不上来的问题,这不打脸么?我个人以为学东西就是一个自虐的过程,所以这当然是在打自己的脸——然而自己打总比别人打来得好,至少下手能轻一点。这里提这个问题的主要目的在于说明这门课究竟为我带来了什么,仅仅在于那几篇文章里面的结论么?当然不。
侯捷先生有言:“源码面前,了无秘密”。回过头看这门课的内容,它真正做到了授之以渔:如何根据自身需要去着手分析Linux内核。感谢这门课程和孟老师给了我面对Linux内核的信心,它之于我不再是遥不可及不可撼动,那本《深入理解Linux内核》也不再那么令人惊悚了,甚至有时候自我感觉良好还能对着自己那本积了灰尘的《Windows内核原理与实现》起点非分之想——当然,贪多不化,量力而行,小子这点自知之明还是有的。另外,谢谢自己选课时的偏执,没有在最后关头弃了这为我打开了另外一扇门的课程。遗憾的话——或许是我眼界不够,认识不足——唯一的遗憾是这门课程少了一点实际应用,配个小项目之类的供有兴趣的筒子们继续深化就更好了。
PS:文章貌似没有严格按照要求来写——有感而发,著而成章;理科生文笔,咄。
- MOOC《Linux内核分析》——学习总结
- 《LINUX 内核分析》MOOC课程总结
- MOOC《Linux内核分析》——进程切换的过程
- MOOC《Linux内核分析》——分析system_call中断处理过程
- Linux内核分析MOOC课程汇编分析
- MOOC课程《Linux内核分析》——反汇编一个简单的C程序
- MOOC课程《Linux内核分析》——进程切换初观
- MOOC课程《Linux内核分析》——start_kernel();Idle进程与Init进程
- MOOC《Linux内核分析》——创建一个新进程的过程
- MOOC课程《Linux内核分析》——start_kernel();Idle进程与Init进程
- 网易MOOC《Linux内核分析》第一节作业
- MOOC《Linux内核分析》第一课
- 《Linux内核分析》MOOC课-mykernel实验
- MOOC《Linux内核分析》第二课
- MOOC《Linux内核分析》第四课
- Linux内核分析:Linux内核学习总结
- linux内核分析学习总结
- Linux内核分析学习总结
- java中的多态和继承---"编译看左边,运行看右边"(多态执行)
- jQuery ui 百叶窗blind方向设置
- 面向对象设计_C++_类
- 不要在上班时间看书 经典啊
- Java的集合类
- MOOC《Linux内核分析》——学习总结
- Spring学习笔记(8)-----------依赖注入
- libsvm安装及使用
- 敏捷团队高效的完成软件架构设计
- armadillo库之对称矩阵的特征值与特征向量
- 欧拉筛法求欧拉函数
- Android自定义View------柱状统计图
- 01_05 数据获取和清理概览
- 浅谈扩展欧几里得算法