有精通 Linux 内核内存管理的老哥能说说你是怎么学这一块的知识的吗?

2022-03-05 09:07:29 +08:00
 kgdb00
我在研究解决具体问题的时候看内核代码最容易看懂,但我目前还没遇到过哪些问题是必须得对内存管理非常熟悉才能解决的,学这个主要是想应付面试。

目前我已经看懂了《深入理解 Linux 内核》这本书讲内存的第 2 ,8 ,9 章以及 Intel SDM 讲分段分页的部分,想继续深入研究只能靠看代码了,但我感觉看代码没有个方向,泛泛的看就只能有个很浅的了解,不知道怎么看才能达到精通的程度。

我目前的办法是从 x86 系统启动的第一行代码开始看,搞懂每一行代码到底干了什么,最近看懂了一点 x86 bios (kvmtool 的实现)的代码,但我感觉这种方式学习效率太低了,请教大佬有没有什么好办法?
5986 次点击
所在节点    Linux
50 条回复
liuxu
2022-03-07 14:00:06 +08:00
此贴 11 楼,26 楼,40 楼为正确答案。
pierswu
2022-03-07 16:29:43 +08:00
@hello2090 ntpdate time.ntp.org -> 时钟发生器 -> 时间振荡电路 -> 石英晶体振荡器 -> 压电效应

如果不知道什么是压电效应,一样可以使用 ntpdate 命令去同步时间,但是压电效应就是计算机时间的物理基础
hello2090
2022-03-07 16:54:38 +08:00
@pierswu 那在写那些程序的时候需要把这些考虑进去呢?或者学习了这些知识可以帮助你在哪些方面把程序写得更好呢?
pierswu
2022-03-07 17:32:48 +08:00
@hello2090 是不需要学这种底层的东西。但是人生不一定就只有编程,就像 OP 想去学习内核内存管理是为了应付面试,我知道时钟发生器就可以给客户解释为什么他的服务器需要校准时钟
hello2090
2022-03-07 17:37:10 +08:00
@pierswu 当然有用,对人生来说哪有没用的东西。我这帖子里所有的回复都是针对 4 楼给出的学习编程的路径 “数学 + 物理 -> 模拟电路 -> 数字电路 -> 组成原理 -> 汇编语言 -> C/C++ -> 操作系统” 给出质疑而已。
pierswu
2022-03-07 17:45:10 +08:00
@hello2090 4 楼的观点是,要学懂某一层次的东西,可能需要掌握其上层或下层的知识才行,这个“数学 + 物理 -> 模拟电路 -> 数字电路 -> 组成原理 -> 汇编语言 -> C/C++ -> 操作系统” 是他举得例子。
那学习模拟电路,不需要物理里面的电路知识吗
hello2090
2022-03-07 17:47:11 +08:00
@pierswu 那对一个要学习 Linux 内存管理的程序员来说,需要学习模拟电路吗?
pierswu
2022-03-07 17:56:04 +08:00
@hello2090 不需要,但是他只是举个例子,4 楼的内容也没说一定要学物理才搞得懂内存管理。
那回到 op 提的问题,他要想学好 Linux 内存管理,那需要从 操作系统入手,或者从编程入手
kgdb00
2022-09-08 02:39:03 +08:00
@hhjuteman 请问 https://github.com/chenshuo/linux-study 这个项目是要怎么用啊?

这个项目没有任何文档说明,我使用 ./study/config.sh 编译出来的内核也没有 bzImage 镜像,不知道怎么运行,更不明白“像程序一样编译调试” 是怎么个情况,比如我想用这个项目去研究伙伴系统算法要怎么做?
kgdb00
2022-09-08 02:50:39 +08:00
@hhjuteman 我切换到 4.9 分支后看到有个 build.sh 文件,study 目录下也比 master 多了几个文件,不过因为项目太老不能编译,我感觉这个项目应该只是用来测试一些比较高层次的函数,没办法用来研究伙伴系统,进程调度这些核心子系统,不知道这个项目的意义何在。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838115

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX