分享

Linux内核入门学习方法

 mynotebook 2022-10-21 发布于湖南

作者介绍:刘冰,西安邮电大学研一在读,跟随陈莉君导师求学,刚刚踏入Linux内核的高山密林之中。

图片

学习Linux内核的过程中,由于Linux还在蓬勃的生长发展,内核还是会经常变化,我们会在实践学习,比如修改编译内核、调试系统时遇到许许多多的问题,想要快速的掌握一些相关的知识,并不是一件容易的事情。我在学习内核的过程中摸索了一些方法出来。

找资料🌏

上,在信息量爆炸的今天,要学习一个经常变化的东西,比如新版 Linux 内核的特性,主要是通过官方文档,或搜索引擎查找,找到的平台大部分都是博客等,可以根据它的排版、热度等来对其进行一个可信度的初判,可以自己通过实验进行验证,要敢于质疑;

有了初步了解以后,要学习一个开源程序的实现、运行原理,可以找到它的源代码进行深入的学习,linux 内核的源代码可读性很好,里面有适量的代码注释和完善的接口注释,可以利用vscode软件对代码进行一个深入的追踪学习,我整理了一些vscode阅读代码的技巧:http://t./XdoSy。

如果要学习的是一些沉淀了已久的知识,最好是根据一些相关评价,找一本经典教程来深入学习,比如学习数据结构,网上推荐最多的便清华大学严蔚敏老师写的《数据结构(C 语言版)》,上面宝贵的不仅是条理清晰的知识点,从中还能体会到作者更科学的思维方式。书上代码对抽象性原则的躬身力行让我对 C 语言有了全新的认识,将书里的算法尽可能的用代码实现一下使我受益良多。

理论方面,理解每个术语、英文缩写的含义和由来,有助于我们为总体目标的出现梳理出一个符合逻辑的产生发展过程,便于我们对总目标知识的掌握和记忆;

实验方面,要与自己学的理论知识相结合,敢于创新,加深对理论的理解和对技术的掌握。

笔记📕

一个可以构建知识网络的笔记软件,可以将知识点连接起来,在出现以前学过的知识点时可以关联起来,温故知新,在获取新知识的同时也在不断巩固旧的知识。推荐软件比如印象笔记、思源笔记等。

思源笔记是一款基于 markdown 的开源的笔记软件,以块为文档单位,拓展的 markdown 的功能;完成的文档可以容易地导出为 markdown、pdf 等格式;它还支持展示知识网络,只要我们在一个文档内插入了相关文档的引用块,知识网络中就会有一个从该文档指向相关文档的箭头,软件界面右侧侧边栏的两个按钮分别用来展示局部关系图和全局关系图。我在思源笔记里的部分知识网络如下:

图片

对于一个自己很难理解的知识或问题,弄懂后,可以写在博客(比如 CSDN)上。怀着一种要让每个人理解的心态,整理出易于阅读的版面,一小步一小步地梳理出一个通顺的解决步骤,在这个过程中,会加强自己对问题的印象,还可能找到自己的逻辑上的缺口。

练习💻

敢于通过代码实现自己所学的东西。一方面可以对所使用的语言能更熟练、快速的运用;一方面可以增强自己的编程思维能力;还有一方面是可以巩固自己所学到的知识,将知识运用到实践,会有一种成就感,能为接下来的学习带来更深层次的驱动力。

最好将自己写过的将代码放到Gitee或GitHub代码管理平台上进行维护,而不是扔到一边就不管了,为了以后的使用,我们可以增强自己代码的通用性,做到一劳永逸。

举个栗子🌰

如在我学习平均负载这方面的知识时,最初是从学长的直播中首次听到这个名词的,那时平均负载被比作桥上的汽车数量,车越多通行便越慢。这只是一种为了使我们理解平均负载一种通俗化的表述,而网络上对平均负载的解释大部分也如出一辙,只说是进程数对时间的一个平均值,仅止于此。这时候我就会想,如果是多核呢?这时的平均负载还要除以核数吗?但不得不说,我确实理解了平均负载的概念,并且笔记了不少相关概念,提出问题是一个很好的开始。

而当我真正做实验的时候,就产生了更多的问题,比如使用top命令查看平均负载,发现即使新建了4、5倍于核数的进程,短期内loadavg字段依然很小;使用老师推荐的高负载处理模块时发现当loadavg超过阈值时输出的当前运行队列进程数量远远超过核数的阈值倍数。内核的平均负载算法究竟是什么样的?

这就要求我不能再局限于网络的知识的知识了,要深入到Linux内核之中,从源码入手一探究竟。通过对源码的分析,我认识到内核的平均负载loadavg是通过一种指数平滑算法获得的。它会衰减式地保留之前的数据。通过对这个算法的理解,我在ebpf中设计了类似此模块的功能,将学到的东西应用了起来,对代码和理论的理解都大大加强。

在因为内核版本问题修改上述模块的过程中我遇到了不少的问题,所以把解决方案发布到了csdn上,欢迎大家参观:http://t./hTIjB 👀

总结

要来说,接触一个新知识时首先查找资料,做好笔记,在熟悉知识点后能提出一些问题并通过实践进行确认或解决,最后把问题的答案整理出来,可以发篇博客,做一个简要的总结,来强化记忆。希望大家学有学有所成,勇攀高峰🧗‍

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多