20

我想更好地了解操作系统内部。进程管理、内存管理和类似的东西。
我正在考虑通过了解 linux 或 BSD 内核来学习。
哪一个内核更适合学习目的?
最好的起点是什么?
能推荐一些好书吗?

4

12 回答 12

12

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

不过需要注意的一点是,如果您选择 Minix,它是为学习而设计的。它是一个微内核,而 Linux 和 BSD 是一个单片内核,所以您所学的内容可能无法 100% 翻译为能够与 Linux 或 BSD 一起使用,但您仍然可以从中受益匪浅,而无需进行相当的处理尽可能多的信息。

附带说明一下,如果你读过Just for Fun,Linus 实际上在他编写 Linux 之前就在玩 Minix,但这还不足以达到他的目的。

于 2008-08-23T22:51:16.073 回答
7

作为 Linux 用户,我想说 Linux 有一个很棒的社区供人们学习内核。http://kernelnewbies.org是开始提问和了解内核如何工作的好地方。我不能推荐一本书,但是一旦你阅读了关于 kernelnewbies 的起始材料,源代码就会得到很好的记录。

于 2008-08-23T22:27:51.730 回答
6

除了已经提到的好书(操作系统设计和实现特别好),获取一个 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,等等。准备好在这个过程中投入大量的时间。

于 2008-08-24T00:40:14.157 回答
5

我以前买过这些书是出于同样的目的,但我从来没有自己研究过,所以只能把它们当作二手建议。

于 2008-08-23T22:26:45.210 回答
4

注意到这里缺少 BSD,我想我会加入:

我自己没有上过任何课程,但我听过 Marshall Kirk McKusick 在其他场合的演讲,他真的很擅长自己的工作。

当然还有 BSD 手册页,它是一个极好的资源,因为它们的维护程度远远高于一般的 Linux 手册页。以uvm(9)手册页为例,它描述了 OpenBSD 中的虚拟内存接口。

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

于 2008-08-24T15:10:38.807 回答
3
于 2010-04-27T15:56:46.123 回答
1

深入研究代码是无可替代的。尝试找到您感兴趣的驱动程序或子系统并四处寻找。借助VMware Workstation等工具,您可以非常轻松地进行任何您想要的更改、对 VM 进行快照并运行修改后的内核。如果内核在启动时出现恐慌,谁在乎呢?只需跳回快照并解决问题。

对于书籍,我强烈推荐Robert Love 的Linux Kernel Development。这是一本写得非常棒的书——信息量很大,结构合理,幽默……一点也不枯燥。

于 2008-08-24T02:19:04.810 回答
1

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

于 2008-08-25T05:53:51.650 回答
1

似乎没有人提到代码方面的 BSD 更干净、更一致。文档的方式也更好(如前所述)。但是,由于您选择的任何系统都有很多摆弄 - 我会选择您更经常使用的系统。

于 2008-10-21T13:06:18.173 回答
1

Linux 和 Minix 学习起来很有趣。如果您还想了解现代微内核操作系统的外观,可以查看 QNX。完整的文档可在线获取,并且非常易于访问。例如,这本在线书籍。

于 2012-02-02T13:29:26.783 回答
0

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

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

于 2008-08-24T02:01:09.157 回答
0

我自己没有尝试过,但是您可以从零开始使用 Linux 并开始构建您自己的 Linux 发行版。听起来像是需要大量时间的东西,但会导致深入了解 Linux 内核的核心以及每个部分的工作原理。当然,您可以通过遵循此处的任何其他提示来补充此学习。

于 2008-08-24T14:34:57.427 回答