操作系统开发有哪些入门资源?[关闭]


589

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

我很难找到使您摆脱编写简单的“ Hello World” OS的资源/指南。

我知道很多人可能会建议我看一下Linux或BSD。但是此类系统的代码库很大(大概)很大,我不知道从哪里开始。

有什么建议么?

更新:为了使通过Google登陆本文的人们更加容易,这里提供了一些操作系统开发资源:

其他资源:

我找到了一个很好的资源,名为MikeOS,“ MikeOS是一个学习工具,用于演示简单OS的工作方式。它使用16位实模式进行BIOS访问,因此不需要复杂的驱动程序”

更新了11/14/08

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

更新于2/23/09

Ric Tokyo在这个问题上推荐了nanoos。Nanoos是用C ++编写的操作系统。

更新3/9/09

Dinah为有抱负的OS开发人员提供了一些有用的Stack Overflow讨论:创建自定义操作系统的障碍讨论了在开发OS时可能遇到的陷阱,而OS开发是一个更笼统的讨论。

更新了7/9/09

LB提供了指向Pintos项目的链接,该项目是为学生学习OS开发而设计的教育OS。

更新时间:2009年7月27日(仍然有效!)

我偶然发现了Berkley 的在线OS课程,其中包含23个讲座。

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

更新了8/4/09

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

更新了8/23/09

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

OS / 161是用c编写的学术OS,可在模拟硬件上运行。此操作系统在Nachos中类似。感谢Novelocrat!

tangurena建议使用http://en.wikipedia.org/wiki/MicroC/OS-II,这是一种专为嵌入式系统设计的操作系统。还有一本随书

Robert Love的Linux Kernel Development由Anders提出。这是“广受好评的Linux内核内部人士的看法”。

更新9/18/2009

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

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

更新9/24/2009

史蒂夫(Steve)找到了一些资源使用Visual Studio在Windows上进行开发,请查看VS 2005OSDev的VS Section的BrokenThorn指南设置

更新9/5/2012

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

更新日期2012年12月21日,这是 一个基本的OS开发教程,旨在作为一个学期的项目。它指导您构建具有基本组件的操作系统。对于初学者来说是一个很好的开始。相关论文。谢谢Srujan!

更新于11/15/2013

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

更新于12/8/2013

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

2014年3月18日更新

ToAruOS一个主要从头开始构建的操作系统,包括GUI

2016年9月12日更新

编写自己的玩具操作系统

2016年12月10日更新

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


5
不要忘了forums.osdever.net
布伦登

15
为什么这些好的通用问题总是在SO上关闭?
Pratik Singhal 2014年

30
自从StackOverflow首次发布以来,这个问题有370个投票,已经被投票422次。社区似乎很喜欢它,但由于某些原因,少数人不得不为每个人毁掉它。这就是为什么我开始真正不喜欢SO的原因
Giovanni Galbo 2014年

1
Unikernels有一个非常有趣的趋势(只需做一件事并做好),这些努力非常相关。通常,您可以在虚拟机中冷启动unikernel,并在不到一秒钟的时间内运行用户代码。我已经看到了一个解决方案,其中仅针对此类服务的DNS查找会使DNS服务器触发“启动虚拟机”,因此在实际
收到

Answers:


95

简要概述了为X86平台编写操作系统所涉及的内容之后,有很多链接。

看起来最有前途的链接(www.nondot.org/sabre/os/articles)不再可用,因此您需要翻阅Archive.org版本才能阅读。

在一天结束时,引导加载程序获取内核的机器代码,将其放入内存中,然后跳转到该代码。您可以将任何机器代码放入所需的内核中,但是大多数C程序都希望使用操作系统,因此您需要告诉编译器它并没有全部,或者引导加载程序必须创建其中的一部分。

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

您可能要考虑订阅ACM以获取其较早的文献-在80年代末和90年代初,早期的计算机杂志上有很多关于如何创建替代OS的文章。也有可能是这个时代的绝版书籍。通过查找那些杂志的索引(可以在该站点上找到-单击杂志名称附近的“索引”),然后向周围询问带有副本的人,您可以免费获得相同的信息。

最后,我知道Usenet已经死了(互联网厄运的先知可以这么说),但是您会发现许多来自那个时代的崎old老专家仍然生活在那里。您应该搜索Google网上论坛(他们拥有dejanews的旧存储库),并且我希望您会发现十年前或1.5年前有很多人在问同样的问题。您甚至可能在Linus Torvalds最初开发Linux时遇到了许多查询,以寻求帮助。如果搜索没有显示任何内容,请在适当的新闻组中进行询问(可能以comp.arch开头,但是搜索名称为OS的新闻组)。


嘿,先生,COSMOS是开发操作系统的好工具吗?
Vikas Verma

@VikasVerma我没有用过,所以不知道。
亚当·戴维斯

@AdamDavis第一个链接已断开(其他链接似乎也已断开)。请修复它们!
nbro

35

Minix的体积要小得多,并且是为学习目的而设计的,与之配套的书也不错。

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


我有最新的Tanenbaum书籍,但是minix3源代码看起来非常糟糕!我有一个类似OP的目标,虽然我不想从头开始构建内核,但我确实想了解内核的工作原理和作用。遵循Tanenbaum book and minix3足以对minix3进行更改的方法,最终将有助于我为linux内核做出贡献吗?
gideon

32

作为从头开始编写实时多任务操作系统的人...

键盘反跳例程,键盘驱动程序,磁盘驱动程序,视频驱动程序,文件系统,最后是引导加载程序-但这仅仅是第一次启动它而已,无所事事!

...我不足以强调熟悉硬件的重要性!尤其是如果您真的想自己做所有事情,而不仅仅是选择其他人已经为您设计的原始系统,则尤其如此。例如,与英特尔联系并要求他们提供您所用CPU类型的CPU卡!这将为您布置-“插针”,中断,操作码,为您命名!

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


18

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


2
有什么想法从这个开始吗?我很感兴趣?买什么工具包..书让您入手等等
Julio

@叔叔:到目前为止,我还没有遇到过一流的嵌入式系统书籍。他们要么太高级而不能使用操作系统,要么适合电气工程师而忽略了代码。至于工具包,谷歌找到一个“ bifferos.bizhat.com ”。也有ARM套件。我个人不喜欢哈佛建筑,所以我对arduino并不感兴趣,但是它最受欢迎的。对于更多奇特的作品,XC-1A也很不错。
保罗·内森

如果您可以扩大答案,@ Paul将不胜感激。我研究了AVR和Arduino,但最近看到了.NET micro。我是一个抽象程度更高的LOB专家,但我想开始走下栈。您建议从哪里开始?
基甸

@giddy:AVR是当前的时尚。它们体积小且价格便宜,但我真的不喜欢该体系结构。我建议您购买ARM开发套件(价格约100)。它们在商业应用中很流行。
保罗·内森

@保罗,谢谢!很少听说ARM。.net micro呢?我有点担心要烧东西。大多数工具包都会附带某种说明,对吗?再次感谢。
gideon

16

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

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

我第二次签出:“操作系统:设计和实现”

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

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


1
相关信息:SO的x86标签Wiki具有指向Intel / AMD手册的链接,以及许多不错的东西。
彼得·科德斯

15

麻省理工学院课程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图书-解释了os设计的主要思想 http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

资料紧凑:92页原文和96页评论。

我比Minix书更喜欢它!这是一颗真正的宝石!



9

书籍中提供了有关操作系统基础知识的良好资源。由于没有太多人从头开始创建新的操作系统,因此您在互联网上找不到大量的业余爱好者类型的信息。

我推荐Tanenbaum编写的标准教科书“现代操作系统”。您也许还可以找到Calingaert的“操作系统元素”,这是一本书的简要概述,从设计者的角度概述了OS是什么。

如果您对实时系统感兴趣(并且您至少应该了解实时操作系统的差异和原因),那么我还建议您使用Labrosse的“ MicroC / OS-II”。

编辑:

您能否指定“更多技术性”的含义?这些书提供了伪代码实现的详细信息,但是您是在寻找示例OS还是特定机器/语言的代码片段?

-亚当


7

只是来自另一个问题。我想提一下Pintos ...我记得Nachos和Pintos的操作系统课程似乎可以在x86上运行。


7

我发现Robert Love的Linux Kernel Development非常有趣。它告诉您Linux内核中不同子系统的工作方式。由于有可用的资源,因此Linux是要破解的主要对象。



6

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




4

您可能想看看linuxfromscratch

Linux From Scratch(LFS)是一个项目,可为您提供逐步指导,以完全从源代码构建自己的定制Linux系统。


32
编译操作系统与编写操作系统相差甚远。
duskwuff -inactive- 09年

7
@duskwuff你是对的,但是你会从中学到很多。然后,您可以继续编写自己的。
jfs

4

一个简单且基本的OS开发教程,旨在作为一个学期的项目。它指导您构建具有基本组件的操作系统。对于初学者来说是一个很好的开始。相关文章在这里


巨大的资源。本文引用了Nachos(2500行代码),OS / 161(11000),MINIX(30000),GeekOS。转到每个大学的官方页面,您将找到源代码,模拟器和工具以及每年的作业。
limitcracker



3

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


3

我喜欢Cosmos,它是“一个完全用CIL兼容语言实现的操作系统项目”。它是用C#编写的,所以就在我的小巷。对于像我这样从未尝试过构建操作系统的人来说,能够立即运行“ Hello World”操作系统实际上是很酷的。



3

如上所述,迄今为止,OSDev Wiki是进行OS开发的最佳来源。对于那些说德语的人来说,lowlevel.eu Wiki也很棒。相对未知的Incitatus OS,这是一个带有一小组用户空间应用程序的简单内核。很好地用于进入OS开发的复杂主题。


2

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

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

Unix仇恨者手册是一本有趣的书,它半认真地谴责Unix及其派生概念。许多部分都争论Lisp机器概念有多好。




1

程序员的有趣问题。看到构建Windows或Mac之类的操作系统将花费很长时间,但是如果要构建简单的操作系统,则可以尽力而为

  1. 您需要专注于汇编语言,C和C ++。您应该是这些语言的专家。
  2. 首先阅读一本关于操作系统如何工作的好书[Google it],然后从Wiki OS中阅读所有信息。
  3. 在youtube中搜索“如何用汇编语言创建自己的操作系统”,观看视频,例如。视频
  4. 下载Linux OS源代码并自己编译,然后尝试自己修改代码
  5. 现在您是一位经验丰富的OS编辑器,现在下载MinixQNX并开始与他们一起开发并从这里获取他们的文档Minix DocQNX Doc

现在您已经获得了创建OS的硕士学位(不仅可以完成更多工作),现在还可以将这一已知知识分发给您的朋友,并在他们的帮助下尝试创建像Mac,Linux或Windows一样强大的OS


编辑者请编辑我的答案,并删除http:和www之间的空格,因为我是新来的人,所以,我没有这么高的声望,请为我做这些事情
BharatKhanna

1

制作完基本操作系统之后,实际上很难继续进行,因为制作GUI或移植库的资源不多。但是我认为看看ToAruOS会有很大帮助!

该操作系统表面的代码是如此简单!但是与此同时,他已经移植了诸如cairo,python,(尚不很快)sdl之类的东西,共享了内存,并且他还制作了自己的小部件工具包。全部用C编写。

另一个有趣的操作系统是pedigreeOS。它是由JamesM(jamesM内核教程的幕后人)制作的。尽管它具有比ToaruOS更多的功能,但它也更大,更令人困惑。

但是无论如何,这两个操作系统将为您带来很多帮助,尤其是ToAruOS。


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.