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

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

我很难find资源/指南,通过编写一个简单的“Hello World”操作系统。

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

有什么build议么?

更新:为了让那些通过Google登陆这个post的人更容易一些操作系统开发资源:

  • 编写自己的操作系统 (感谢Adam)

  • Linux从零开始 (谢谢John)

  • SharpOS(C#操作系统) (感谢lomaxx)

  • Minix3和Minix2 (感谢Mike)

  • 操作系统开发维基和论坛 (谢谢史蒂夫)

  • BonaFide (感谢史蒂夫)

  • 麸 (谢谢史蒂夫)

  • 滚动自己的玩具UNIX克隆操作系统 (感谢史蒂夫)

  • Broken Thorn OS开发系列

其他资源:

我find了一个名为MikeOS的好资源,“MikeOS是一个学习工具,可以演示简单的操作系统是如何工作的,它使用16位实模式访问BIOS,所以它不需要复杂的驱动程序”

更新11/14/08

我在Freebyte的指南中发现了一些资源…免费和非免费的操作系统 ,链接到工具包,如OSKit和ExOS库。 这些对于开始操作系统开发看起来非常有用。

更新2/23/09

里卡东京在这个问题上推荐nanoos 。 Nanoos是用C ++编写的操作系统。

更新3/9/09

Dinah为有抱负的操作系统开发人员提供了一些有用的Stack Overflow讨论: 创build自定义操作系统的路障讨论了在开发OS和OS开发时可能遇到的缺陷,这是一个更为一般的讨论。

更新7/9/09

LB提供了Pintos项目的链接, Pintos项目是为学习操作系统开发的学生devise的教育操作系统。

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

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

TomOS是MikeOS的一个分支,包括一点内存pipe理器和鼠标支持。 作为MikeOS,它被devise成一个教育项目。 它是用NASM汇编写的。

2009年8月4日更新

我find了幻灯片和其他材料 ,以及上面列出的在线伯克利讲座。

更新8/23/09

所有问题在stackoverflow上标记为osdev

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

tangurena推荐http://en.wikipedia.org/wiki/MicroC/OS-II ,一个为embedded式系统devise的操作系统。 还有一本伴侣书 。

由罗伯特·爱的Linux内核开发由安德斯build议。 这是一个“广受好评的内部人士对Linux内核的看法”。

Updated 9/18/2009

感谢Tim S. Van Haren向我们介绍了Cosmos ,一个完全用C#编写的操作系统。

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

2009年9月24日更新

Steve在Visual Studio中find了一些在Windows上开发的资源,查看了使用VS 2005或OSDev的VS部分的 BrokenThorn的指导设置 。

2012年9月5日更新

kerneltrap.org不再可用。 linux kernel v0.01可以从kernel.org获得

Updated 12/21/2012一个基本的操作系统开发教程,旨在成为一个学期的项目。 它指导您通过基本组件构build操作系统。 初学者非常好的开始。 相关论文 。 感谢Srujan!

更新11/15/2013

从零开始写一个简单的操作系统 。 感谢詹姆斯·摩尔!

更新12/8/2013

如何使电脑操作系统感谢ddtoni!

更新3/18/2014

ToAruOS主要是从零开始构build的操作系统,包括GUI

更新2016年9月12日

编写自己的玩具操作系统

2016年12月10日更新

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

在简要介绍为X86平台编写操作系统的过程中,有很多链接。

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

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

内核然后做了所有繁重的工作,我怀疑这是你想要的内核的例子。 但是在拥有一个内核的时候,有一个说“Hello world”的内核有一个加载命令解释器的内核,提供磁盘服务以及加载和pipe理程序,还有很长的路要走。

您可能想考虑订阅ACM以访问他们的旧文献 – 早期的80年代末90年代初期,在早期的计算杂志上有很多关于如何创build替代操作系统的文章 。 也有可能从这个时代已经绝版的书籍。 您可以通过查找这些杂志的索引(可在该网站上find – 点击杂志名称附近的“索引”),然后询问有副本的人。

最后,我知道usenet是死的(因为互联网厄运的先知这么说),但是你会发现许多那个时代那些狡猾的老专家仍然住在那里。 你应该search谷歌组(他们有dejanews旧的存储库),我希望你会发现很多人问十年或1.5前,你现在问的相同的问题。 你甚至可能碰到Linus Torvalds的许多问题,因为他最初是在开发linux。 如果search没有提出任何问题,请在相应的新闻组中查询(可能以comp.arch开始,但是search名称中带有OS的开头)。

Minix是一个小得多的,专为学习目的而devise的,而这本书也是一个很好的例子。

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

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

键盘反弹程序,键盘驱动程序,磁盘驱动程序,video驱动程序,文件系统,最后是一个启动加载程序 – 这只是第一次启动它没有任何关系!

……我不能强调熟悉硬件有多重要! 特别是如果你真的想自己做这些,而不是仅仅拿起别人已经为你准备的原始系统。 例如,联系英特尔,并要求他们为您的CPUtypes的CPU卡! 这将为你奠定 – “引脚”,中断,操作码,你的名字!

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

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

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

在BoneFide上也有一些很棒的教程,我使用了Bran的入门教程,现在正在研究一个基于他自己的玩具UNIX-clone OS的更新教程。

我第二次检查:“操作系统:devise和实现”

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

编辑:使用Visual Studio在Windows上进行开发,查看BrokenThorn的指南或OSDev的wiki 。

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

XV6 – 简单的类似Unix的教学OS,用ANSI C编写,用于x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html

XV6来源 – 作为行号的印刷小册子6.828/2012/xv6/xv6-rev7.pdf

XV6书 – 解释osdevise的主要思想6.828/2012/xv6/book-rev7.pdf

材料紧凑:92页来源和96页评论。

我比Minix更喜欢它! 这是一个真正的gem!

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

书中的操作系统基础知识有很好的资源。 由于没有太多的电话来从头开始创build新的操作系统,你不会在互联网上find大量的爱好者types的信息。

我推荐Tanenbaum的标准教科书“现代操作系统”。 您也可以通过Calingaertfind“Operating System Elements”(操作系统元素) – 这是一本书的简单概述,从devise者的angular度给出了一个操作系统的粗略描述。

如果您对实时系统有兴趣(至less您应该了解实时操作系统的差异和原因),那么我也推荐Labrosse的“MicroC / OS-II”。

编辑:

你能指定“更多技术”是什么意思吗? 这些书提供了伪代码实现细节,但是您是否在寻找一个示例操作系统,或针对特定机器/语言的代码片段?

-亚当

刚刚来自另一个问题。 我想提Pintos …我记得我的操作系统课程与玉米片和Pintos似乎是可以在x86上运行的相同types的东西。

我发现罗伯特·洛夫的Linux内核开发相当有趣。 它告诉你如何在Linux内核中的不同子系统以非常实际的方式工作。 由于源代码可用,Linux是攻击者的主要候选者。

这里有一些其他堆栈溢出页面值得纳入到这个讨论:

创build自定义操作系统的障碍
开发x86架构的操作系统

开始攻击Minix。 它比Linux小很多(显然),它的目的是为了教学目的(至less有一些)。 不是Minix 3,这是一个完全不同的故事。

已经有了答案,但是当我在大学学习操作系统时,我们开始使用早期的Linux内核,并添加了简单化的现代function(基本文件系统,虚拟内存,多任务,互斥)。 好开心。 你可以跳过一些真正疯狂的低级别程序集,只是为了保护模式和页表,而仍然学到了一些内容。

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2

我在本科的操作系统课程让我们为OS / 161构build了许多子系统,这是一个简单的类BSD内核,它提供了一些基础知识,同时还可以自由地探索实现更高级别服务的各种devise空间决策。

一个简单和基本的操作系统开发教程devise为一个学期的项目。 它指导您通过基本组件构build操作系统。 初学者非常好的开始。 相关论文在这里 。

我想包括Samy Pesse的这个回购如何使计算机操作系统 。 是一项正在进行中的工作。 很有意思。

你可能想看看linuxfromscratch 。

Linux From Scratch(LFS)是一个为您提供完整源代码构build自己的定制Linux系统的分步说明的项目。

一个合理简单的操作系统是μC/ OS。 这本书有一个松软的来源。

http://en.wikipedia.org/wiki/MicroC/OS-II

请访问www.mosa-project.org查看Managed Operating System Alliance(MOSA)项目。 他们正在C#中deviseAOT / JIT编译器和完全托pipe的操作系统。 一些开发者来自非活动的SharpOS项目。

我玩弄了Cosmos ,这是一个完全以CIL兼容语言实现的操作系统项目。 它是用C#编写的,所以就在我的胡同里。 对于像我这样从未尝试构build操作系统的人来说,能够立即运行“Hello World”操作系统真的很酷。

看看这个网站: http : //osix.net/modules/article/?id=359

如上所述, OSDev Wiki (目前为止)是操作系统开发的最佳来源。 对于那些讲德语的人来说, lowlevel.eu Wiki也很棒。 一个相对未知的Incitatus操作系统 ,一个简单的内核与一小部分用户空间的应用程序。 用于进入操作系统开发这个复杂的话题是很好的。

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

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

Unix仇恨手册是一本有趣的书,半认真地抨击Unix及其衍生物的概念。 很多部分都有关于Lisp机器概念如何更好的说法。

x86 JS模拟器和ARM模拟器也可以非常有用地了解不同的硬件如何工作,并进行testing,而无需退出您最喜爱的浏览器。

对于程序员来说,这是个问题。 看到build造像Windows或Mac这样的操作系统需要很长的时间,但是如果你想构build一个简单的系统,那么你可以尽力而为

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

现在你已经获得了硕士学位(不完全是多一点点)在创build操作系统现在分发这个知识给你的朋友和他们的帮助尝试创build一个像Mac,Linux或Windows一样强大的操作系统

这里有一篇名为“ 从头开始编写简单操作系统 ”的论文。 它包括编写一个引导加载程序,进入x86-32保护模式,用C编写一个基本的内核。它似乎在解释所有细节方面做得很好。

当你创build了一个基本的操作系统时,实际上很难继续,因为在GUI或者移植库方面没有太多的资源。 但是我认为看一下ToAruOS会有很大的帮助!

该操作系统表面下的代码非常简单! 但与此同时,他已经移植了像开罗,python(还不久但不久)sdl,共享内存的东西,并且还制作了自己的Widget工具包。 全部用C写成

另一个有趣的操作系统将是pedigreeOS 。 它由JamesM(作为jamesM的内核教程背后的人物)制作,虽然比ToaruOS有更多的特性,但它也更大更混乱。

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

当我开始在我的基本操作系统上工作时,我需要像基础操作系统一样的基础指南。 它帮助我不要掉以轻心。

如果你想从绝对没有(纯汇编代码)