34

我正计划为 x86 架构开发一个操作系统。

  • 我有哪些编程语言选项?
  • 有哪些类型的编译器可用,最好是在 Windows 环境中?
  • 有什么好的资源可以帮助我更多地了解操作系统开发吗?
  • 在虚拟机或物理硬件上测试我的操作系统更好吗?

有什么建议么?

4

13 回答 13

43

在我最后一年的拼贴项目中,我开发了一个带有虚拟内存管理器、虚拟文件系统和完全抢占式多任务处理的小型 x86 操作系统。我把它开源了,代码被大量注释,查看它的源代码页面:

https://github.com/stephenfewer/NoNameOS

根据我的经验,我可以推荐以下内容:

各个部分都需要x86 汇编语言,这是不可避免的,但可以保持在最低限度。很快您就会运行 C 代码,这是 OS 开发的可靠选择。一旦你有了某种可用的内存管理器,你就可以根据需要进入 C++(你需要某种内存管理器来处理 new 和 delete 之类的事情)。

无论您选择哪种语言,您仍然需要汇编和 C 来将系统从 BIOS 引导到任何可用的形式。

最终,您选择的主要语言将取决于您要开发的操作系统类型。

我的开发环境是 GNU 开发工具DJGPP的 Windows 端口以及NASM汇编器。对于我的IDE,我使用了 IBM 的 Eclipse 和CDT插件,它在 Eclipse 中提供了 C/C++ 开发环境。

对于测试,我推荐BOCHS,一个开源 x86 PC 模拟器。它可以让您快速启动您的操作系统,这非常适合测试,并且可以集成到 eclipse 中,因此您只需按一下按钮就可以构建和运行您的操作系统。我还建议偶尔同时使用 VMWare 和物理 PC,因为这样可以发现一些细微的错误。

PS OS 开发真的很有趣,但非常密集,我花了 12 个月的大部分时间。我的建议是计划好,你的设计是关键!请享用 :)

于 2008-09-24T21:49:08.037 回答
6

语言和编译器完全取决于您要完成的工作。不过,我建议您可能从太低的层面来处理问题。

有关于操作系统基础的材料。 麻省理工学院有关于这个主题的开放课件。通读Andrew Tannenbaum操作系统系列,看看Minix之类的东西。

了解那里有什么。开始修补东西。借用想法,看看它们的去向。如果你真的愿意,你可以重新发明轮子,但你会在其他人的作品的基础上学到更多。

于 2008-09-24T21:36:55.227 回答
5

没关系,你选择什么语言。如果该语言是图灵完备的,那么您可以在其中编写一个操作系统。

然而,语言的表现力将使某些类型的设计很容易或很难实现。例如,旧 Smalltalk 操作系统的“活力”和活力取决于它们在 Smalltalk 中实现的事实。你也可以在 C 中做到这一点,但它可能太难了,你甚至都不会去想它。JavaScript 或 Ruby OTOH 可能非常适合。

微软研究院的奇点是另一个例子。除了 Sing#、 Spec#C# (或类似语言)之外,它根本无法用任何其他语言实现,因为很多架构都依赖于这些语言的静态类型安全性和静态可验证性。

需要记住的一件事:用 C 语言实现的操作系统的设计空间已经得到了充分的探索。实际上有成千上万的人。但是,在其他语言中,您实际上可能会发现以前没有人发现过的东西!用 Java 编写的操作系统只有大约十几个,用 C# 编写的操作系统大约有六个,在 Haskell 中大约有两个操作系统,只有一个用 Python 编写,没有一个用 Ruby 或 JavaScript 编写。

尝试用 Erlang 或 Io 编写操作系统,看看这会如何影响您对操作系统的思考!

于 2008-09-28T04:56:22.153 回答
4

马里兰大学提供了一个使用GeekOS的操作系统课程。这是一个小型、广泛评论的操作系统,专为教育目的而设计,可以使用 Bochs 或 QEMU 仿真器运行。

有关如何在课程中使用它的示例,请在课程网页上查看之前提供的课程。在那里,您会找到必须向 GeekOS 添加不同功能的任务。

这是熟悉在 x86 架构上运行的小型简单操作系统的好方法。

于 2008-09-28T05:07:36.557 回答
3

您可能想查找 XINU。这是一个适用于 x86 的微型操作系统,除了被学生解剖之外,它并没有真正用于任何其他用途。

于 2008-09-24T21:29:34.103 回答
3

使用 ANSI C,并从模拟器开始。当您移植到真机时,会有一些汇编代码。上下文切换和中断处理(例如)更容易用汇编程序编写。

Andy Tannenbaum 写了一本关于操作系统的好书。还有许多其他好的。

祝你好运!没有什么比编写自己的操作系统更好的了,不管它多么小。

于 2008-09-24T21:44:14.803 回答
3

另请查看OSDev.org,其中包含您入门所需的所有信息。

于 2008-09-24T21:48:32.030 回答
2

毫无疑问,我会使用 Ada。这是我遇到的最好的通用系统编程语言,没有之一。例如,Ada 在指定记录中对象的位布局方面比 C 好得多。Ada 还支持在特定内存位置上覆盖记录。C 要求您使用指针来实现相同的效果。这可行,但更容易出错。Ada 还具有对中断的语言支持。

另一个:安全。Ada 默认使用绑定检查数组分配,但允许您在需要时将其关闭。C“默认”为不对数组进行绑定检查,因此您必须在需要时手动进行。时间表明,这不是正确的默认设置。你会忘记一个需要它的地方。缓冲区溢出漏洞是黑客使用的最常见的安全漏洞。他们有整个网站解释如何找到和使用它们。

至于学习如何做这件事,我知道的两本书是XINU(Unix 倒退,与 Scientology 无关)和Project Oberon。第一个是在我的操作系统研究生课程中使用的,第二个是由 Pascal 的创建者 Nikalus Wirth 编写的。

于 2008-12-04T14:57:26.747 回答
2

我曾经为 PCI 板上的 386SX 做过一次。关于如何在保护模式下启动 X86 cpu 的一个很好的来源是 linux 的源代码。这只是一些汇编语句。之后,您可以使用 gcc 编译您的 C 代码。结果是 ELF 格式的目标代码。我编写了自己的链接器,用目标代码制作程序。是的,它奏效了!祝你好运。

于 2008-09-24T21:36:48.737 回答
2

请务必查看我的问题的答案:

如何开始操作系统开发

于 2008-09-28T05:17:18.453 回答
1

如果您正在制作完整的操作系统,则需要使用多种语言。我希望至少有汇编、C 和 C++。

我会使用虚拟机进行大部分测试。

于 2008-09-24T21:26:54.937 回答
1

C 很可能...所有主要的操作系统都是用 C/C++ 或 Objective-C(Apple) 编写的

于 2010-09-02T15:21:32.510 回答
-5

如果你想编写一个操作系统,那么你需要几个人。一个操作系统不能写一个人。我认为在现有的操作系​​统项目上工作会更好

这只是 OS 项目的简短列表。您如何看到每种可能的语言都有一个项目。

于 2008-09-24T21:34:31.033 回答