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

时间:2020-03-05 18:47:27  来源:igfitidea点击:

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

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

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

有什么建议?

更新:为了使那些通过Google登陆这篇文章的人更容易,这里提供了一些OS开发资源:

  • 编写自己的操作系统(感谢亚当)
  • Linux从零开始(感谢John)
  • SharpOS(C#操作系统)(感谢lomaxx)
  • Minix3和Minix2(感谢Mike)
  • OS Dev Wiki和论坛(感谢Steve)
  • BonaFide(感谢Steve)
  • 布兰(感谢史蒂夫)
  • 推出自己的玩具UNIX克隆操作系统(感谢Steve)
  • 破碎的刺操作系统开发系列

其他资源:

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

更新了11/14/08

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

更新日期:2/23/09

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

更新于2009年3月9日

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

更新了7/9/09

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

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

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

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

更新了2009年8月4日

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

更新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

史蒂夫找到了使用Visual Studio在Windows上进行开发的一些资源,请查看VS 2005或者OSDev的VS部分的BrokenThorn指南设置。

更新于9/5/2012

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

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

更新于11/15/2013

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

更新于2013年12月8日

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

2014年3月18日更新

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

2016年9月12日更新

编写自己的玩具操作系统

2016年12月10日更新

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

解决方案

回答

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

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

回答

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

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

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

编辑:

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

-亚当

回答

我们可能还想看看SharpOS,这是他们使用c#编写的操作系统。

回答

我们可能想看看linuxfromscratch。

Linux From Scratch (LFS) is a project
  that provides you with step-by-step
  instructions for building your own
  custom Linux system, entirely from
  source code.

回答

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

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

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

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

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

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

回答

已经有答案了,但是当我在大学上操作系统时,我们从早期的Linux内核开始,并添加了简单的现代功能(基本文件系统,虚拟内存,多任务,互斥体)。好开心。我们可以跳过一些真正疯狂的低级程序集内容,以破坏w /保护模式和页表,同时还可以学到一些胆量。

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

回答

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

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

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

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

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

回答

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

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

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

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

回答

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

回答

以下是一些值得纳入本讨论的"堆栈溢出"页面:

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

回答

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

回答

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

回答

要研究的一种相当简单的OS是C / OS。这本书有一张附有来源的软盘。

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

回答

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

回答

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

回答

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

回答

开始入侵Minix。它比Linux小得多(显然),并且设计时考虑到了教学目的(至少有一些目的)。虽然不是Minix 3,但这是一个完全不同的故事。