读行学堂 读行学堂

庖丁解牛Linux内核

所属微专业:

图片
课程概述

本课程以广受好评的MOOC课程《Linux内核分析》为蓝本,根据随到随学的特点精心编辑整理而来


本课程被认定为【国家精品在线开放课程、国家级一流本科课程】,被评为“2018年度中国高校计算机教育慕课联盟优秀在线开放课程”


本课程为X86 Linux内核分析ARM64 Linux核心精讲,☜点这里!


本课程配套教材《庖丁解牛Linux内核分析》已出版,出版社官方直营享75折优惠,


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


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

本课程以Stable Kernel:linux-3.18.6 为例进行实验和讲解


学员评价


  • 这门课确实非常的好,理论结合实践,抓住了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

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


证书要求


本课程为随到随学模式,一年内任选时间学完2个月的课程内容,随到随学模式不发放证书。

预备知识

熟悉Linux基本操作、熟悉C语言编程、了解基本的数据结构知识

授课大纲

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

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

  • 32位X86汇编基础

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

  • 【测验】X86汇编基础测验

  • 【作业】通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

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

  • 计算机是如何工作的?(续)——函数调用堆栈

  • 利用mykernel实验模拟计算机硬件平台

  • 在mykernel基础上构造一个简单的操作系统内核

  • 【测验】函数调用堆栈与mykernel实验基础测试

  • 【作业】完成一个简单的时间片轮转多道程序内核代码

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

  • Linux内核源代码导读

  • 构造一个简单的Linux系统

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

  • 【测验】第三周单元测验

  • 【作业】跟踪分析Linux内核的启动过程

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

  • 用户态、内核态和中断

  • 系统调用概述

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

  • 使用库函数API和C代码中嵌入汇编代码触发同一个系统调用

  • 【测验】Linux系统调用单元测试

  • 【作业】使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

第五周:扒开系统调用的三层皮(下)

  • 给MenuOS增加time和time-asm命令

  • 使用gdb跟踪系统调用内核函数sys_time

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

  • 【测验】Linux系统调用单元测试(二)

  • 【作业】分析system_call中断处理过程

第六周:进程的描述和进程的创建

  • 进程的描述task_struct

  • 进程的创建fork

  • 【测验】进程描述与创建单元测试

  • 【作业】分析Linux内核创建一个新进程的过程

第七周:可执行程序的装载

  • 预处理、编译、链接和目标文件的格式

  • 可执行程序、共享库和动态链接

  • 可执行程序的装载

  • 【测验】可执行程序装载单元测试

  • 【作业】分析Linux内核如何装载和启动一个可执行程序

第八周:进程的切换和系统的一般执行过程

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

  • Linux系统的一般执行过程

  • Linux系统架构和执行过程概览

  • 【测验】进程切换和系统执行过程测试

  • 【作业】理解进程调度时机跟踪分析进程调度与进程切换的过程

课程考试

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

  • 如需开具发票,发票面额为原价,特惠价购买需补齐原价。

  • 随到随学模式不发放证书。

所属微专业

所属系列课程

分享