我希望更好地了解操作系统内部。流程管理,内存管理等等。
我想通过了解linux或BSD内核来学习
哪一个内核更适合学习目的?
什么是最好的起点?
你能推荐一本好书吗?
答案 0 :(得分:12)
在大学里,我有一个操作系统类,我们使用book by Tanenbaum。在课堂上,我们在Minix operating system中实现了一个设备驱动程序。这很有趣,我们学到了很多东西。
有一点需要注意,如果你选择Minix,它是专为学习而设计的。它是一个微内核,而Linux和BSD是一个单片内核,所以你学到的东西可能不是100%可以转换为能够使用Linux或BSD,但你仍然可以从中获得很多,而不必处理相当尽可能多的信息。
作为旁注,如果你读过Just for Fun,Linus在写Linux之前实际上正在和Minix一起玩,但这对他的目的来说还不够。
答案 1 :(得分:7)
作为Linux用户,我认为Linux有一个很好的社区供人们学习内核。 http://kernelnewbies.org是一个开始提问并了解内核如何工作的好地方。我无法做出书籍推荐,但是一旦你阅读了关于kernelnewbies的原始资料,就会有很好的文档来源。
答案 2 :(得分:6)
除了已经提到的好书(操作系统设计和实现特别好)之外,获取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,等等。准备好在这个过程中花费很多时间。
答案 3 :(得分:5)
我以前为了同样的目的买了这些书,但是我从来没有自己研究过,所以只把它们作为二手的建议。
答案 4 :(得分:4)
注意到这里缺乏BSD,我想我会填上:
我自己没有上过任何课程,但我听过Marshall Kirk McKusick在其他场合讲过话,他真的很擅长自己的所作所为。
当然还有BSD手册页,这是一个很好的资源,因为它们的维护范围远远超过普通的Linux手册页。以例如uvm(9)手册页为例,描述OpenBSD中的虚拟内存接口。
不太相关,但我还会推荐视频History of the Berkeley Software Distributions,因为它可以很好地介绍UNIX历史和文化的BSD部分以及后来的大量热闹的非线性节点。
答案 5 :(得分:3)
我推荐你BSD内核! BSD内核的黑客数量要少得多,因此随着他们的发展变得更容易。无论是BSD还是Linux内核都有很棒的黑客,但有些人认为BSD较低的名气会过滤掉新手。当消息来源每天更新100次时,也更容易做出设计决定。
在BSD选择中,我最喜欢的是NetBSD。它可能不是您想要的桌面无痛选择,但因为它非常注重可移植性,所以质量非常好。我认为这部分说明了一切:
有些系统似乎有“如果有效,那就是对”的理念。在这方面,NetBSD的理念可以被描述为“除非它是正确的,否则它不起作用”
如果你已经工作了很长时间,你就会知道NetBSD对于学习良好的编码非常有乐趣。虽然专业,你会发现Linux的机会更多
无论您选择哪种方式,都可以开始加入他们的邮件列表,并按照讨论进行操作。研究一些补丁,最后尝试自己做错误修复。关于书籍,搜索Diomidis Spinellis文章和his book。它不完全是一本内核书,但有NetBSD示例,并且可以帮助解决大型软件问题。
答案 6 :(得分:1)
无法替代潜入代码。尝试找到您感兴趣的驱动程序或子系统,然后使用它。使用像VMware Workstation这样的工具,可以非常轻松地进行所需的任何更改,快照VM并运行修改后的内核。如果内核在启动时发生恐慌,谁在乎呢?只需跳回快照并解决问题。
对于书籍,我强烈推荐Robert Love的Linux Kernel Development。这是一本精彩的书 - 很多信息,有条不紊地组织,而且幽默......根本就不读书。
答案 7 :(得分:1)
采取Mike Stone的建议并从Minix开始。这就是莱纳斯所做的!教科书写得很好,Tannenbaum在展示如何在真实系统中实现各种功能方面做得很好。
答案 8 :(得分:1)
似乎没有人提到代码明智的BSD更清洁,更一致。文档的方式也更好(如前所述)。但是,由于你选择的任何系统都有很多摆弄 - 我会选择你经常使用的系统。
答案 9 :(得分:1)
Linux和Minix很有趣。如果您还想了解现代微内核操作系统的外观,可以查看QNX。完整的文档可在线获取,并且非常易于访问。例如,this在线图书。
答案 10 :(得分:0)
当我在大学时,我花了一个学期学习操作系统,作为其中的一部分,我们必须在Linux中实现基于RAM的文件系统。
这是了解Linux keurnel内部结构以及掌握所有内容如何组合在一起的绝佳方式 - 并且还有很多乐趣可以解决它与标准工具的交互方式。
答案 11 :(得分:0)
我自己没有尝试过,但你可以去Linux From Scratch并开始构建自己的Linux发行版。听起来像是需要花费大量时间的东西,但是会对Linux内核的内核以及每个部分的工作方式有深入的了解。当然,您可以通过以下任何其他提示来补充这种学习。