我想更好地了解操作系统的内部结构。进程管理、内存管理等等。
我想通过了解 Linux 或 BSD 内核来学习。
哪一个内核更适合学习目的?
最好从哪里开始?
能推荐一些好书吗?

有帮助吗?

解决方案

在大学里,我有一门操作系统课,我们使用了 塔南鲍姆的书. 。在课堂上,我们实现了一个设备驱动程序 Minix操作系统. 。这很有趣,我们学到了很多东西。

但需要注意的一件事是,如果您选择 Minix,它是为学习而设计的。它是一个微内核,而 Linux 和 BSD 是一个整体内核,所以你学到的东西可能不能 100% 翻译成能够在 Linux 或 BSD 上工作,但你仍然可以从中获益匪浅,而不必费力去处理。尽可能多的信息。

作为旁注,如果您已阅读 只是为了好玩, 事实上,Linus 在编写 Linux 之前就已经开始使用 Minix,但这还不足以实现他的目的。

其他提示

作为一名 Linux 用户,我想说 Linux 有一个很棒的社区供人们了解内核。 http://kernelnewbies.org 是开始提出问题和了解内核如何工作的好地方。我无法推荐一本书,但是一旦您阅读了 kernelnewbies 的起始材料,源代码就有了很好的记录。

除了已经提到的好书(操作系统设计与实现特别好)之外,获取 1.x 版本的 Linux 内核,将其加载到 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. 。当您从一个版本升级到另一个版本时,请查看变更日志并深入研究那些已更改的部分,以免您再次重新阅读整个内容。

一旦您掌握了这些概念,请查看 2.0,然后查看 2.2,等等。准备好在这个过程中投入大量时间。

我之前出于同样的目的通过推荐购买了这些书,但我自己从未研究过它们,所以只能将它们作为二手建议。

注意到这里缺乏 BSD,我想我应该补充一下:

我自己没有参加任何课程,但我在其他场合听过 Marshall Kirk McKusick 的演讲,他真的很擅长他所做的事情。

当然还有 BSD 手册页,它们是极好的资源,因为它们的维护程度比一般的 Linux 手册页要大得多。以 紫外线(9) 手册页,描述 OpenBSD 中的虚拟内存接口。

不太相关,但我也会推荐这个视频 伯克利软件发行版的历史 因为它很好地介绍了 UNIX 历史和文化的 BSD 部分,以及当时的许多搞笑轶事。

我向您推荐 BSD 内核!BSD 内核的黑客要少得多,因此跟随其演变更容易。BSD 和 Linux 内核都有出色的黑客,但有些人认为 BSD 较低的名气会过滤掉新手。当源代码每天不更新 100 次时,做出设计决策也会更容易。

在 BSD 选择中,我最喜欢的是 NetBSD。它可能不是您想要的台式机的无痛选择,但由于它非常注重便携性,因此质量相当不错。我认为这部分说明了一切:

有些系统似乎有这样的理念:“如果它有效,那就是对的”。从这个角度来看,NetBSD 的哲学可以被描述为“除非它是正确的,否则它不会起作用”

如果您已经工作了足够长的时间,您就会知道 NetBSD 是学习良好编码的一大乐趣。尽管在专业上你会发现使用 Linux 有更多的机会

无论您采取哪种选择,请开始加入他们的邮件列表,关注讨论。研究一些补丁并最终尝试修复自己的错误。关于书籍,搜索 Diomidis Spinellis 文章和 他的书. 。它不完全是一本内核书籍,但有 NetBSD 示例,对处理大型软件有很大帮助。

没有什么可以替代深入研究代码。尝试找到您感兴趣的驱动程序或子系统并进行研究。使用类似的工具 VMware工作站 进行任何您想要的更改、拍摄虚拟机快照并运行修改后的内核都非常容易。如果内核在启动时出现恐慌,谁在乎呢?只需跳回快照并解决问题即可。

对于书籍,我强烈推荐 Linux内核开发 作者:罗伯特·洛夫。这是一本写得很精彩的书——信息量大、组织合理、幽默……根本不是枯燥的阅读。

采纳 Mike Stone 的建议并从 Minix 开始。这就是莱纳斯所做的!这本教科书写得非常好,Tannenbaum 很好地展示了如何在真实系统中实现各种功能。

似乎没有人提到代码明智的 BSD 更干净、更一致。文档也更好(正如已经提到的)。但由于无论您选择什么系统,都会有很多摆弄的情况 - 我会选择您更经常使用的系统。

Linux 和 Minix 学起来很有趣。如果您还想了解现代微内核操作系统是什么样子,您可以看看 QNX。完整的文档可以在线获取,并且非常容易访问。例如, 在线书籍。

当我在大学时,我花了一个学期的时间学习操作系统,作为其中的一部分,我们必须在 Linux 中实现基于 RAM 的文件系统。

这是了解 Linux 内核的内部结构并掌握所有内容如何组合在一起的绝佳方式 - 并且了解它如何与标准工具交互也非常有趣。

我自己还没有尝试过,但是您可以转到 Linux From Scratch 并开始构建您自己的 Linux 发行版。听起来像是需要大量时间的事情,但会让你深入了解 Linux 内核的内部结构以及每个部分的工作原理。当然,您可以按照此处的任何其他提示来补充此学习内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top