开始操作系统开发有哪些资源?

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

我很难找到资源/指南,让你过去写一个简单的“你好,世界”;操作系统。

我知道很多人可能会推荐我看看Linux或BSD;但是这样的系统的代码库(大概)太大了,我不知道从哪里开始。

有什么建议吗?

更新:为了让通过谷歌登陆这篇文章的人更容易,这里有一些操作系统开发资源:

其他资源:

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

更新11/14/08

我在Freebyte的指南…免费和非免费操作系统找到了一些资源,链接到OSKit和ExOS库等工具包。在开始操作系统开发时,这些似乎非常有用。

更新2/23/09

Ric东京问题中推荐nanoos。Nanoos是一个用c++编写的操作系统。

更新3/9/09

Dinah为有抱负的操作系统开发者提供了一些有用的Stack Overflow讨论:创建自定义操作系统的障碍讨论了在开发操作系统时可能遇到的陷阱

. 操作系统开发是一个更一般的讨论

更新7/9/09

LB提供了一个到平托一家都项目的链接,这是一个为学生学习操作系统开发而设计的教育操作系统。

更新7/27/09(仍然强劲!)

我偶然发现了来自伯克利的在线操作系统课程,有23个讲座。

灰岩洞MikeOS的一个分支,包括一个小的内存管理器和鼠标支持。作为MikeOS,它被设计成一个教育项目。它是用NASM汇编程序编写的。

更新8/4/09

我发现幻灯片和其他材料与上面列出的伯克利在线讲座一起使用。

更新8/23/09

所有带有osdev标签的问题在stackoverflow上

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

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

由Robert Love设计的Linux内核开发由Anders推荐。这是一本“广受好评的内部人士对Linux内核的看法”。

更新9/18/2009

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

tgiphil告诉我们托管操作系统联盟(MOSA)框架,“一套工具,规范和源代码,以促进基于公共中间语言的托管操作系统的开发。”

更新9/24/2009

Steve找到了一些使用Visual Studio在windows上开发的资源,请查看BrokenThorn的VS 2005指南设置OSDev的VS部分

更新9/5/2012

Kerneltrap.org不再可用。linux内核v0.01可以从kernel.org中获得

< em > 12/21/2012更新 一个基本的操作系统开发教程,设计成一个学期的项目。它将指导您使用基本组件构建一个操作系统。这对初学者来说是个很好的开始。# EYZ1有关。谢谢Srujan !< / p >

更新11/15/2013

# EYZ0。谢谢詹姆斯·摩尔!

更新12/8/2013

谢谢ddtoni!

更新3/18/2014

ToAruOS一个基本上从头开始构建的操作系统,包括GUI

2016年9月12日更新

编写自己的玩具操作系统

2016年12月10日更新

从头开始编写一个简单的操作系统(谢谢@Tyler C)

124143 次浏览

Minix要小得多,是为学习目的而设计的,这本书与它相配也是一个很好的例子。

更新:我猜Minix 3是一个有点不同的目标,但是Minix 2(当然还有第一个版本)是为了教学目的。

书中有很好的操作系统基础知识资源。因为没有太多的要求从头开始创建新的操作系统,你不会在互联网上找到大量的业余爱好者类型的信息。

我推荐标准教材,Tanenbaum的《现代操作系统》。你可能也会发现Calingaert写的《操作系统元素》很有用——这是一本书的概述,从设计师的角度粗略地描述了什么是操作系统。

如果你对实时系统感兴趣(你至少应该了解实时操作系统的区别和原因),那么我也推荐Labrosse的“MicroC/OS- ii”。

编辑:

你能详细说明一下你所说的“更专业”是什么意思吗?这些书给出了伪代码实现的细节,但是你是在寻找一个示例操作系统,还是特定机器/语言的代码片段?

亚当

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

您可能想看看linuxfromscratch

Linux From Scratch (LFS)是一个项目 这为您提供了一步一步的步骤 说明如何建立自己的 自定义Linux系统,完全从 源代码。< / p >

在这个简单的概述之后有很多关于为X86平台编写操作系统的链接。

看起来最有希望的链接(www.nondot.org/sabre/os/articles)不再可用,因此您需要通过Archive.org版本来阅读它。

在一天结束时,引导加载程序获取内核的机器代码,将其放入内存中,然后跳转到它。你可以把任何你想要的机器代码放在内核中,但是大多数C程序都需要一个操作系统,所以你需要告诉编译器它不会有所有这些,或者引导加载程序必须创建一些。

然后,内核完成所有繁重的工作,我怀疑它就是您想要的示例内核。但是,从拥有一个说“Hello world”的内核到拥有一个加载命令解释器、提供磁盘服务以及加载和管理程序的内核,还有很长的路要走。

您可能想要考虑订阅ACM以获得他们的旧文献-在80年代末和90年代初的早期计算杂志中有许多关于如何创建替代操作系统的文章。这个时代可能也有绝版的书。你可以通过查找这些杂志的索引(在那个网站上可以找到——点击杂志名称旁边的“索引”),然后向周围的人打听有这些杂志的人,免费得到同样的信息。

最后,我知道usenet已经死了(互联网末日预言者是这么说的),但你会发现那个时代许多老顽固的专家仍然生活在那里。您应该搜索谷歌组(他们有dejanews的旧存储库),我预计您会发现许多人在10年或15年前问的问题与您现在问的问题相同。当Linus Torvalds最初开发linux时,您甚至可能会遇到他的许多帮助查询。如果搜索没有任何结果,在适当的新闻组中询问(可能以comp.arch开头,但搜索名称中包含OS的新闻组)。

已经回答了,但是当我在大学学习操作系统时,我们从早期的linux内核开始,并添加了简单的现代功能(基本文件系统、虚拟内存、多任务处理、互斥锁)。很有趣的。你可以跳过一些真正疯狂的低级别组装的东西,同时仍然学会了一些内脏。

http://kerneltrap.org/node/14002 # EYZ0 < / p >

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

BoneFide也有一些很棒的教程,我已经使用了麸皮的入门教程,现在我正在看一个基于他的制作你自己的玩具unix克隆操作系统的最新教程。

我第二次检查:“操作系统:设计与实现”

# EYZ0。

< p >编辑: 要在windows上使用Visual Studio进行开发,请查看BrokenThorn指南OSDev的维基.

作为一个从零开始编写实时多任务操作系统的人……

键盘反弹例程,键盘驱动程序,磁盘驱动程序,视频驱动程序,文件系统,最后一个引导加载程序-这只是第一次启动它,什么都没有做!

... 我再怎么强调熟悉硬件的重要性也不为过!如果你真的想自己做,而不是选择别人已经为你设计好的原始系统,这一点尤其如此。例如,联系英特尔,并要求他们为您的CPU类型的CPU卡!这将为您提供“pin-out”,中断,操作码,您能想到的!

记住,硬件使这一切成为可能。研究硬件。你不会后悔的。

写一个微控制器操作系统。我推荐基于x86的微控制器。现代的操作系统就是巨大的。首先学习基础知识。

下面是一些值得加入讨论的Stack Overflow页面:

创建自定义操作系统的障碍 # EYZ0
< / p >

这是另一个问题。我想提一下平托一家都…我记得我的Nachos和ptos的操作系统课程似乎可以在x86上运行。

我在本科时的操作系统课程让我们为OS / 161构建了许多子系统,这是一个简单的、类似bsd的内核,它提供了一些基础知识,同时在实现高级服务时留下了探索各种设计空间决策的自由。

可以研究的一个相当简单的OS是µC/OS。这本书有一张印有出处的软盘。

# EYZ0

我发现Robert Love的Linux内核开发非常有趣。它告诉您Linux内核中的不同子系统是如何以非常实际的方式工作的。由于源代码是可用的,Linux是黑客攻击的主要候选对象。

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

我曾玩弄过宇宙<强> < / >强,它是“一个完全用CIL兼容语言实现的操作系统项目”。它是用c#编写的,所以这正合我的胃口。对于像我这样从未尝试过构建操作系统的人来说,能够在短时间内运行一个“Hello World”操作系统实际上是一件非常酷的事情。

开始攻击Minix。它比Linux要小得多(很明显),并且它的设计目的是为了教学(至少在某些方面)。但不是Minix 3,那是一个完全不同的故事。

Movitz是一个用Common Lisp编写的Lisp环境,运行在“金属”上。不幸的是,Movitz主页面上的一些链接拒绝访问,但您可以找到关于如何从trac页面下载和编译源代码的说明。此外,可以在这个页面的存档中找到现成的图像。

恕我直言,这非常有趣,因为它在当前可用的硬件上带回了Lisp机概念。它在商业上失败了,但这并不能证明这个想法是坏的。

Unix仇恨者手册是一本有趣的书,半严肃地斥责Unix及其衍生概念。很多章节都在讨论Lisp机器的概念到底有多好。

一个简单和基本的操作系统开发教程设计为一个学期的项目。它将指导您使用基本组件构建一个操作系统。这对初学者来说是个很好的开始。相关论文是在这里

对程序员来说是个有趣的问题。要构建像Windows或Mac这样的操作系统需要很长很长时间,但如果你想构建一个简单的操作系统,你可以尽最大努力

  1. 你需要专注于汇编语言,C和c++。你应该精通这些语言。
  2. 首先读一本关于操作系统如何工作的好书,然后阅读Wiki系统的所有信息
  3. 在youtube上搜索“如何用汇编语言创建自己的操作系统”观看视频,如。视频
  4. 下载Linux操作系统源代码,自己编译,并尝试自己修改代码
  5. 现在你是一个有经验的操作系统编辑器,现在下载MinixQNX,开始与他们一起开发,并从这里获得他们的文档Minix医生QNX医生

现在你已经获得了创建操作系统的硕士学位(不是完全的,只是再多一点),现在把这些知识传播给你的朋友,并在他们的帮助下尝试创建一个像Mac、Linux或Windows一样强大的操作系统

这是一篇名为“从头开始编写一个简单的操作系统”的论文。它涵盖了编写引导加载程序、进入x86-32保护模式以及用c编写基本内核。它似乎很好地解释了所有细节。

我想包括Samy Pesse的repo How-to-Make-a-Computer-Operating-System。是一项正在进行的工作。很有趣。

麻省理工学院6.828课程:操作系统工程是一个很好的资源。

XV6 -简单的类unix教学操作系统,用ANSI C为x86编写 # EYZ0 < / p >

XV6 source -作为带有行号的打印小册子 # EYZ0 < / p >

XV6书-解释了操作系统设计的主要思想 # EYZ0 < / p >

材料紧凑:92页的原始资料和96页的评论。

我喜欢它比Minix的书还多!这是真正的宝石!

如上所述,OSDev维基(到目前为止)是操作系统开发的最佳来源。对于那些说德语的人来说,lowlevel.eu Wiki也很棒。一些相对不为人知的东西Incitatus操作系统,一个简单的内核和一组很小的用户空间应用程序。它非常适合用于了解操作系统开发的复杂主题。

当你已经创造了一个基本的操作系统时,你便很难继续下去,因为关于制作gui或移植库的资源并不多。但我认为看看ToAruOS会有很大帮助!

这个操作系统表面下的代码是如此的简单!但与此同时,他还移植了cairo、python、(还没有但很快)sdl、make共享内存,他还制作了自己的小部件工具包。都是用C语言写的。

另一个有趣的操作系统是pedigreeOS。它是由詹姆斯·m (jamesM内核教程背后的人)制作的。虽然它比ToaruOS有更多的功能,但它也更大,更令人困惑。

但无论如何,这2个操作系统将帮助你很多,特别是ToAruOS。

x86 JS模拟器手臂模拟器对于理解不同的硬件是如何工作的以及在不退出您最喜欢的浏览器的情况下进行测试也非常有用。

当我开始开发基本的操作系统时,我需要一个像基本操作系统的垫脚石这样的基本指南。这让我没有失去理智。

如果你想从无到有(纯汇编代码)