我想获得更好的操作系统内部知识。 进程pipe理,内存pipe理和类似的东西。
我正在想通过了解linux或者BSD内核来学习。
哪一个内核更适合学习的目的?
什么是最好的开始?
你能推荐任何好书吗?
在大学里,我有一个操作系统课,我们用Tanenbaum的一本书 。 在课堂上,我们在Minix操作系统中实现了一个设备驱动程序。 这很有趣,我们学到了很多东西。
有一件事要注意,如果你选择Minix,它是为学习而设计的。 这是一个微内核,而Linux和BSD是一个单一的内核,所以你学到的东西可能不是100%可译的,可以和Linux或者BSD一起工作,但是你仍然可以从中获得很多,而不需要很好的处理尽可能多的信息。
作为一个侧面说明,如果你读过“ Just for Fun” ,那么在写Linux之前,Linus实际上是和Minix一起玩的,但仅仅是他的目的还不够。
作为Linux用户,我认为Linux有一个很好的社区,供人们了解内核。 http://kernelnewbies.org是一个很好的开始提问和学习内核如何工作的地方。 我不能做一个书的建议,但是一旦你阅读了关于kernelnewbies的起始材料,这个源文件就非常有用。
除了已经提到的好书(操作系统设计和实现特别好)之外,把1.x版本的Linux coreel加载到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,我想我会插入:
我自己也没有参加任何课程,但我听说马歇尔·柯克·麦克库尼克(Marshall Kirk McKusick)在其他场合发表过演讲,而且他非常擅长演讲。
当然,BSD手册页是一个非常好的资源,因为它们的维护程度远远超过普通的Linux手册页。 以uvm(9)手册页为例 ,描述OpenBSD中的虚拟内存接口。
没有什么关系,但是我还会推荐一下Berkeley软件发行版的视频,因为它介绍了UNIX历史和文化的BSD部分,以及从后面的大量欢迎语。
我建议你的BSD内核! BSD内核的黑客数量要少得多,所以他们的发展更容易一些。 BSD和Linux内核都有很好的黑客,但有些人认为BSD的名气过滤了新手。 当信息源不被更新100次时,设计决策也更容易。
在BSD的选择中,我最喜欢的是NetBSD。 这可能不是您想要的桌面上的无痛选择,但是因为它非常注重便携性,质量相当好。 我觉得这个部分是这样说的:
有些系统似乎有“如果有效,是对的”的哲学。 从这个角度来看,NetBSD的理念可以被描述为“除非是正确的,否则不行”
如果你已经工作了很长时间,你会知道NetBSD对于学习良好的编码是一个相当高兴的事情。 虽然专业,你会发现更多的Linux的机会
无论您选择哪一种,请开始加入他们的邮件列表,然后进行讨论。 学习一些补丁程序,最后尝试做你自己的错误修复。 关于书籍,寻找Diomidis Spinellis的文章和他的书 。 这不完全是一本内核书,但有NetBSD的例子,并帮助大量解决大型软件。
当我在uni的时候,我花了一个学期的时间学习操作系统,作为其中的一部分,我们必须在Linux中实现一个基于RAM的文件系统。
了解Linux keurnel的内部结构并掌握所有东西的组合方式,这是一个非常棒的方式 – 而且还有一个很好玩的地方,就是如何与标准工具交互。
代码潜水是没有任何替代的。 尝试找到您感兴趣的驱动程序或子系统,然后使用它。 使用VMware Workstation等工具,可以非常容易地进行所需的任何更改,快照虚拟机,然后运行修改的内核。 如果内核在启动时出现混乱,谁在乎? 只需跳回到快照并解决问题。
对于书籍,我强烈推荐Robert Love 开发的Linux coreel Development 。 这是一本精彩的书 – 很多的信息,组织理智,幽默…不干的阅读。
迈克斯通的建议,并开始与Minix。 这就是Linus所做的! 教科书写得非常好,Tannenbaum在展示如何在真实系统中实现各种功能方面做得非常好。
似乎没有人提到过,代码方式的BSD更清洁,更一致。 文档的方式也更好(如前所述)。 但是由于你选择的系统有很多摆弄 – 我会选择你经常使用的那个。
Linux和Minix乐于学习。 如果您还想了解现代微内核操作系统的外观,您可以看看QNX。 完整的文档可在线获取,非常方便。 例如, 这个在线书籍。
我没有自己尝试过,但是你可以从Linux的From Scratch开始构建自己的Linux发行版。 听起来像是要花费大量时间的东西,但会导致对Linux内核的胆量以及每个部分如何工作的深入了解。 当然,您可以通过以下任何其他提示来补充这一点。