我想获得更好的操作系统内部知识。进程管理,内存管理和类似的东西。
我想通过了解linux或BSD内核来学习。
哪一个内核更适合学习的目的?
什么是最好的开始?
你能推荐任何好书吗?
了解linux或BSD内核内部结构的最佳方式是什么?
回答
在大学里,我有一个操作系统课,我们使用book by Tanenbaum。在课堂上,我们在Minix operating system中实施了一个设备驱动程序。这很有趣,我们学到了很多东西。
但有一点需要注意,如果你选择Minix,它是为学习而设计的。它是一个微内核,而Linux和BSD是一个单一的内核,所以你学到的东西可能不是100%可翻译的,无法与Linux或BSD一起工作,但是你仍然可以从中获益很多,而不必处理得相当尽可能多的信息。作为一个方面说明,如果你读过Just for Fun,Linus在写Linux之前实际上是在和Minix一起玩,但这对他的目的来说还不够。
我以前买了推荐这些书为了同样的目的,但我从来没有学习他们自己,所以只有把它们作为二手咨询。
作为一个Linux用户,我认为Linux有一个很好的社区供人们了解内核。 http://kernelnewbies.org是开始提问并了解内核工作原理的好地方。我无法做出书的推荐,但是一旦你阅读了关于核心新闻的起始材料,这个源文件就非常有用。
除了已经提到的优秀书籍(操作系统设计&实现特别好)之外,获得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等等。准备好在这个过程中沉淀很多时间。
当我在uni的时候,我花了一个学习时间学习操作系统,作为其中的一部分,我们必须在Linux中实现一个基于RAM的文件系统。
这是了解Linux keurnel的内部结构并掌握所有东西如何组合在一起的绝妙方式 - 同时也充分利用它与标准工具交互的乐趣。
潜入代码是无可替代的。尝试找到您感兴趣的驱动程序或子系统,并随时了解它。通过使用像VMware Workstation这样的工具,可以非常容易地进行所需的任何更改,快照虚拟机并运行修改的内核。如果内核在启动时出现混乱,谁在乎?只需跳回快照并解决问题。
对于书籍,我强烈推荐Robert Love给Linux Kernel Development。这是一本精彩的书 - 大量的信息,组织理智,幽默......没有干枯的阅读。
我自己没有尝试过,但可以从Linux开始构建自己的Linux发行版。听起来像是需要花费大量时间的东西,但会导致对Linux内核的胆量以及每个部分如何工作的深入了解。当然,你可以通过遵循任何其他的技巧来补充这一点。
注意到缺乏BSD系统的在这里,我想我会解囊:
- The Design and Implementation of the FreeBSD Operating System(死树的书)
- Unix and BSD Courses(课程和视频)
- FreeBSD Architecture Handbook(网上书店)
我自己并没有参加过任何课程,但我听说马歇尔柯克麦克库克在其他场合发表演讲,而且他非常擅长他的工作。
当然,BSD手册页是一个很好的资源,因为它们的维护程度远远超过普通的Linux手册页。以例如uvm(9)手册页为例,描述OpenBSD中的虚拟内存接口。
不完全相关,但我也会推荐视频History of the Berkeley Software Distributions,因为它可以很好地介绍UNIX历史和文化的BSD部分,以及从后面的大量欢迎的anectodes。
迈克斯通的建议,并从Minix开始。这就是Linus所做的!教科书写得非常好,Tannenbaum在展示如何在真实系统中实现各种功能方面做得非常出色。
似乎没有人提到过,代码化的BSD更清洁和更一致。文档的方式也更好(如前所述)。但是,由于您选择的系统有很多摆弄 - 我会选择更经常使用的系统。
我向你推荐BSD内核! BSD内核的黑客数量少得多,所以他们的发展更容易。 BSD和Linux内核都有很好的黑客,但有些人认为BSD的名气过滤了新手。当信息源没有每天更新100次时,也可以更轻松地进行设计决策。
在BSD的选择中,我最喜欢的是NetBSD。它可能不是您想要的桌面的无痛选择,但是因为它非常注重可移植性,所以质量非常好。我认为这一部分是这样说的:
10有些系统似乎有“如果它工作,它是正确的”的哲学。而就NetBSD的理念可以被描述为“它不工作,除非它是正确的”
如果你已经工作够长,你就会知道,NetBSD的是学习好的编码相当喜悦。尽管专业,你会发现更多的机会与Linux
无论你选择,开始加入他们的邮件列表,按照讨论。研究一些补丁,并最终尝试做你自己的错误修复。关于书籍,搜索Diomidis Spinellis文章和his book。这不完全是一本内核书,但有NetBSD的例子,并帮助大量解决大型软件。
Linux和Minix乐于学习。如果您还想了解现代微内核操作系统的外观,您可以看看QNX。完整的文档可在线获取,并且非常方便。例如,this在线书籍。
- 1. 了解linux中execve内部的最佳方式是什么?
- 2. LINUX VS BSD内核开发
- 3. EC2最新的Linux内核是什么?
- 4. 在Linux内核中存储信息的最佳方式是什么?
- 5. 了解Websphere内部结构
- 6. 了解EXE内部结构
- 7. 什么是Linux内核源
- 8. 用php跟踪内部推荐的最佳方式是什么?
- 9. 在heroku上锁定内部API的最佳方式是什么?
- 10. 了解access_process_vm linux内核?
- 11. 将内存分配给结构中的变量的最佳方式是什么?
- 12. 什么是重构结构数组的最佳方式?
- 13. 在Linux内核中处理SIGKILL的最佳方式
- 14. 构建nservicebus解决方案的最佳方式是什么?
- 15. 什么取代了最新的Linux内核中的get_sb_nodev和get_sb?
- 16. 解决这个继承结构的最佳方法是什么?
- 17. 什么是unix/linux内部?
- 18. 防止内存不足(OOM)在Linux上冻结的最佳方法是什么?
- 19. 不了解什么是内部阵列
- 20. linux内核的内核地址空间的布局是什么?
- 21. 将我的应用程序与内核连接的最佳方式是什么?
- 22. 什么是了解编译器的最佳方式?
- 23. 在内存中格式化SyntaxTree的最佳方式是什么?
- 24. Delphi中的mesh类结构的最佳方式是什么?
- 25. 什么数据结构使用128MB的1GB Linux内核空间?
- 26. 什么是从内核模块触发用户线程的最佳方式
- 27. 实现这种结构的最佳方式是什么?
- 28. 维持3级层次结构的最佳方式是什么?
- 29. 什么是语义结构FAQ的最佳方式?
- 30. 在Rust 1.3中继承结构的最佳方式是什么?
LFS旨在让你获得构建发行版的深入知识,并且真的不会帮助你理解内核 - 如何编译它。 – Draemon 2008-10-21 13:04:40