了解Linux或者BSD内核内部的最佳方法是什么?

时间:2020-03-05 18:42:30  来源:igfitidea点击:

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

解决方案

回答

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

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

回答

作为Linux用户,我想说Linux有一个很棒的社区供人们学习内核。 http://kernelnewbies.org是开始提出问题并了解内核如何工作的好地方。我无法推荐这本书,但是一旦我们阅读了关于kernelnewbies的入门资料,其文献就会被很好地记录下来。

回答

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

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

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

回答

除了已经提到的好书(操作系统设计和实现特别好)之外,还拥有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中实现基于RAM的文件系统。

这是一种了解Linux内核内部结构并掌握所有组件组合方式的绝佳方法,并且在与标准工具进行交互方面也有很多乐趣。

回答

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

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

回答

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

回答

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

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

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

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

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

回答

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

回答

似乎没有人提到基于代码的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示例,可以处理大型软件。