了解 linux 或 BSD 内核内部的最佳方式是啥? [关闭]
Posted
技术标签:
【中文标题】了解 linux 或 BSD 内核内部的最佳方式是啥? [关闭]【英文标题】:What's the best way to get to know linux or BSD kernel internals? [closed]了解 linux 或 BSD 内核内部的最佳方式是什么? [关闭] 【发布时间】:2010-09-06 16:21:53 【问题描述】:我想更好地了解操作系统内部结构。进程管理、内存管理和类似的东西。 我正在考虑通过了解 linux 或 BSD 内核来学习。 哪一个内核更适合学习? 最好的起点是什么? 你能推荐一些好书吗?
【问题讨论】:
【参考方案1】:在大学里,我有一个操作系统课,我们使用了book by Tanenbaum。在课堂上,我们在Minix operating system 中实现了一个设备驱动程序。这很有趣,我们学到了很多东西。
有一点需要注意,如果您选择 Minix,它是专为学习而设计的。它是一个微内核,而 Linux 和 BSD 是一个单片内核,所以你所学的内容可能无法 100% 转换为能够与 Linux 或 BSD 一起使用,但你仍然可以从中获益良多,无需经过相当多的处理尽可能多的信息。
附带说明一下,如果您阅读过 Just for Fun,Linus 实际上在编写 Linux 之前就在玩 Minix,但这还不足以达到他的目的。
【讨论】:
【参考方案2】:作为 Linux 用户,我想说 Linux 有一个很棒的社区供人们学习内核。 http://kernelnewbies.org 是开始提问和了解内核如何工作的好地方。我无法推荐一本书,但是一旦您阅读了有关 kernelnewbies 的起始材料,源代码就会得到很好的记录。
【讨论】:
【参考方案3】:除了已经提到的好书(操作系统设计与实现特别好),获取 1.x 版本的 Linux Kernel,将其加载到 VMWare 或 VirtualBox 并从那里开始玩。
您将需要花费大量时间浏览源代码。为此,请查看http://lxr.linux.no/,它是源代码的可浏览链接版本,让生活变得更轻松。对于 Linux 的第一个版本 (0.01),请查看 http://lxr.linux.no/linux-old+v0.01/。乐趣始于http://lxr.linux.no/linux-old+v0.01/boot/boot.s。随着您从一个版本升级到另一个版本,请查看 ChangeLog 并深入了解那些已更改的部分,以节省您重新阅读整个内容的时间。
一旦你掌握了这些概念,看看 2.0,然后是 2.2 等等。准备好在这个过程中投入大量时间。
【讨论】:
【参考方案4】: Linux Device Drivers Linux Core Kernel Commentary Operating Systems Design and Implementation我以前买过这些书是出于同样的目的,但我从来没有自己研究过,所以只能把它们当作二手建议。
【讨论】:
【参考方案5】:注意到这里缺少 BSD,我想我会加入:
The Design and Implementation of the FreeBSD Operating System(死树书) Unix and BSD Courses(课程和视频) FreeBSD Architecture Handbook(在线图书)我自己没有上过任何课程,但我听 Marshall Kirk McKusick 在其他场合发表过演讲,他的工作非常出色。
当然还有 BSD 手册页,这是一个极好的资源,因为它们的维护程度远远超过一般的 Linux 手册页。以uvm(9) 手册页为例,它描述了 OpenBSD 中的虚拟内存接口。
不太相关,但我也推荐视频History of the Berkeley Software Distributions,因为它很好地介绍了 UNIX 历史和文化中的 BSD 部分,以及许多过去的搞笑轶事。
【讨论】:
【参考方案6】:我向您推荐 BSD 内核! BSD 内核的黑客数量要少得多,因此更容易跟踪它们的演变。 BSD 和 Linux 内核都有出色的黑客,但有些人认为 BSD 较低的知名度会过滤掉新手。当源不是每天更新 100 次时,也更容易做出设计决策。
在 BSD 选择中,我最喜欢的是 NetBSD。它可能不是您想要的桌面无痛选择,但由于它非常注重便携性,因此质量非常好。我认为这部分说明了一切:
一些系统似乎有“如果它有效,它就是正确的”的理念。鉴于此,NetBSD 的哲学可以被描述为“除非它是正确的,否则它是行不通的”
如果您工作的时间足够长,您就会知道 NetBSD 是学习良好编码的一大乐趣。虽然专业的你会发现更多使用 Linux 的机会
无论您选择什么,开始加入他们的邮件列表,关注讨论。研究一些补丁,最后尝试自己修复错误。关于书籍,搜索 Diomidis Spinellis 文章和his book。它不完全是一本内核书籍,但包含 NetBSD 示例,对处理大型软件有很大帮助。
【讨论】:
【参考方案7】:深入研究代码是无可替代的。尝试找到您感兴趣的驱动程序或子系统并四处寻找。使用VMware Workstation 之类的工具,您可以非常轻松地进行任何您想要的更改、对虚拟机进行快照并运行修改后的内核。如果内核在启动时出现恐慌,谁在乎呢?只需跳回快照并解决问题。
对于书籍,我强烈推荐 Robert Love 的 Linux Kernel Development。这是一本写得很棒的书——信息量很大,条理清晰,幽默风趣……一点也不枯燥。
【讨论】:
【参考方案8】:听从 Mike Stone 的建议,从 Minix 开始。这就是林纳斯所做的!这本教科书写得非常好,Tannenbaum 很好地展示了如何在真实系统中实现各种功能。
【讨论】:
【参考方案9】:似乎没有人提到代码方面的 BSD 更干净、更一致。文档的方式也更好(如前所述)。但是,由于您选择的任何系统都有很多摆弄 - 我会选择您更经常使用的那个。
【讨论】:
【参考方案10】:Linux 和 Minix 学习起来很有趣。如果您还想了解现代微内核操作系统的外观,可以查看 QNX。完整的文档可在线获得,并且非常易于访问。比如this在线图书。
【讨论】:
【参考方案11】:当我在大学时,我花了一个学期学习操作系统,作为其中的一部分,我们必须在 Linux 中实现基于 RAM 的文件系统。
这是了解 Linux 内核的内部结构并了解所有内容如何组合在一起的绝佳方式 - 并且玩弄它与标准工具的交互方式也很有趣。
【讨论】:
【参考方案12】:我自己没有尝试过,但是您可以从零开始使用 Linux 并开始构建您自己的 Linux 发行版。听起来像是需要大量时间的东西,但会导致深入了解 Linux 内核的核心以及每个部分的工作原理。当然,您可以按照此处的任何其他提示来补充此学习内容。
【讨论】:
LFS 旨在让您深入了解构建发行版,但实际上并不能帮助您了解内核 - 只是如何编译它。以上是关于了解 linux 或 BSD 内核内部的最佳方式是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
资料收集:学习 Linux/*BSD/Unix 的 30 个最佳在线文档