操作系统开发的入门资源有哪些?

610

我一直想做的事情是开发自己的操作系统(不一定像Linux或Windows那样花哨,但比我已经完成的简单引导程序要好)。

我很难找到超过编写简单的“Hello World”操作系统的资源/指南。

我知道很多人可能会推荐我看Linux或BSD;但是像那样的系统代码库(据推测)非常庞大,我不知道从哪里开始。

有什么建议吗?

更新:为了让通过Google进入此帖子的人更容易,请参考以下操作系统开发资源:

其他资源:

我发现了一个很好的资源,名为MikeOS,"MikeOS是一个学习工具,用于演示简单操作系统的工作原理。它使用16位实模式进行BIOS访问,因此不需要复杂的驱动程序"

更新于11/14/08

我在Freebyte's Guide to...Free and non-free Operating Systems找到了一些资源,链接到诸如OSKit和ExOS库之类的套件。这些似乎非常有用,可以帮助入门OS开发。

更新于2/23/09

Ric Tokyo在这个question中推荐了nanoos。Nanoos是一个用C++编写的操作系统。

更新于3/9/09

Dinah提供了一些有用的Stack Overflow讨论,适合有志于开发操作系统的人:Roadblocks in creating a custom operating system讨论了在开发操作系统时可能会遇到的问题, 而OS Development则是一个更一般性的讨论。

更新于7/9/09

LB提供了一个链接到Pintos Project,这是为学习操作系统开发的学生设计的教育性操作系统。

更新于7/27/09(仍在继续!)

我偶然发现了伯克利提供的在线操作系统课程,共有23节课。

TomOSMikeOS的一个分支,包括一些内存管理和鼠标支持。与MikeOS一样,它是一个教育项目。它是用NASM汇编语言编写的。

更新于8/4/09

我找到了与上述在线伯克利课程相配套的幻灯片和其他材料

更新于8/23/09

所有在stackoverflow上标记为osdev的问题

OS/161是一个基于模拟硬件运行的用C语言编写的学术性操作系统。这个操作系统类似于Nachos。感谢Novelocrat!

tangurena 推荐 http://en.wikipedia.org/wiki/MicroC/OS-II,这是一个为嵌入式系统设计的操作系统。还有配套书籍

Anders 建议阅读 Robert Love 的Linux Kernel Development。这是一本"广受赞誉的内部人士对 Linux 内核的深入分析"。

更新于 2009 年 9 月 18 日

感谢 Tim S. Van Haren 告诉我们Cosmos,这是一个完全用 c# 编写的操作系统。

tgiphil 向我们介绍了 Managed Operating System Alliance (MOSA) Framework,这是"一组工具、规范和源代码,用于促进基于公共中间语言的托管操作系统的开发"。

更新于 2009 年 9 月 24 日

Steve 找到了几个使用 Visual Studio 在 Windows 上进行开发的资源,请看BrokenThorn's guide setup with VS 2005或者OSDev's VS Section

更新于2012年9月5日

kerneltrap.org不再可用。Linux内核v0.01可从kernel.org获取。

更新于2012年12月21日 一个基本的操作系统开发教程,旨在作为一个学期的项目。它指导您构建具有基本组件的操作系统。非常适合初学者入门。相关论文。感谢Srujan!

更新于2013年11月15日

从零开始编写简单的操作系统。感谢James Moore!

更新于2013年12月8日

如何制作计算机操作系统。感谢ddtoni!

更新于2014年3月18日

ToAruOS是一个大部分从零开始构建的操作系统,包括GUI界面

2016年9月12日更新

编写自己的玩具操作系统

2016年12月10日更新

从零开始编写简单操作系统(感谢@Tyler C)


5
不要忘记访问http://forums.osdever.net。 - Brenden
17
为什么这种好的通用问题在 Stack Overflow 上总是被关闭? - Pratik Singhal
38
这个问题被点赞了370次,被投票赞成了422次,自从StackOverflow首次推出以来就存在。社区似乎很喜欢它,但由于某些原因,一小部分人必须让所有人都失望。这就是为什么我开始真的不喜欢S.O. - Giovanni Galbo
1
Unikernels(只做一件事并做好它)有一个非常有趣的趋势,这些努力非常相关。通常情况下,您可以在虚拟机中冷启动unikernel,并在不到一秒钟的时间内运行用户代码。我见过一种解决方案,仅针对此类服务的DNS查找会使DNS服务器触发“引导虚拟机”,以便在实际请求服务时准备就绪。 - Thorbjørn Ravn Andersen
4
我从这个开始,https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf - Tyler C
显示剩余4条评论
28个回答

99
在介绍编写X86平台操作系统所涉及的内容简要概述后,有许多链接。
似乎最有希望的链接(www.nondot.org/sabre/os/articles)已经不存在了,因此您需要查看Archive.org版本
到了一天结束时,启动加载程序将内核的机器代码放入内存并跳转至该代码。您可以将任何机器代码放入内核中,但大多数C程序都需要操作系统,因此您需要告诉编译器它没有所有这些功能,或者启动加载程序必须创建其中的一些功能。
然后,内核承担所有重活,我猜您想要的是示例内核。但是,在拥有一个打印“Hello world”的内核和加载命令解释器、提供磁盘服务以及加载和管理程序的内核之间还有很长的路要走。
你可能想考虑订阅ACM来获取他们早期文献的访问权限 - 在早期计算机杂志上有很多关于如何创建替代操作系统的文章,这些文章大多出现在80年代末和90年代初。 这个时代可能也有已经绝版的书籍。 你可以通过查找这些杂志的索引(该网站上可用 - 在杂志名称附近点击“索引”)并询问是否有人有副本来免费获得相同的信息。

最后,我知道usenet已经消亡了(因为互联网末日的预言者如此说),但你会发现那个时代的许多老专家仍然生活在那里。 你应该搜索谷歌组(他们有dejanews的旧存储库),我希望你能找到许多人在十年或1.5年前提出与你现在提出的相同问题。 你甚至可能会遇到Linus Torvalds在开发Linux时寻求帮助的许多问题。 如果搜索没有任何结果,请在适当的新闻组中询问(可能以comp.arch开头,但搜索名称中带有OS的新闻组)。


先生,COSMOS是开发操作系统的好工具吗? - Vikas Verma
@VikasVerma 我没有使用过它,所以我不知道。 - Adam Davis
@AdamDavis 第一个链接已经失效(其他链接似乎也是如此)。请修复它们! - nbro

37

Minix 是一个更小的、专为学习而设计的操作系统,附带的书籍也很不错。

更新:我想 Minix 3 的目标有点不同,但是Minix 2(当然还有第一个版本)是专门用于教学的。


我有最新的Tanenbaum书籍,但minix3源代码看起来相当庞大!我和OP有类似的目标,虽然我不想从头开始构建内核,但我真的想了解内核是如何工作以及它所做的事情。跟随Tanenbaum书籍和minix3足以帮助我最终对Linux内核做出贡献吗? - gideon

34

作为一个从零开始编写实时多任务操作系统的人,我强调熟悉硬件的重要性。键盘抖动例程、键盘驱动程序、磁盘驱动程序、视频驱动程序、文件系统和引导加载程序都需要编写,而这仅仅是第一次启动它时要做的事情!

如果你真的想自己完成所有这些而不是使用别人已经制定好的原始系统,则尤其如此需要熟悉硬件。例如,联系英特尔并向他们请求适用于你的CPU类型的CPU卡!这将为你提供详细信息 - "引脚排列"、中断、操作码等等!

请记住,硬件使所有这些成为可能。学习硬件。你不会后悔。

.


19

编写一个微控制器操作系统。我建议使用基于x86的微控制器。现代操作系统非常庞大。首先学习基础知识。


2
有什么想法从哪里开始吗?我非常感兴趣。要购买什么工具包..书籍可以帮助你入门等等。 - Julio
@Paul,如果您能详细解释一下您的答案,我会非常感激。我研究过AVR和Arduino,但最近发现了.NET微框架。虽然我更多地从事高层抽象的LOB工作,但我想开始往底层走。您建议从哪里开始? - gideon
@giddy:AVRs是当前的流行趋势。它们小巧便宜,但我不太喜欢它们的架构。我建议购买一个ARM开发套件(估计成本约为100美元)。它们在商业应用中很受欢迎。 - Paul Nathan
@Paul 谢谢!我没怎么听说过ARM。.net micro怎么样?我有点担心会烧坏什么东西。大多数套件都会附带一些说明书,对吧?再次感谢。 - gideon
@giddy:我对 .net micro 一无所知。ARM 在嵌入式市场上占据了大约 80% 的份额,是一个功能齐全的 CISC 处理器。一些开发套件是预装好的。您将获得有关如何使用开发套件将软件上传到 CPU 以及编译器/链接器的说明。 - Paul Nathan
显示剩余2条评论

17
一份极好的资源是MIT课程6.828:操作系统工程的材料。
XV6 - 一个使用ANSI C为x86编写的简单UNIX类教学操作系统。 http://pdos.csail.mit.edu/6.828/2012/xv6.html XV6源代码 - 作为带有行号的印刷手册 http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf XV6书 - 解释了操作系统设计的主要思想 http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf 这些材料很紧凑:92页源代码和96页评论。
我比Minix的书更喜欢它!这是一颗真正的瑰宝!

17

我希望有一个地方可以获取所有有关开发自己操作系统的信息。最接近的是OS Dev Wiki论坛。它们提供了大量关于设置、开发和设备硬件信息的优质信息。

此外,BoneFide上有一些很棒的教程。我使用了Bran的入门教程,现在正在查看基于他的一个更新的教程,名为Roll your own toy UNIX-clone OS

我也推荐阅读《操作系统:设计与实现》。

如果您想在Windows上开发,请查看jolson的博客文章

编辑: 要在Windows上使用Visual Studio进行开发,请查看BrokenThorn的指南OSDev的Wiki


1
相关:SO的x86标签wiki有指向英特尔/AMD手册和许多好东西的链接。 - Peter Cordes

12

你可能也想看一下SharpOS,这是一个用C#编写的操作系统。


10

关于操作系统基础知识,书籍是非常好的资源。由于很少有人需要从头开始创建新的操作系统,因此在互联网上并没有太多业余爱好者类型的信息。

我推荐标准教材《现代操作系统》(Tanenbaum著)。你也可能会发现卡林格特的《操作系统要素》有用——它是一本概述性的薄册子,从设计师的角度给出了大致的操作系统轮廓。

如果你对实时系统有任何兴趣(而且你至少应该理解实时操作系统的差异和原因),那么我还建议阅读Labrosse的《MicroC/OS-II》。

编辑:

请问您所说的“更技术”是什么意思?这些书提供了伪代码实现细节,但您是在寻找一个示例操作系统,还是特定机器/语言的代码片段?

-Adam


8

刚从另一个问题来。我想提一下Pintos... 我记得我的操作系统课程使用了Nachos,而Pintos似乎是可以在x86上运行的同类型东西。


8

我觉得罗伯特·洛夫的《Linux内核开发》很有趣。它以非常通俗易懂的方式介绍了Linux内核中不同子系统的工作原理。由于Linux的源代码是公开的,因此它是一个很好的项目用来进行编程探索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接