我一直想做的一件事就是开发我自己的操作系统(不一定像Linux或Windows那样花哨,但比我已经完成的简单启动加载器更好)。
我很难找到资源/指南,让您过去编写一个简单的“Hello World”操作系统。
我知道很多人可能会建议我看看Linux或BSD;但是像这样的系统的代码库(大概)是如此之大,以至于我不知道从哪里开始。
有什么建议吗?
更新:为了让通过Google登陆这篇文章的人们更容易,这里有一些操作系统开发资源:
Linux From Scratch(感谢John)
SharpOS (C# Operating System)(谢谢lomaxx)
OS Dev Wiki和Forums(谢谢Steve)
BonaFide(谢谢Steve)
Bran(谢谢Steve)
Roll your own toy UNIX-clone OS(谢谢Steve)
其他资源:
我找到了一个名为MikeOS的好资源,“MikeOS是一个学习工具,用于演示操作系统的简单操作。它使用16位实模式进行BIOS访问,因此它不需要复杂的驱动程序”< / p>
2008年11月14日更新
我在Freebyte's Guide to...Free and non-free Operating Systems找到了一些链接到OSKit和ExOS库等工具包的资源。这些在开始OS开发时似乎非常有用。
2009年2月23日更新
Ric Tokyo在此nanoos中建议question。 Nanoos是一个用C ++编写的操作系统。
2009年3月9日更新
Dinah为有抱负的操作系统开发人员提供了一些有用的Stack Overflow讨论:Roadblocks in creating a custom operating system讨论了在开发操作系统时可能遇到的陷阱 和OS Development是一个更一般的讨论。
2009年7月9日更新
LB提供了Pintos Project的链接,online OS course是为学生学习操作系统开发而设计的教育操作系统。
2009年7月27日更新(仍然很强大!)
我偶然发现了伯克利的TomOS,有23个讲座。
MikeOS是slides and other materials的分支,包括一点内存管理器和鼠标支持。作为MikeOS,它旨在成为一个教育项目。它是用NASM汇编程序编写的。
2009年8月4日更新
我发现questions tagged osdev与上面列出的在线伯克利讲座一致。
2009年8月23日更新
stackoverflow上的所有OS/161
http://en.wikipedia.org/wiki/MicroC/OS-II是一个用c语言编写的学术操作系统,可以在模拟硬件上运行。该操作系统在Nachos中类似。谢谢Novelocrat!
tangurena推荐companion book,一个专为嵌入式系统设计的操作系统。还有Linux Kernel Development。
安德斯建议罗伯特爱的Cosmos。这是“广受好评的内部人员对Linux内核的看法。”
2009年9月18日更新
感谢Tim S. Van Haren向我们讲述了Managed Operating System Alliance (MOSA) Framework,一个完全用c#编写的操作系统。
tgiphil告诉我们BrokenThorn's guide setup with VS 2005,“一组工具,规范和源代码,以促进基于通用中间语言的托管操作系统的开发。”
2009年9月24日更新
Steve使用Visual Studio在Windows上找到了一些开发资源,请查看OSDev's VS Section或kernel.org。
已于2012年9月5日更新
kerneltrap.org已不再可用。 Linux内核v0.01可从tutorial
获得已于12/21/2012更新 基本的OS开发paper旨在成为一个学期的项目。它将指导您构建具有基本组件的操作系统。初学者非常好的开始。相关Writing a Simple Operating System From Scratch。谢谢Srujan!
2013年11月15日更新
How to make a computer operating system。谢谢James Moore!
2013年12月8日更新
ToAruOS an OS built mostly from scratch, including GUI谢谢ddtoni!
2014年3月18日更新
Writing your own Toy Operating System
2016年9月12日更新
Writing a Simple Operating System —from Scratch
2016年12月10日更新
{{3}}(谢谢@Tyler C)
答案 0 :(得分:95)
在编写X86平台操作系统所涉及的brief overview后,有很多链接。
似乎最有希望的链接(www.nondot.org/sabre/os/articles)已不再可用,因此您需要通过Archive.org version来阅读它。
在一天结束时,引导加载程序获取内核的机器代码,将其放入内存并跳转到它。您可以将任何机器代码放在内核中,但是大多数C程序都需要一个操作系统,因此您需要告诉编译器它不会拥有所有这些,或者引导程序必须创建一些。
然后内核完成所有繁重工作,我怀疑它是你想要的示例内核。但是,要让内核说“Hello world”有一个加载命令解释器的内核,提供磁盘服务,加载和管理程序,还有很长的路要走。
您可能需要考虑订阅ACM才能访问他们的旧文献 - 在80年代末和90年代早期的早期计算杂志中有很多关于如何create alternative OSs的文章。也有可能从这个时代绝版的书籍。您可以通过查找这些杂志的索引(可以在该网站上找到 - 点击杂志名称附近的“索引”)然后四处询问有副本的人来免费获得相同的信息。
最后,我知道usenet已经死了(因为说了互联网的厄运先知)但是你会发现那个时代的许多笨拙的老专家仍然住在那里。你应该搜索google群组(他们有dejanews的旧存储库),我希望你会发现很多人在十年或者十五年前问你现在问的相同问题。你可能会在Linus Torvalds的许多查询中遇到帮助,因为他最初正在开发linux。如果搜索没有提起任何内容,请在相应的新闻组中询问(可能以comp.arch开头,但搜索名称中包含OS的那些)。
答案 1 :(得分:35)
Minix要小得多,专为学习目的而设计,the book to go with it也是一个很好的。
更新:我认为Minix 3有一个不同的目标,但Minix 2(当然还有第一个版本)是出于教学目的。
答案 2 :(得分:32)
作为从头开始编写实时多任务操作系统的人......
键盘去抖动程序,键盘驱动程序,磁盘驱动程序,视频驱动程序,文件系统,最后是一个启动加载程序 - 而这只是第一次启动它而无需做任何事情!
......我无法强调熟悉硬件的重要性!如果您真的想要自己完成所有操作,而不是仅仅选择其他人已经为您准备的原始系统,那么尤其如此。例如,联系英特尔并要求他们为您的CPU类型提供CPU卡!这将为您奠定 - “引脚”,中断,操作码,您的名字!
请记住硬件使一切成为可能。研究硬件。你不会后悔的。
答案 3 :(得分:18)
编写微控制器操作系统。我推荐一个基于x86的微控制器。现代操作系统只是巨大。首先学习基础知识。
答案 4 :(得分:16)
我希望有一个地方可以获得有关开发自己的操作系统的所有信息。最接近的是OS Dev Wiki和Forums。它们提供了大量有关设置,开发和设备硬件信息的良好信息。
BoneFide还有一些很棒的教程,我使用了Bran的入门教程,现在我正在查看一个基于他的名为Roll your own toy UNIX-clone OS的新教程。
我第二次检查:“操作系统:设计和实施”
如果你想在Windows上开发,请查看jolson的博客文章。
编辑: 要使用Visual Studio在Windows上进行开发,请查看BrokenThorn's guide或OSDev's wiki。
答案 5 :(得分:14)
优秀的资源是麻省理工学院课程的材料6.828:操作系统工程。
XV6 - 用ANSI C for 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的书更喜欢它!这是一个真正的宝石!
答案 6 :(得分:11)
您还可以查看SharpOS这是他们用c#编写的操作系统。
答案 7 :(得分:9)
书籍中的操作系统基础知识有很好的资源。由于没有太多要求从头开始创建新操作系统,因此您不会在互联网上找到大量的业余爱好者类型信息。
我推荐Tanenbaum的标准教科书“现代操作系统”。您也可以通过Calingaert查找“操作系统元素”,这是一本很简单的概述,从设计者的角度给出了操作系统的概略草图。
如果您对实时系统感兴趣(至少应该了解实时操作系统的差异和原因),那么我还推荐Labrosse的“MicroC / OS-II”。
编辑:
你能用“更多技术”来指明你的意思吗?这些书给出了伪代码实现细节,但您是在寻找示例操作系统还是特定机器/语言的代码片段?
- 亚当
答案 8 :(得分:7)
刚来自另一个问题。我想提一下Pintos ...我记得我的操作系统课程与Nachos和Pintos似乎是可以在x86上运行的那种东西。
答案 9 :(得分:7)
我发现Robert Love的Linux内核开发非常有趣。它告诉您Linux内核中的不同子系统如何以非常实际的方式工作。由于源代码可用,Linux是攻击的主要候选者。
答案 10 :(得分:6)
以下是其他一些值得纳入此讨论的Stack Overflow页面:
Roadblocks in creating a custom operating system
Developing an operating system for the x86 architecture
答案 11 :(得分:6)
开始攻击Minix。它比Linux(显然)小很多,它的设计考虑了教学目的(至少有一些)。不过Minix 3,这是一个完全不同的故事。
答案 12 :(得分:5)
我在本科的操作系统课程让我们为OS/161构建了一些子系统,这是一个简单的,类似BSD的内核,它提供了一些基础知识,同时可以自由地探索各种设计空间决策,以实现更高的 - 等级服务。
答案 13 :(得分:5)
已经回答了,但是当我在大学学习操作系统时,我们开始使用早期的Linux内核并添加了简单的现代功能(基本文件系统,虚拟内存,多任务处理,互斥体)。好开心。你可以跳过一些非常疯狂的低级程序集,只能用于保护模式和页面表格,同时还要学习一些内容。
http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2
答案 14 :(得分:4)
您可能需要查看linuxfromscratch。
Linux From Scratch(LFS)是一个项目 它为您提供了一步一步的帮助 建立自己的说明 自定义Linux系统,完全来自 源代码。
答案 15 :(得分:4)
我想包括Samy Pesse的这个回购How-to-Make-a-Computer-Operating-System。是一项正在进行的工作。非常有趣。
答案 16 :(得分:4)
答案 17 :(得分:3)
如上所述,OSDev Wiki是(到目前为止)操作系统开发的最佳来源。对于那些讲德语的人来说,lowlevel.eu Wiki也很棒。一些相对未知的Incitatus OS,一个带有一小组用户空间应用程序的简单内核。很高兴用于进入操作系统开发的复杂主题。
答案 18 :(得分:3)
在www.mosa-project.org查看托管操作系统联盟(MOSA)项目。他们正在设计AOT / JIT编译器和C#中完全托管的操作系统。一些开发人员来自不活跃的SharpOS项目。
答案 19 :(得分:3)
答案 20 :(得分:3)
我玩过Cosmos,这是“完全用CIL兼容语言实现的操作系统项目。”它是用C#编写的,所以它就在我的小巷里。对于像我这样从未尝试过构建操作系统的人来说,能够立即运行“Hello World”操作系统真的很酷。
答案 21 :(得分:3)
一个相当简单的OS研究将是μC/ OS。这本书有一张软盘,里面有源。
答案 22 :(得分:2)
Movitz是一个用Common Lisp编写并运行“在金属上”的Lisp环境。不幸的是,Movitz main page上的某些链接拒绝访问,但您可以找到有关如何从trac page下载和编译源代码的说明。此外,可以在this page的存档上找到就绪图像。
恕我直言,这是非常有趣的,因为它在当前可用的硬件上带回了Lisp machine概念。它在商业上失败了,但这并不能证明这个想法很糟糕。
The Unix haters handbook是一本有趣的书,它严肃地指责Unix及其衍生物的概念。许多部分都论述了Lisp机器概念的优越性。
答案 23 :(得分:2)
这是一篇名为“Writing a Simple Operating System From Scratch”的论文。它包括编写引导加载程序,进入x86-32保护模式,以及用C编写基本内核。它似乎在详细解释所有内容方面做得很好。
答案 24 :(得分:2)
x86 JS simulator和ARM simulator对于了解不同的硬件如何工作并在不退出您喜爱的浏览器的情况下进行测试也非常有用。
答案 25 :(得分:1)
程序员感兴趣的问题。看到构建像Windows或Mac这样的操作系统需要很长时间,但如果你想构建一个简单的操作系统,那么你可以尝试一下
现在你已经获得了硕士学位(不仅仅是更多一点)在创建操作系统现在将这个知识分发给你的朋友并在他们的帮助下尝试创建一个像Mac,Linux或Windows一样强大的操作系统
答案 26 :(得分:1)
当你创建一个基本的操作系统时,它实际上很难继续,因为在制作GUI或移植库时没有太多的资源。但我认为看看ToAruOS会有很大的帮助!
该操作系统表面下的代码非常简单!但与此同时,他已经移植了诸如cairo,python,(尚未但很快)sdl之类的内容,制作了共享内存,并且他还制作了自己的widget工具包。它都是用C语言编写的。
另一个有趣的操作系统是pedigreeOS。它是由JamesM(jamesM's kernel tutorial背后的男人制作的。虽然它比ToaruOS有更多的功能,但它也更大,更混乱。
但无论如何,这两个操作系统将为你提供很多帮助,尤其是ToAruOS。
答案 27 :(得分:1)
当我开始使用基本操作系统时,我需要一个基本指南,如Stepping stones for a basic operating system。它帮助我摆脱了我的头脑。
如果你想从绝对没有(纯汇编代码)