【问题标题】:What's the best way to get to know linux or BSD kernel internals? [closed]了解 linux 或 BSD 内核内部的最佳方式是什么? [关闭]
【发布时间】:2010-09-06 16:21:53
【问题描述】:

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

【问题讨论】:

    标签: linux operating-system kernel bsd osdev


    【解决方案1】:

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

    有一点需要注意,如果您选择 Minix,它是专为学习而设计的。它是一个微内核,而 Linux 和 BSD 是一个单片内核,所以你所学的内容可能无法 100% 转换为能够与 Linux 或 BSD 一起使用,但你仍然可以从中获益良多,无需经过相当多的处理尽可能多的信息。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            我自己没有上过任何课程,但我听 Marshall Kirk McKusick 在其他场合发表过演讲,他的工作非常出色。

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

            不太相关,但我也推荐视频History of the Berkeley Software Distributions,因为它很好地介绍了 UNIX 历史和文化中的 BSD 部分,以及许多过去的搞笑轶事。

            【讨论】:

              【解决方案6】:

              我向您推荐 BSD 内核! BSD 内核的黑客数量要少得多,因此更容易跟踪它们的演变。 BSD 和 Linux 内核都有出色的黑客,但有些人认为 BSD 较低的知名度会过滤掉新手。当源不是每天更新 100 次时,也更容易做出设计决策。

              在 BSD 选择中,我最喜欢的是 NetBSD。它可能不是您想要的桌面无痛选择,但由于它非常注重便携性,因此质量非常好。我认为这部分说明了一切:

              一些系统似乎有“如果它有效,它就是正确的”的理念。鉴于此,NetBSD 的哲学可以被描述为“除非它是正确的,否则它是行不通的”

              如果您工作的时间足够长,您就会知道 NetBSD 是学习良好编码的一大乐趣。虽然专业的你会发现更多使用 Linux 的机会

              无论您选择什么,开始加入他们的邮件列表,关注讨论。研究一些补丁,最后尝试自己修复错误。关于书籍,搜索 Diomidis Spinellis 文章和his book。它不完全是一本内核书籍,但包含 NetBSD 示例,对处理大型软件有很大帮助。

              【讨论】:

                【解决方案7】:

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

                对于书籍,我强烈推荐 Robert Love 的 Linux Kernel Development。这是一本写得很棒的书——信息量很大,条理清晰,幽默风趣……一点也不枯燥。

                【讨论】:

                  【解决方案8】:

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

                  【讨论】:

                    【解决方案9】:

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

                    【讨论】:

                      【解决方案10】:

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

                      【讨论】:

                        【解决方案11】:

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

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

                        【讨论】:

                          【解决方案12】:

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

                          【讨论】:

                          • LFS 旨在让您深入了解构建发行版,但实际上并不能帮助您了解内核 - 只是如何编译它。
                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-04-27
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多