为有抱负的学生提供有关构建自己的内核的建议[关闭]


18

我是一个非常有野心的大学生,希望学习几乎所有有关计算机的知识(如果有需要,请抨击我,我喜欢学习)。最近,我认为设计和构建自己的内核是一个有趣的项目(尽管是一个漫长的项目)。

我掌握了一些基本信息,并且已经积累了一些需要掌握Assembly和C / C ++才能真正完成此工作的信息。当我从事这些工作时,我想从编程的角度学习内核实际上是如何工作的。我已经花了几个小时浏览Linux内核的代码,但这只能带您到现在为止。

构建内核的基本步骤是什么?您需要解决的问题?命令还是做事?我知道我很讨厌,但我决心要应付。


12
无需为想要学习所有内容而ash恼您。但是,如果您打算进行实际尝试,则最好延长寿命,拥有超人的大脑,并且没有其他人生计划;)

2
我希望拥有所有这些!其实不是,我只是有强烈的学习欲望。
6

@delnan可能的偏执型精神分裂症也是一个加号:templeos.org
DanteTheEgregore

@DanteTheEgregore什么?
Panzercrisis

Answers:


34

您需要做的是设计操作系统。例如,即使您决定应该是一个类似UNIX的系统,仍然需要做出很多决定。您希望它与UNIX有多相似?您喜欢UNIX的哪些部分,并且您认为需要改进?

如果您不打算将其设置为类似于UNIX,那么您将面临更多的问题要回答:进程应该形成一棵树,还是“扁平化”?您要支持哪种进程间通信?您是否希望它是多用户的,或者只是多任务的(或可能是单任务的)?您是否希望它是一个实时系统?您想在任务之间提供什么隔离度?您希望它落在单芯片与微内核之间吗?您希望它在多大程度上(如果有)支持分布式操作?

我通常建议不要研究Linux内核以获取启发。这并不是针对Linux内核本身,而是一个简单事实,即Linux主要用于生产用途,而不是教育用途。它具有许多优化,向后兼容的技巧等,这些对生产非常有用,但比教育更容易分散注意力。

如果可以找到,那么Lion的书(John Lions的《 Lions'Commentary on UNIX 6th Edition》,带有源代码,由John Lions 撰写)的副本就容易得多了。第六版UNIX仍然很小且足够简单,可以很快地阅读和理解,而又不过分简化了玩具系统。

如果您打算针对x86(至少主要针对),您可能还需要查看Richard Burgess的MMURTL V 1.0。这为x86提供了一个系统,该系统使用x86硬件的方式要比CPU设计人员最初打算的要多得多-大多数实际系统都在避开这种情况,以支持向其他CPU的可移植性。您可能会猜到,这往往更倾向于硬件方面。打印的副本似乎很昂贵且很难找到,但是您可以免费下载文本和代码

幸运的是,还有更多的可能性- 例如Andrew Tanenbaum和Albert Woodhull的《操作系统设计和实现》


哇,谢谢您的好评。我将研究所有这些书。
n0pe 2011年

7
我添加了指向本书和源PDF的链接。关于v6 UNIX的源,令人惊讶的是它长100页,每页100行。在10,000行代码中,您具有完整的多任务操作系统。如果您可以真正理解2238行中有关该著名注释的代码,即“您不会理解这一点”,则可以给自己一个金星和一个名誉大师。请享用!
Peter Rowell

感谢您的链接!现在,我必须弄清楚哪里把它打印出来....
n0pe

1
Minix(Tannenbaum书)专为教育而设计,可能正是这里所需要的。

@PeterRowell,DMR说,它是在一个错误cm.bell-labs.com/who/dmr/odd.html

12

我建议从一个高度集中的小任务开始:使用汇编,编写一个玩具引导程序。它不需要做很多事情。您只希望计算机在启动时自动加载程序,打印一条确认程序正在运行的消息,从键盘上读取一些输入,打印另一条消息,然后关闭计算机。

这将有几个好处:

  1. 最终,您将需要为内核提供一个引导过程,因此这不是没有意义的练习。
  2. 它将为您提供汇编形式的练习。
  3. 它将为您编写底层IO例程提供实践。当没有可供您调用的操作系统时,如何在屏幕上写消息或读取按键?
  4. 它将为您提供有关CPU和主板技术细节的研究经验。(第一个问题:主板/ CPU启动时如何找到可启动程序?)
  5. 编写内核已成为一项非常复杂的任务,具有许多微妙之处。该任务将为您提供一些开始的知识,甚至可能使您在开始之前就不会迷失自己。

完成此操作后,您将对所要学习的内容有个更好的了解。


谢谢,我想这正是我要尝试做的。在我的未来更多阅读。
n0pe 2011年

7

学习如何在汇编器中编程是一个不错的开始,而由于缺少内置功能,因此从MSDOS 6.0开始也可能会有所帮助。

读一本类似《操作系统概念》的好书将是设计自己的内核的一个合理的开始。您将必须处理引导加载,设备驱动程序管理,与BIOS接口,文件系统创建和管理,程序调度,程序加载和卸载,至少实现某种外壳程序(比构建窗口系统容易得多)。

只有在您的内核与这些语言的标准库兼容的情况下,C / C ++才会起作用,否则,您还需要编写这些库的副本。

甚至还没有开始考虑多线程,系统安全性和网络。


7

Minix是一个不错的Unix克隆(它启发了Linux),是为教学而编写的。

Andrew S. Tannenbaum是一位出色的作家和老师,他以Minix为例(包括源代码)写了整本有关操作系统的书:http : //en.wikipedia.org/wiki/Operating_Systems : _Design_and_Implementation

我个人觉得他比程序员更好一些,所以有些事情还不如我个人所想,但是-嘿-可行!

我强烈建议您将此作为学习资源。它还将使您了解实际生产可能有用的东西所需的工作量。


我建议拿物理书。容易记笔记英寸

其实想起来,我想我在亚马逊上看到这本书便宜。我可能会到那里。谢谢
n0pe 2011年

另请注意,这是第三版。我相信当我上这门课程时,我们会使用第一版。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.