关于操作系统:了解Linux或BSD内核内部的最佳方法是什么?

关于操作系统:了解Linux或BSD内核内部的最佳方法是什么?

What's the best way to get to know linux or BSD kernel internals?

我想更好地了解操作系统内部。 流程管理,内存管理之类的东西。
我当时想通过了解linux或BSD内核来学习。
哪一个内核更适合学习?
最好的起点是什么?
你能推荐什么好书吗?


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

但是要注意的一件事是,如果选择Minix,它是为学习而设计的。它是一个微内核,而Linux和BSD是单片内核,因此您所学的内容可能无法100%转换为能够与Linux或BSD一起使用,但是您仍然可以从中受益匪浅,而不必进行大量处理尽可能多的信息。

附带说明一下,如果您读过《 Just for Fun》,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。随着版本的发展,请查看ChangeLog并深入研究那些已更改的部分,以免您再次阅读整个内容。

掌握了这些概念之后,请看2.0,然后看2.2,以此类推。准备在过程中花很多时间。


  • Linux
    设备驱动程序
  • Linux核心内核评论
  • 操作系统设计与实现

我以前出于相同目的推荐购买了这些书,但我从来没有自己研究它们,因此仅将它们作为二手建议。


注意到这里缺少BSD,我认为我应该参与其中:

  • FreeBSD操作系统的设计与实现(死树书)
  • Unix和BSD课程(课程和视频)
  • FreeBSD体系结构手册(在线书)

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

当然,BSD手册页是一种极好的资源,因为与一般的Linux手册页相比,它们在很大程度上得到了维护。以uvm(9)手册页为例,它描述了OpenBSD中的虚拟内存接口。

不太相关,但我还将推荐视频Berkeley软件发行版的历史,因为它很好地介绍了UNIX历史和文化的BSD部分以及从那时起的许多有趣的集锦。


我建议您使用BSD内核! BSD内核的黑客人数少得多,因此随着其发展而变得更加容易。 BSD和Linux内核都具有强大的黑客功能,但有人认为BSD较低的知名度会过滤掉新手。如果每天不对源进行100次更新,则做出设计决策也变得更加容易。

在BSD选择中,我最喜欢的是NetBSD。这可能不是您希望桌面轻松选择的选择,但是由于它非常注重可移植性,因此质量相当不错。我认为这部分说明了一切:

Some systems seem to have the philosophy of"If it works, it's right". In that light NetBSD's philosophy could be described as"It doesn't work unless it's right"

如果您已经工作了足够长的时间,您就会知道NetBSD对于学习良好的编码是很高兴的。虽然专业,您会发现使用Linux的更多机会

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


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


似乎没有人提到基于代码的BSD更加整洁和一致。该文档的方式也更好(如上所述)。但是由于您对所选择的任何系统都充满了摆弄-我会选择您经常使用的系统。


接受Mike Stone的建议,然后从Minix开始。那就是Linus所做的!教科书写得非常好,Tannenbaum很好地展示了如何在实际系??统中实现各种功能。


深入研究代码是无可替代的。尝试找到您感兴趣的驱动程序或子系统,并对其进行探索。使用VMware Workstation之类的工具,可以轻松进行所需的任何更改,对VM进行快照并运行修改后的内核。如果内核在启动时出现混乱,谁在乎?只需跳回到快照并解决问题即可。

对于书籍,我强烈推荐Robert Love撰写的Linux Kernel Development。这是一本奇妙的书,书中有很多信息,理智而幽默,……根本不是枯燥的阅读。


我自己还没有尝试过,但是您可以转到Linux From Scratch并开始构建自己的Linux发行版。听起来这会花费很多时间,但会导致您对Linux内核的精髓以及每个部分的工作原理有深入的了解。当然,您可以通过遵循此处的其他任何技巧来补充此学习内容。


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

这是一种了解Linux内核内部结构并掌握所有组件如何组合的绝佳方法-并且在与标准工具的交互方面也玩得很开心。


推荐阅读