2020年学习总结
2020年总结
虽然今天已经是2021.1.6了,但2020年的全部工作到今天才全部做完。
2020年,主要的工作:
- 看完了《Understanding the Linux Kernel》
- 学习VFIO相关代码,其中牵涉了PCI/PCIE的相关知识
- 看了一些中断虚拟化的代码和资料
回头看这些工作,以研究学习性的工作为主,在基于这些主题的研究学习中,我使用了很多学习方法,写这个总结的目的,就是回头看看,这些学习方法是不是适合我的。
读书笔记
ULK是Linux内核领域圣经级别的书,这一年里我走马观花浏览了一遍,每一章我都留有”读书笔记”,为什么是带引号的呢?因为我的读书笔记,更像是原地摘抄,我自己都不想回去看第二遍,现在反思起来,是不是纯文字的笔记对我的作用不大呢?还是说,摘抄型的读书笔记相比于自己精心组织撰写的读书笔记,难度更小呢?
针对这两个问题,以后我会改掉我读书笔记的格式和记录方法,即:
- 读书笔记在读完某章节或某部分之后再写,而不是边看边写。
- 写读书笔记时,全部使用自己的语言,在适当的时候用图表的方法记录。
- 写读书笔记时感觉到晦涩的部分,应该留空,并在写完该次读书笔记后,回头再去看对应的知识,并补充笔记,笔记的补充和看完该部分的知识的时间差至少应为1天,确保是自己吸收了知识而不是即时知识。
代码阅读
VFIO是当前虚拟化中比较重要的一块,涉及到外设的透传,在其它部分虚拟化无法大幅度提升性能的情况下,VFIO能够帮助虚拟机极大提高性能。
在学习VFIO的过程中,我将整个阅读代码的过程作为笔记,记录了下来,就是类似于:
vfio_realize()中的第一个函数为xxx_xxx(),它的参数为a,在xxx_xxx()函数中,首先声明了…
整个过程事无巨细,但这大大降低了我阅读代码的效率,因为我要随时随地记录文字。使用这种代码阅读方式的初衷是,我无法记住某个函数的调用轨迹,因为在一层层向代码内部追溯的过程中,代码的结构是树状的,极有可能看着看着不知道自己在看什么函数,为什么要看这个函数。
这种学习方法在以后的学习过程中需要彻底摒弃,需要换一种代码阅读方法。
在2020年年末的一次例会上,Raymond告诉我,”你讲代码讲得太细了,什么A函数调用了B,B函数调用了C,讲得人都快睡着了”。我仔细思考了他的意思,悟了。
悟了。
这简直就是执行费曼学习法执行地非常失败的典型案例了,我讲的内容,听众不爱听,甚至和我搞一个方向的同事也不爱听,归根结底,就是我自己不懂,讲得颠三倒四,别人肯定听得稀里糊涂啊。
以后代码阅读笔记仍旧需要写,但不是当前这种事无巨细的写法了。
代码阅读笔记的要求应该是:
- 顶层的逻辑一定要阐述清楚,也就是硬件基础,应该有一个顶层逻辑图
- 代码是有逻辑的,是实现具体功能的,代码以逻辑块划分,而不是以代码自身的流程划分
- 代码阅读笔记一定要有图支撑,图的内容以顶层逻辑为基础,与顶层逻辑图对比,形成代码逻辑图
虚拟化模块学习
中断虚拟化是系统虚拟化中的一个组成部分,在学习中断虚拟化的过程中,我完全依赖了一本书《深入探索Linux系统虚拟化》,完全跟着书的思路走,而忘记了在这个过程中形成自己的理论体系。
例如在PIC的虚拟化中,书中提到了一些有关中断评估、中断ack之类的术语,我也就似懂非懂的接纳了,而事实上,这些术语在物理PIC运行机制中都有,而且讲得非常清楚,但我却得过且过了。
在以后的各虚拟化模块的学习中,需要始终记住一点,虚拟化总是为了模拟实际物理环境,因此要明白虚拟化模块的逻辑结构,一定要搞清楚在实际的物理环境中,这部分的功能逻辑如何实现,对应的背景知识一定要完备。
而且在学习中,要做到主观(背景知识)带动客观(虚拟化代码过程),而不是从虚拟化代码中学习背景知识。
关于虚拟化模块的总结记录,以代码阅读笔记的规格要求自己。
只有在最终成文时才记录到电子文档中,在这之前,一切均手动记录。