【发布时间】:2010-09-06 16:21:53
【问题描述】:
我想更好地了解操作系统内部结构。进程管理、内存管理和类似的东西。
我正在考虑通过了解 linux 或 BSD 内核来学习。
哪一个内核更适合学习?
最好的起点是什么?
你能推荐一些好书吗?
【问题讨论】:
标签: linux operating-system kernel bsd osdev
我想更好地了解操作系统内部结构。进程管理、内存管理和类似的东西。
我正在考虑通过了解 linux 或 BSD 内核来学习。
哪一个内核更适合学习?
最好的起点是什么?
你能推荐一些好书吗?
【问题讨论】:
标签: linux operating-system kernel bsd osdev
在大学里,我有一个操作系统课,我们使用了book by Tanenbaum。在课堂上,我们在Minix operating system 中实现了一个设备驱动程序。这很有趣,我们学到了很多东西。
有一点需要注意,如果您选择 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,我想我会加入:
我自己没有上过任何课程,但我听 Marshall Kirk McKusick 在其他场合发表过演讲,他的工作非常出色。
当然还有 BSD 手册页,这是一个极好的资源,因为它们的维护程度远远超过一般的 Linux 手册页。以uvm(9) 手册页为例,它描述了 OpenBSD 中的虚拟内存接口。
不太相关,但我也推荐视频History of the Berkeley Software Distributions,因为它很好地介绍了 UNIX 历史和文化中的 BSD 部分,以及许多过去的搞笑轶事。
【讨论】:
我向您推荐 BSD 内核! BSD 内核的黑客数量要少得多,因此更容易跟踪它们的演变。 BSD 和 Linux 内核都有出色的黑客,但有些人认为 BSD 较低的知名度会过滤掉新手。当源不是每天更新 100 次时,也更容易做出设计决策。
在 BSD 选择中,我最喜欢的是 NetBSD。它可能不是您想要的桌面无痛选择,但由于它非常注重便携性,因此质量非常好。我认为这部分说明了一切:
一些系统似乎有“如果它有效,它就是正确的”的理念。鉴于此,NetBSD 的哲学可以被描述为“除非它是正确的,否则它是行不通的”
如果您工作的时间足够长,您就会知道 NetBSD 是学习良好编码的一大乐趣。虽然专业的你会发现更多使用 Linux 的机会
无论您选择什么,开始加入他们的邮件列表,关注讨论。研究一些补丁,最后尝试自己修复错误。关于书籍,搜索 Diomidis Spinellis 文章和his book。它不完全是一本内核书籍,但包含 NetBSD 示例,对处理大型软件有很大帮助。
【讨论】:
深入研究代码是无可替代的。尝试找到您感兴趣的驱动程序或子系统并四处寻找。使用VMware Workstation 之类的工具,您可以非常轻松地进行任何您想要的更改、对虚拟机进行快照并运行修改后的内核。如果内核在启动时出现恐慌,谁在乎呢?只需跳回快照并解决问题。
对于书籍,我强烈推荐 Robert Love 的 Linux Kernel Development。这是一本写得很棒的书——信息量很大,条理清晰,幽默风趣……一点也不枯燥。
【讨论】:
听从 Mike Stone 的建议,从 Minix 开始。这就是林纳斯所做的!这本教科书写得非常好,Tannenbaum 很好地展示了如何在真实系统中实现各种功能。
【讨论】:
似乎没有人提到代码方面的 BSD 更干净、更一致。文档的方式也更好(如前所述)。但是,由于您选择的任何系统都有很多摆弄 - 我会选择您更经常使用的那个。
【讨论】:
Linux 和 Minix 学习起来很有趣。如果您还想了解现代微内核操作系统的外观,可以查看 QNX。完整的文档可在线获得,并且非常易于访问。比如this在线图书。
【讨论】:
当我在大学时,我花了一个学期学习操作系统,作为其中的一部分,我们必须在 Linux 中实现基于 RAM 的文件系统。
这是了解 Linux 内核的内部结构并了解所有内容如何组合在一起的绝佳方式 - 并且玩弄它与标准工具的交互方式也很有趣。
【讨论】:
我自己没有尝试过,但是您可以从零开始使用 Linux 并开始构建您自己的 Linux 发行版。听起来像是需要大量时间的东西,但会导致深入了解 Linux 内核的核心以及每个部分的工作原理。当然,您可以按照此处的任何其他提示来补充此学习内容。
【讨论】: