我想更好地了解操作系统内部。进程管理、内存管理和类似的东西。
我正在考虑通过了解 linux 或 BSD 内核来学习。
哪一个内核更适合学习目的?
最好的起点是什么?
能推荐一些好书吗?
12 回答
在大学里,我有一个操作系统课,我们使用了Tanenbaum 的一本书。在课堂上,我们在Minix 操作系统中实现了一个设备驱动程序。这很有趣,我们学到了很多东西。
不过需要注意的一点是,如果您选择 Minix,它是为学习而设计的。它是一个微内核,而 Linux 和 BSD 是一个单片内核,所以您所学的内容可能无法 100% 翻译为能够与 Linux 或 BSD 一起使用,但您仍然可以从中受益匪浅,而无需进行相当的处理尽可能多的信息。
附带说明一下,如果你读过Just for Fun,Linus 实际上在他编写 Linux 之前就在玩 Minix,但这还不足以达到他的目的。
作为 Linux 用户,我想说 Linux 有一个很棒的社区供人们学习内核。http://kernelnewbies.org是开始提问和了解内核如何工作的好地方。我不能推荐一本书,但是一旦你阅读了关于 kernelnewbies 的起始材料,源代码就会得到很好的记录。
除了已经提到的好书(操作系统设计和实现特别好),获取一个 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,等等。准备好在这个过程中投入大量的时间。
我以前买过这些书是出于同样的目的,但我从来没有自己研究过,所以只能把它们当作二手建议。
注意到这里缺少 BSD,我想我会加入:
- FreeBSD 操作系统的设计与实现(死树书)
- Unix 和 BSD 课程(课程和视频)
- FreeBSD 体系结构手册(在线书籍)
我自己没有上过任何课程,但我听过 Marshall Kirk McKusick 在其他场合的演讲,他真的很擅长自己的工作。
当然还有 BSD 手册页,它是一个极好的资源,因为它们的维护程度远远高于一般的 Linux 手册页。以uvm(9)手册页为例,它描述了 OpenBSD 中的虚拟内存接口。
不是很相关,但我也会推荐伯克利软件发行版的视频历史,因为它很好地介绍了 UNIX 历史和文化中的 BSD 部分,以及许多过去的搞笑轶事。
深入研究代码是无可替代的。尝试找到您感兴趣的驱动程序或子系统并四处寻找。借助VMware Workstation等工具,您可以非常轻松地进行任何您想要的更改、对 VM 进行快照并运行修改后的内核。如果内核在启动时出现恐慌,谁在乎呢?只需跳回快照并解决问题。
对于书籍,我强烈推荐Robert Love 的Linux Kernel Development。这是一本写得非常棒的书——信息量很大,结构合理,幽默……一点也不枯燥。
听从 Mike Stone 的建议,从 Minix 开始。这就是林纳斯所做的!这本教科书写得非常好,Tannenbaum 很好地展示了如何在真实系统中实现各种功能。
似乎没有人提到代码方面的 BSD 更干净、更一致。文档的方式也更好(如前所述)。但是,由于您选择的任何系统都有很多摆弄 - 我会选择您更经常使用的系统。
Linux 和 Minix 学习起来很有趣。如果您还想了解现代微内核操作系统的外观,可以查看 QNX。完整的文档可在线获取,并且非常易于访问。例如,这本在线书籍。
当我在大学时,我花了一个学期学习操作系统,作为其中的一部分,我们必须在 Linux 中实现一个基于 RAM 的文件系统。
这是了解 Linux 内核内部结构并了解所有内容如何组合在一起的绝佳方式 - 并且玩弄它与标准工具的交互方式也很有趣。
我自己没有尝试过,但是您可以从零开始使用 Linux 并开始构建您自己的 Linux 发行版。听起来像是需要大量时间的东西,但会导致深入了解 Linux 内核的核心以及每个部分的工作原理。当然,您可以通过遵循此处的任何其他提示来补充此学习。