很多很早认识我开发者经常会问我一个问题,我的学习方法是什么,为什么能够快速学会这么多东西。那么今天我希望通过介绍我的学习方法,然后将其应用在分页大专题的学习里,以此来实践一下这个方法的效果。我采用的方法就是大名鼎鼎的费曼学习法,那么接下来我将介绍大家如何利用费曼学习法更高效的学习分页大专题.

图片无法显示,请右键点击新窗口打开图片

费曼学习法精简成上图的四个步骤: Concept(学习概念)Teach(传授知识)Review(查缺补漏)Simplify(简化比喻). 如果要利用好费曼学习法,那么四个环节都不能少,分页大专题也为开发者布局好了如何实现四个环节,具体如下:

  • Concept: 概念学习阶段,分页大专题提供了视频和文档,由于文档内容特别多和细,建议开发者先跟着视频走完一遍,然后把文档当做工具书来用。其次在学习理论的时候采用 BiscuitOS 提供的内存流动内存场景两大功能,充分实践所学的内容,做到使用内存流动窥探整个内存机制.
  • Teach: 传授知识阶段,开发者可以将分页大专题所学的内容整理成完善的文档,然后将其分享到 BiscuitOS 社区,让更多的开发者来学习你的成果,同时我的分页大专题会专门收录你的内容,让后来者也可以学习你的文章。该过程开发者应该重点思考如何将自己理解的内容让别人能看懂学懂.
  • Review: 开发者将自己的文档分享到 BiscuitOS 社区里,那么其他开发者通过学习会给出相应的意见和建议,这个对你来说是一次非常有用的反馈,你可以思考其他开发者为什么会提出这些问题,以及自己是怎么看待这个问题的,最后再更新到自己的文档里。另外开发者可以在群里积极回答其他开发者提出的相关问题,这也是对自己学习成果的一种利用
  • Simplify: 有了前三个阶段的铺垫,那么开发者回过头来再看之前的学习的内容,此时能否用一句话总结所学的内容,或者一句话说出技术的核心.

以上便是费曼学习法在分页大专题里的实践,那么接下来希望各位开发者可以将这四个环节都能做到位,我会在你学习过程中一直提供指引!

图片无法显示,请右键点击新窗口打开图片

费曼学习法提供了一套完整且闭环的学习方法,但对于 Concept(学习概念) 环节并没有明确指明如何做,那么接下来继续给各位读者分享 BiscuitOS 在 Concept(学习概念) 环节如何做到高效的学习。在 Linux 内存管理里,之所以很难全面的理解和应用内存管理,很多一部分因数是: 内存管理是一个高度集权化的场景技术,说白了内存管理发展到如今就是为了解决各种各样的内存使用场景,并不断的将代码逻辑复用和规整,最后就形成了一个技术壁垒特别高的子系统。对于技术壁垒特别高的子系统要向突破它还是有一些可行的方法,正如上图,右边是用积木搭建的宏伟建筑,第一眼看到会感觉到搭建这个建筑一定非常的困难,不是一般能力和毅力所能及的,就是有了这样的敬畏之心才在读者心中形成一座无法跨越的大山

图片无法显示,请右键点击新窗口打开图片

中国有句古话: “山穷水尽疑无路 柳暗花明又一村”,说的是内心的恐惧如同无法翻阅的高山,但真的把它翻阅了其实也没有那么困难. 作为一个过来人,内存管理其实也是这样的,看着技术壁垒特别高,其实攻破了也很简单. 那么回到正题,开发者首先不要有任何的恐惧的心里,任何复杂的是否也都是由简单的东西构成的,就像上图雄伟的建筑还是一样由一块块积木构成的,这是我门应该学习两种能力:

  • 拆的能力: 任何一个复杂的事物都是由简单的元素构成,因此在内存管理的学习中要学会将一个复杂的机制进行拆分,把他拆分成最小技术单元,这些技术单元在分作两类,一类是你已经掌握的技术能力,另外一部分是你没有掌握的技术能力,那么接下来就是将没有掌握的技术单元逐一学习攻破.
  • 合的能力: 当把拆分之后的技术单元都已经全部攻破的时候,那么可以逆向思维将其进行合并成原来的复杂的技术,那么此时轻松的将复杂技术进行研究攻破,此时你会发现原来一个复杂的技术是这么简单
  • 魔改能力: 当你手里积累了越来越多的技术单元之后,当你接受到一个需求之后,你就可以思考如何用手里的技术单元来拼凑出这个大需求,这也就是一个架构能力的培养,以及需求到技术落地的能力培养.
  • 视野能力: 当你手里的技术单元越多,那么会让你的地基越牢靠,那么你的技术广度就会越广,以及技术高度就越高,这也就培养你思考问题就越发的全面.

以上的四个能力是需要长期的时间和实践进行积累才能得到,但相对来说难度不是很大,知道正确的引导和长期坚持就可以达到. 接下来继续介绍另外一个可以实际操作的方法论, 分页大专题主打两个特色: 内存流动内存场景,整个专题也是基于这两个特色进行内存管理讲解, 那么这两个特色有什么特别之处?

图片无法显示,请右键点击新窗口打开图片

内存管理是面向内存使用场景的技术,因此每个内存技术的出现都是要解决某种内存使用的场景,那么采用拆的能力获得一个内存场景之后,内存场景会从上而下(无论是用户空间还是内核空间),其都会将请求下发给内核,内核在进行处理(如果需要硬件介入,那么内核将请求继续下发给硬件,硬件处理完毕之后将结果返回给内核),内核处理完毕之后再将结果返回给内存场景。对于一个独立的内存场景而言,刚刚的处理逻辑已经完整的包含了内存场景所需要的所有资源和处理逻辑, 这就是一个完整的技术单元.

图片无法显示,请右键点击新窗口打开图片

当准备好完整的技术单元之后,接下来就是使用内存流动工具查看内存从内存场景开始,直到内核或者硬件是如何流动的,查看内存流动的过程可以直到该内存场景的代码逻辑是什么样的,以及内存流动到一些代码分支时如何做出选择. 由于 BiscuitOS 的 Broiler 项目支持硬件模拟,因此内存流动工具也可以看到内存在某些硬件里的流动.

图片无法显示,请右键点击新窗口打开图片

例如在一个内存场景里,需要将文件映射到进程的地址空间,那么使用内存流动工具查看了文件打开时从用户空间到内核空间,在到磁盘的流动的完整流动,并将整个流动过程绘制成图表,一目了然文件打开的动作系统是怎么处理的. 同理使用内存流动工具查看文件映射到地址空间之后,进程访问这段虚拟内存触发缺页之后内存如何流动,都可以使用内存流动工具看到一清二楚. 接下来读者只需将这个场景涉及的代码逻辑完全攻克,那么这个技术单元就能为你所用.

图片无法显示,请右键点击新窗口打开图片

当你将一个技术单元研究透彻,也就是一个内存场景涉及的代码路径都研究透彻之后,接下来你可以采用类比的方法研究相似的场景,这个过程类似于将你的已知的代码路径变得更宽,只要研究的场景越多,那么整个大的技术单元也会很快被攻破,可谓事半功倍.

图片无法显示,请右键点击新窗口打开图片

通过上面的方法基本将一个技术单元涉及的代码知识点都覆盖全了,此时可以针对代码路径上的特殊分支去反推构造场景,因此此时你已经对这个代码路径和涉及的场景很熟悉了,那么可以针对已有的场景没有运行的代码分支进行逆推,然后构造新的场景,这个过程是特别考验能力和逆向思维的,但收获是你对这个知识单元能够更进一步的认识.

图片无法显示,请右键点击新窗口打开图片

到达最后了,此时你已经掌握很多技术单元了,你也知道每个技术单元应用的场景是什么,此时项目上介绍技术需求之后,首先将技术需求进行拆解为已知部分和未知部分,对于未知部分可以使用前面说的拆的能力快速进行消化,消化完毕之后接着就是看手上的技术单元如何拼装成技术需求的东西,这个过程也就是技术选型技术架构,一开始的时候不要想着一步到位,先用技术单元拼凑出一个简单可运行的东西,然后基于这个东西不断的迭代改进,最后就能工程落地.