读行学堂 读行学堂

Linux内核分析

所属微专业:

图片
课程概述

本课程被认定为【国家精品在线开放课程、国家级一流本科课程】

本课程是 教育部-华为“智能基座”精品慕课之一


我要立即学习收费课程 X86 Linux内核分析 ARM64 Linux核心精讲,☜点这里!


本课程从理解计算机硬件的核心工作机制(存储程序计算机和函数调用堆栈)和用户态程序如何通过系统调用陷入内核(中断异常)入手,通过上下两个方向双向夹击的策略,并利用实际可运行程序的反汇编代码从实践的角度理解操作系统内核,然后开始分析Linux内核源代码,从系统调用陷入内核,进程调度与进程切换,最后返回到用户态进程,通过仔细分析梳理这一过程,并推广到硬件中断、缺页异常等内核执行路径,最终能从本质上把握Linux内核的实质,乃至在头脑中演绎Linux系统的运行过程。


本课程是 教育部-华为“智能基座”精品慕课之一,课程融入的鲲鹏处理器ARM64架构,新增内容实验环境改为openEuler操作系统。


学员评价

以下来自网易云课堂用户的评价:

  • 这门课的精髓在于,不仅教会你如何分析Linux内核,更教你做事的方法论:“天下难事必做于易,天下大事必做于细”,对于代码量庞大无从下手的内核,我们从小处入手,步步为营,最终掌握全局。——http://www.jianshu.com/p/bc6bf2c0be06

  • Linux内核分析的过程,是对自己肯定,否定,再肯定并不断重复这个循环的过程。作为coder,唯一的快感就是有一种自我肯定的得意。然而这个过程很快会被无情的打破,因为这么庞大的内核,我们始终有一种盲人摸象的茫然。——http://www.jianshu.com/p/89508dde1d39

  • 进程调度算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已。对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键。schedule()函数用来选择一个新的进程来运行,并调用context_switch()进行上下文的切换,这个宏调用switch_to()来进行关键上下文切换,其中pick_next_task()函数封装了进程调度算法。——张备

  • 天下大事必作于细,天下难事必作于易,此句话深有感触。以前觉得很多东西太难望而却步,现在看来一切都是纸老虎,只不过自己把它想的太难了,当认真的去动手去分析去做的时候发现一切都是那么近在眼前。——王一

  • “不识庐山真面目,只缘身在此山中”,是我之前对于linux的感觉。Linux内核分析这门课程刨去了Linux的“皮肉”,更深层次的剖析了Linux的运行原理。但是课程又不止于Linux这个操作系统而已,好似一杯美酒,如一杯下肚,不得其味,需要细细品味,方得醇香。每周的课程并不长,越往后就越要花功夫。——江明星

  • 不得不说,孟宁老师的《Linux内核分析》这门课,讲解深入浅出,真的值得一学,假如你能跟着孟宁老师认真的学下来,一定会有非常大的收获。——Morse1113

  • 通过这门课程,我系统性地、深入地学习了操作系统内核的相关结构和设计原理,与之前不同,《linux内核分析》带领我们从linux内核源代码着手,真正地从根本上去了解linux的工作机制。在这个过程中我尝试了自己去构造一个简单的linux系统并编写和执行了一些简单的系统调用,此外还初步掌握了gdb远程调试的方法,通过设置断点,单步运行来了解每一行代码的行为和原理。——爱吃鸡翅膀

  • 上了孟老师的linux内核分析课程,真的收获很大,大事化小,小事化了,老师把内核最精华的部分拿出来剖析,一个个“简单”而又“复杂”的实验,也让我对内核有了一个更加清晰的认识,之前的很多疑问也解开了。更重要的是,对linux的兴趣愈发不可收拾。在这里,感谢孟老师,感谢这门课。——安常青

  • 在跟随网课学习过程中,我每周都过得很充实。虽然每周的课程时间都不长,但每分每秒都是精华。作为大学生,自学能力尤为重要,而MOOC恰恰培养我们的自学能力,这点收获可以说受益终生。——吴子怡

  • 在这几周的学习中,我最大的收获是从孟老师的教学中学会了从实践中学习和验证知识,找到了属于自己的学习方式,提高了自己的自学效率,学以致用。在此,十分感谢孟老师的教导。——败北的少年ykt1455711731233

  • 如果你想了解Linux内核到底是什么?想解开Linux内核的神秘面纱,跟着孟老师你会一点一点解开Linux内核神秘的面纱,孟老师通过深入浅出的讲解内核的源码,会使你有种醍醐灌顶的感觉,简直不要太爽,会使你深深的爱上Linux内核源码,想更加深入的去研究。——陈强

  • 时光匆匆,转眼为期十一周的学习结束了,犹在耳边环绕的是孟老师诙谐幽默的言谈和深入透彻的讲解。感谢中科大孟宁老师推出的《Linux内核分析》这门课程,使我这个在工作中使用多年的操作系统第一次能有机会分析的这么透彻。——何伟钦

  • 以往对 Linux 的学习总是很零散,不得要领。通过孟老师生动活泼的讲述,有了一种提纲契领的感觉,如庖丁解牛般,从介绍计算机如何工作,到可执行程序的加载和运行,再到进程切换和管理等。选修孟老师的课程让我受益颇多,他给我指明了一条正确学习 Linux 的道路,也让我更有信心去深入学习。——李诗韵

  • 说实话,不是恭维,这门课的遗憾在于时间太短,好多东西没能继续学下去,如果孟老师能接着讲下去就好了,真的能学到很多东西。有些东西学的并不只是一门学科,更重要的是老师的思路,知识如果只是学到,而不能融会贯通,我觉得和没有学过差别不大,提纲挈领比硬塞知识,真的好的多太多,只有逻辑搞清楚,主线弄明白,脑子里的条理才会清晰,这样才能说真的我学了这门课。——王海宁

  • 在这门课程中我最大的收获就是理解了linux内核的运行方式,通过这门课程我对linux内核有一个深入细致的理解。感谢孟宁老师的辛苦付出和网易云课堂提供的平台,为我们呈现了如此精彩的课程,你们为我们打开了一个新世界的大门,我们将带着您的教诲在Linux这片天地中探索前行!——莫凡

  • linux不同于所学的其他东西,捧着一本书死啃一个月也不会有什么进展,除了要自己动手实践之外,还需要一个领路人把你领进去,当你摸索到门道之后才能顺着大路走,否则可能会原地打转,甚至误入歧途,在此真的很荣幸碰到孟老师,将我领入linux的大门,让我去探索,去前进。孟老师的讲解是真心好,每周一个小时的视频,即使那不算实验,到后来,几乎每次都要花上三个多小时的时间去理解它,不下功夫真的跟不上,在此再次感谢孟老师的教导,以及网易云课堂提供的这么一个可以免费学习了解linux的机会,孟老师辛苦了,您的辛苦没有白费,学生们都很敬重您,感激您,感谢您的教导。——王海宁

  • 这种教学方式很新奇,从一开始对每周的任务对的抵触,到一学期过去习惯了这种每周都花固定时间来学习的生活。大学以来学习能力下降了很多,积极性主动性什么的更是几乎消磨殆尽,而这种“使自主”学习方式,让我每天都想着还要学习还要学习,这种态度的转变我觉得是最大的收获。在实际学习中,老师提供了很多新式的平台方式,实验楼自主实验、博客借鉴、小组论坛讨论、合作完成家庭作业等,除去学校网速限制以外我从中受益很多。以前学习遇到问题可能直接就放弃了,等老师课上讲或者问同学,甚至直接跳过。而现在,总是会先自己想想如何解决,然后发到论坛中,和老师同学分享自己的思路,不同的思维碰撞之后得到正确的解答,这样对问题的记忆极其深刻永远不会忘。好的学习方法对学习效果有太大的提升。——陈巧然

  • 课程让我真真切切地了解了如何抓住重点,抓住关键点从而去分析一个系统内核,从而理解一个系统的运行,而不用陷入内核架构中极其繁复的细枝末节中。给人一种抓住重点就可抓住全局的认识,我相信这种认识方法不仅仅适用于了解操作系统内核这种复杂的大型系统,也适用于阅读其他大型软件的代码,从关键点把握全局。——姚开健

  • 老师有时候风趣的讲课方式特别吸引人,特别是老师的微笑,特别可爱。——朱恒志

  • 这门课不仅教会了我知识,还教会了我学习地方法。从结构入手,就像一个去除了枝枝叶叶的大树的主干,一目了然。——芦畅

  • 发现老师讲课比较有意思还举了许多小列子来帮助我们学习:庄周梦蝶,扒开应用系统的三层皮,十分生动形象。还有图形结合的形式也非常有效,关于堆栈的过程讲解也十分清晰明了。通过每周的学习让我养成了每周做笔记,写博客的习惯,将终生受益。而且通过每周批改其他同学的作业可以互相学习,了解到自己学习的不足,加以及时改进。而且通过在实验楼的实际操作提高了自己的动手能力。——朱国庆

  • 孟老师的课要用一个词总结的话就是“深入浅出”,在学这门课之前对linux并没有太多了解,学起来感觉也有点吃力,但看了孟老师的视频后仿佛豁然开朗,不容易理解的部分还可以反复观看视频或者在课上直接询问孟老师,自己动手写博客更是加深了自己对所学内容的理解,也方便自己发现没有真正掌握的部分。课上课下教学的有机结合,充分调动了同学们的热情,寓教于乐。当然最棒的还是老师的教学视频,言简意赅,内涵丰富,举的例子既有生动形象的,也有特别污的。 最后用一句话总结最大的收获就是“天下难事必作于易,天下大事必作于细”。——任栩立

  • 接触linux内核之前,觉得linux内核是神秘的,不可触摸的。然而通过一步一步的学习,逐步的揭开了linux内核的神秘面纱。——treverof

  • 学习真的是一个有趣的过程,学得越认真,基础越扎实,往后效率就越高。——黄晓妍

  • 唯有深入分析过内核,才能“万行代码过,bug不沾身”。 犯其至难,图其至远。——刘帅

  • 这门课对我的最大提示,就是把分析的精力花在20%的关键代码上。——昆仑雪狐

  • 选了这门课,以前对Linux系统零零碎碎的学习,现在才有了提纲契领的感觉。最大的收货还是我再也不用怕厚厚的源码分析了,起码提高了以后对此学习的信心和热情。——黄志远

  • 在这里,要感谢一直以来辛苦授课的孟宁老师,老师利用通熟易懂的方法将晦涩难懂的概念生动活泼的呈献给我们,使我们在快乐中进行学习。——杨明辉

  • 学习感想:痛并快乐着——黄卫

  • 首先这门课的实操性质很强,上完一遍你一定会减少对庞大内核代码的恐惧感;其次孟老师的经验丰富,讲解非常生动有趣,我已经决定继续跟孟老师的另外一门课了;—— 徐晨

  • 老师自称为一个教书匠。但是对课程的讲解却是匠心独运,有自己的理解,并分享给大家。从听课的过程中,看到了老师的博学与授课的认真和风趣。——赵连讯

  • 这学期选了孟老师的《Linux内核分析》这门课,在学习之前听说这门课很难,通过也不是很容易,但我还是选了这门课。课程不容易学,含金量才会大,才会有收获。现在,学习这门课已经两个月了,我的收获很大,特别是以前接触《计算机组成原理》,《操作系统》这两门课时遇到的很难理解的地方,通过孟老师的Linux内核讲解,使我对以前的盲点有了豁然开朗的感觉。我感觉孟老师开始的网上课堂很不错,有种另辟蹊径的感觉,课程内容上传到云课堂上,一方面可以节约课堂上讲授时间,将更多的时间放在答疑方面,另一方面通过新型的授课方式,方便学生课后温习、回顾、吸收、理解。——絮雨清风

  • 老师讲解的方式很是幽默,对一些知识点深入浅出.举的例子甚是形象.对我的学习提供了很大的帮助.感谢孟老师,感谢网易MOOC课堂这个平台 —— 窦猛汉

  • http://blog.csdn.net/umika/article/details/51291749 —— 徐晨 (孟宁注:绝对不是广告!但比我写的广告词好太多了!值得一看!)

  • 八周的课程虽然很短,但是可以看出是孟老师精心准备的课程。大学四年里,上过几十门课,大部分老师都是照着课本、PPT将知识灌输给学生。这门课确实理论与实验紧密相连。不仅仅传授理论知识,还用实验课程来同步教学,让知识掌握的更加牢固。—— 王浩

  • 这门课确实非常的好,理论结合实践,抓住了Linux的核心,并且很好的讲解展现出来,老师的深厚功底也可见一斑。虽然,我可能会很快的忘记了课程中的很多技术细节,但是只要这个感觉在就好。在此,表达对孟宁老师的深深谢意。—— guoyejun

  • 由于这门课,我对系统的理解更加深入地,明白了整个操作系统具体是怎么运作的,同时也学会了怎样看内核代码。——zbh24

  • 原本枯燥难以理解的操作系统知识通过老师幽默的讲解以及丰富的联想再加上动手实验都一一拨云见雾啦, 可以说通过Linux内核源码来理解Linux操作系统是本门课程最大的特点。在学习<<Linux内核分析>>课程中最大的收获就是接触了Linux内核源码这个神秘的以前想都没有想过的东西——jwjjiangwenjun

  • 学习孟宁老师的《Linux内核分析》课程,让我对Linux操作系统内核的运行工作原理有了全面的了解,同时对计算机的工作机制也有了更加深入的理解,给我日常的工作提供了不小的帮助。——chameleonscool

  • 感谢孟宁老师。给我们 带来了一场非常棒的内核体验!——Sip桑

  • 在近两个月的学习过程中,跟着孟宁老师的学习,渐渐地对Linux产生了一个大致的了解,不仅是内核知识点本身,而且包括学习的方法,学习的方向,都有了一些初步的想法。——ES丶行者

  • 之前对Linux的学习总是零零碎碎,东一榔头,西一棒槌,不得要领。通过对《Linux内核分析》课程的学习,有了一种提纲契领的感觉。通过介绍计算机如何工作,到进程的切换、可执行程序的加载、进程管理等等,全部以实践为主,且课后作业也需要复习参考很多资料,使得我又重新拿起课本,温习了遗忘已久的知识,比如AT&T汇编、操作系统、计算机组成原理等。总之,选修这门课程,让我受益良多,它给我指明了一条学习Linux的道路,也让我更有信心去坚持学习它。——ParkerLiu

  • 这门课教会了我学习Linux的方法。这给了我很大信心。特别要感谢孟宁老师团队的无偿奉献,这就是Linux开源的精神吧。——ParkerLiu

  • 被虐的一塌糊涂。。。——柳春卿

  • 学习这门课程最大的收获就是消除了阅读Linux代码的畏难情绪,掌握了一种高效的学习方式,以系统功能为切入点,通过GDB跟踪代码的运行逻辑,快速地理解Linux内核的工作方式。——runner001

  • 学习完这个课程,总体上形成了一个知识的框图。知道大体往哪个方向去努力。一个良好的知识框图对学习是至关重要的,我当初希望学习linux相关的运行机理就错读过不少linux管理方面的书,而实际上这些书并没有提及多少linux运行机理。——qzqsmile

  • 实践出真知,从来没有看到内核的代码离自己这么的近——titer1

  • 谢谢老师非常棒的讲解和精心的课程设计,也感谢实验楼提供的测试环境,在Linux内核学习实验过程中,有过遗憾,有过欢笑,自己得到成长。一声再见,一声祝好,在明天的旅程里,我们还会在不远处相遇。——xujianguo

  • linux内核真的是很有意思,既神秘又很有吸引力,如阿房宫般错综复杂,又如珠穆朗玛峰般,引人去探索,攀登。。。。。。。我逐渐对linux内核产生了感情了,有了这样的感觉就是不一样,摸着那些代码,和以前比较起来,如今的感觉是一种激动,虽然这种激动的情感不是非常强烈,但是我想这是一个非常好的兆头,有了这样的激动,在今后的日子里就会更有意思了。——hhlakc

  • 侯捷先生有言:“源码面前,了无秘密”。回过头看这门课的内容,它真正做到了授之以渔:如何根据自身需要去着手分析Linux内核。感谢这门课程和孟老师给了我面对Linux内核的信心,它之于我不再是遥不可及不可撼动——SsCM

  • 时光匆匆,转眼为期十一周的学习已踏入尾声,犹在耳边环绕的是孟老师诙谐幽默的言谈,眼中浮现的是老师口若悬河的身影。忘不了,忘不了,知遇之恩等同再造,我相信这11周的学习我将永生难忘。——20125111

  • 为期11周的linux内核分析课程已接近尾声,一开始接触linux内核,觉得很虚拟,什么内核态用户态,什么进程创建,什么切换机制等等,都感觉晦涩难懂。在学习过程中,跟着孟宁老师的生动讲解,老师会举出很多形象的例子来解释,以免我们会感到枯燥和乏味,渐渐地对linux产生了一个大致的理解,了解了计算机是如何工作的,操作系统是如何工作的等等,了解到一些函数,针对的是哪些设计思想,实现了什么样的功能,达成了什么样的目的。——20125118

  • 老师带领着我们一层层剥开操作系统的外壳,抽丝剥茧,条分缕析,让我们体会到操作系统原理之精巧,寻得技法之规矩。——黑猫VC

  • 我作为一个入门者,我觉得这门课程十分适用于初学者。孟老师在授课过程中将繁复的Linux内核源码化繁为简,将精华提取出来让我们来学习,我感到十分的幸运。——killer007

  • 没有孟宁老师的教导,我不会对linux有如此深的理解。正是老师诙谐幽默的谈吐,孜孜不倦的教诲,循序渐进的教学方式以及学以致用的教学理念,让我对linux操作系统的知识有了如此深刻的掌握。——l18800166620

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

  • 如果说Linux是一座大山,之前被雾气弥漫,那么学习完整个课程后,可以看见攀爬这座山的路径了,更多的细节,我们可以循着这些路径探索了,其实也并没有那么神秘。——leonacwa

  • 天下难事必作于易,天下大事必作于细。虽然Linux内核规模很庞大,关系错综复杂。如果漫无目的的看源代码,就好像在茫茫大海中漂泊,很难找到目的地。但是只要找准切入口,深入分析,就像拿着地图找宝藏,虽然过程可能会有艰难,但是每一次接近宝藏,都会得到快乐,最后找到了更是开心。这样有目的的,一块一块的分析,就能更有效的学习Linux内核。——迷路的Neo

  • 这门课给我的最大感触是线上的教学方式对传统教学模式带来了很大的冲击,另外我也很喜欢写blog的这种学习方式(记录 + 理解 + 总结)。最后还得感谢孟老师,希望这种教学模式可以在软院进一步推广。——burningcodes

  • 学习这门课最大的收获就是明白了一些分析代码问题的思路与方法,我觉得这也是最重要的的,抓住零散的代码中的关键才是深入理解的必要条件。——gaoxing0031

  • 这学期跟孟老师学了不少,孟老师的课上的mykernel让我有学侯捷老师mini-MFC,mini-STL那种深入浅出的感受,关于内核的taxi girl的比喻有Linus "Software is just like sex:it's better when it's free.  "的风格,讲fork时“庄周梦蝶”的比喻还看出孟老师良好的国学功底——娄老师

以下来自学堂在线用户的评价:

  • 感谢学堂在线与孟宁老师提供的精彩课程,让我获益良多.最大收获便是对 Linux 内核有了整体的认识.可以指导自己在以后的工作,学习中不断学习,深化对Linux 的认识.老师在课程中所讲授的:三个法宝,两把宝剑,大S、小s,道生一、一生二、二生三、三生万物等内容为我巩固了基础知识并提炼了内核基本思想和实际调试时的操作方式.——梅花小筑(简书作者)

  • 从没有接触过这个操作系统的内在之美。之前学完C语言的时候,就想认识这个神秘的Linux内核了,可是一直在数学建模和各种活动中抽不开身,学习的过程也是不得其法。直到我看到孟宁老师的《Linux内核分析》这门课时,我想我大概可以在二十年后吹牛了:“当年我大二,读Linux内核源码的时候.....”——陈政/arc001

  • 这个课程的学习使我进深层次地理解了Linux内核运作,从原来总感觉操作系统是纸上谈兵,到现在有了小上战场的感觉。——苏绚

  • 从来没觉得内核距离自己这么近。老师还曾批评过我说学Linux内核有些“不务正业”,但我觉得在这门MOOC中学习到的是系统底层的“内功心法”,学会了这些,再去学各种上层的知识也更加得心应手了。——陈政/arc001

  • 有幸见到了孟老师,感觉孟老师本人和视频中一样比较风趣。哈哈。。——杨振振


安装Linux系统做实验太麻烦?No,实验楼为我们提供了Web端可访问的虚拟机,立即去看看! 

Latest Stable Kernel:linux-3.18.6


本课程内容被中国科学技术大学软件学院《Linux操作系统分析》课程选用,获得证书经过考核可以充抵部分分数;

本课程内容被北京电子科技学院在《Linux系统及安全》课程教学中选用,获得证书是是成绩优秀的必要条件;


版权声明:本课程非独家授权网易云课堂发布运营,其他商业机构使用本课程需要获得作者授权!


证书要求

合格证书: 综合评定成绩 >= 60分



预备知识

Linux基本操作技能、C语言、数据结构基础、操作系统原理

授课大纲

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

  • 存储程序计算机工作模型

  • 32位X86汇编基础

  • 反汇编一个简单的C程序

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

  • 函数调用堆栈

  • 借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

  • 构造一个简单的操作系统内核

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

  • Linux内核源代码导读

  • 构造一个简单的Linux系统

  • 跟踪调试Linux内核的启动过程

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

  • 使用库函数触发一个系统调用

  • C代码中嵌入汇编代码的写法

  • 使用嵌入式汇编代码触发同一个系统调用

  • 系统调用在内核代码中的处理过程

第五周:程序和进程

  • 程序的编译、链接和可执行文件格式

  • 进程的描述和程序的装载

第六周:进程的执行和进程的切换

  • 用户态堆栈和内核态堆栈

  • 进程上下文的保存和恢复

  • 进程切换的关键代码switch_to分析

第七周:Linux内核的实质和Linux系统的一般执行过程

  • 内核执行路径的集合——中断(异常)处理过程的集合

  • Linux系统的一般执行过程

第八周:Linux系统架构和执行过程概览

  • Linux系统架构

  • Linux执行过程概览

第九周:ARM64计算机系统的工作原理

  • 存储程序计算机

  • ARM64汇编及函数调用堆栈框架

  • 指令乱序和线程安全

第十周:深入理解ARM64 Linux

  • 深入理解ARM64系统调用

  • 进程的创建和可执行程序的装载

  • 进程调度和进程切换

  • Linux系统的一般执行过程和Linux系统架构



参考资料
  • 《深入理解Linux内核》第三版

  • 程序员的自我修养:链接、装载与库 潘爱民 (作者), 俞甲子 (作者), 石凡 (作者)

  • 部分自编讲义http://teamtrac.ustcsz.edu.cn/wiki/Linux2014

  • 参考了中国科大陈香兰老师和MIT的Frans Kaashoek老师的课程资料及互联网上获得相关资料,向原作者们表示诚挚的谢意,如有版权问题请与我联系。

  • “智能基座”产教融合协同育人基地:

    https://edu.huaweicloud.com/activity/colleges.html?ggw_qt

  • 鲲鹏社区:https://www.hikunpeng.com/zh/

  • openEuler官网:https://www.openeuler.org/zh/

  • openEuler开源社区:https://gitee.com/openeuler

  • 华为公有云:https://www.hwclouds.com

  • 华为软件开发云:https://www.hwclouds.com/devcloud/

  • 源代码链接:


所属微专业

所属系列课程

分享