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

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

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

有什么建议吗?

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

编写自己的操作系统(感谢Adam) Linux从零开始(谢谢John) SharpOS (c#操作系统)(感谢lomaxx) Minix3和Minix2(谢谢迈克) OS开发Wiki和论坛(感谢Steve) BonaFide(谢谢史蒂夫) 布兰(谢谢史蒂夫) 制作你自己的克隆unix操作系统玩具(谢谢史蒂夫) 断刺OS开发系列

其他资源:

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

更新11/14/08

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

更新2/23/09

Ric Tokyo在这个问题上推荐了纳米。Nanoos是一个用c++编写的操作系统。

更新3/9/09

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

更新7/9/09

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

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

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

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

更新8/4/09

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

更新8/23/09

所有问题都在stackoverflow上标记为osdev

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告诉我们Cosmos,一个完全用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获得

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

更新11/15/2013

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

更新12/8/2013

如何制作一个电脑操作系统谢谢ddtoni!

更新3/18/2014

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

2016年9月12日更新

编写自己的玩具操作系统

2016年12月10日更新

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


Minix要小得多,是为学习目的而设计的,与它配套的书也很不错。

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


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

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

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

编辑:

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

亚当


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


你可能想从头开始看linux。

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


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

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

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

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

You might want to consider subscribing to ACM to get access to their older literature - there are lots of articles in the late 80's and early 90's in early computing magazines about how to create alternative OSs. There are likely books that are out of print from this era as well. You might be able to get the same information for free by looking up the indexes of those magazines (which are available on that site - click "index" near the magazine name) and then asking around for people with a copy.

Lastly, I know that usenet is dead (for so sayeth the prophets of internet doom) but you'll find that many of the craggy old experts from that era still live there. You should search google groups (they have dejanews's old repository) and I expect you'll find many people asking the same questions a decade or 1.5 ago that you're asking now. You may even run across Linus Torvalds' many queries for help as he was developing linux originally. If searches don't bring anything up, ask in the appropriate newsgroup (probably starts with comp.arch, but search for ones with OS in the name).


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

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


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

BoneFide上也有一些很棒的教程,我使用过Bran的入门教程,现在我正在看一个基于他的《Roll your own toy UNIX-clone OS》的最新教程。

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

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

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


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

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

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

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

.


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


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

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


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


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


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

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


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


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


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


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


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


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

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

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


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


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

You need to focus on Assembly Language,C and C++. You should be expert in these languages. First read a good book on how OS works[Google it], then read all the info from Wiki OS Search in youtube "How to create your own OS in Assembly Language" watch the video, Eg. Video Download Linux OS source code and compile it yourself and try to modify the code yourself Now you are an experienced OS editor now download Minix and QNX and start developing with them and get their docs from here Minix Doc and QNX Doc

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


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


我想包括Samy Pesse的《如何制作计算机操作系统》。是一项正在进行的工作。很有趣。


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

x6—简单的类unix教学操作系统,用ANSI C为x86编写 http://pdos.csail.mit.edu/6.828/2012/xv6.html

XV6源代码—作为带有行号的印刷小册子 http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

XV6书-解释了操作系统设计的主要思想 http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

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

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


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


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

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

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

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


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


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

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