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

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个回答

7

开始研究Minix。它比Linux小得多(显然),并且是为教学目的而设计的(至少有一些)。但不包括Minix 3,那是完全不同的故事。


7
我在本科时修读的操作系统课程要求我们为OS/161构建多个子系统,它是一个简单的类似BSD的内核,提供了一些基础功能,同时留下自由去探索实现更高级服务的各种设计空间决策。

7

5

谢谢,我本来想在Reddit上遇到这个后把它加入列表的,但是完全忘记了。 - Giovanni Galbo

5
已经回答了,但是当我在大学学习操作系统时,我们从早期的Linux内核开始添加简单的现代功能(基本文件系统、虚拟内存、多任务、互斥等)。非常有趣。你可以跳过一些真正疯狂的低级汇编语言,只专注于保护模式和页表,同时仍然学习到一些内部机制。 http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2

4

一个简单且基础的操作系统开发教程,旨在作为一个学期项目。它将引导您构建具有基本组件的操作系统。非常适合初学者入门。相关论文在此


很棒的资源。这篇论文提到了Nachos(2500行代码)、OS/161(11000行代码)、MINIX(30000行代码)和GeekOS。你可以去每个大学的官方网页上找到源代码、模拟器和工具,还有每年的作业。 - limitcracker

4
你可能想要查看linuxfromscratch

Linux From Scratch (LFS) 是一个项目,它为您提供了逐步构建自己的自定义 Linux 系统的说明,完全使用源代码。


32
编译操作系统与编写操作系统相去甚远。 - user149341
8
@duskwuff,你是对的,但是你会从中学到很多东西。然后你就可以自己写了。 - jfs

3
如上所述,OSDev Wiki是(迄今为止)操作系统开发领域最好的资源。对于说德语的人来说,lowlevel.eu Wiki也非常棒。另外一个相对不太知名的项目是Incitatus OS,它是一个简单的内核,带有一小组用户空间应用程序。它非常适合入门操作系统开发这个复杂的主题。请注意,以上内容中保留了HTML标签。

3

3
请查看托管操作系统联盟(MOSA)项目,网址为www.mosa-project.org。他们正在使用C#设计一个AOT/JIT编译器和完全托管的操作系统。其中一些开发人员来自于不活跃的SharpOS项目。

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