我正计划为 x86 架构开发一个操作系统。
- 我有哪些编程语言选项?
- 有哪些类型的编译器可用,最好是在 Windows 环境中?
- 有什么好的资源可以帮助我更多地了解操作系统开发吗?
- 在虚拟机或物理硬件上测试我的操作系统更好吗?
有什么建议么?
我正计划为 x86 架构开发一个操作系统。
有什么建议么?
在我最后一年的拼贴项目中,我开发了一个带有虚拟内存管理器、虚拟文件系统和完全抢占式多任务处理的小型 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 个月的大部分时间。我的建议是计划好,你的设计是关键!请享用 :)
语言和编译器完全取决于您要完成的工作。不过,我建议您可能从太低的层面来处理问题。
有关于操作系统基础的材料。 麻省理工学院有关于这个主题的开放课件。通读Andrew Tannenbaum的操作系统系列,看看Minix之类的东西。
了解那里有什么。开始修补东西。借用想法,看看它们的去向。如果你真的愿意,你可以重新发明轮子,但你会在其他人的作品的基础上学到更多。
没关系,你选择什么语言。如果该语言是图灵完备的,那么您可以在其中编写一个操作系统。
然而,语言的表现力将使某些类型的设计很容易或很难实现。例如,旧 Smalltalk 操作系统的“活力”和活力取决于它们在 Smalltalk 中实现的事实。你也可以在 C 中做到这一点,但它可能太难了,你甚至都不会去想它。JavaScript 或 Ruby OTOH 可能非常适合。
微软研究院的奇点是另一个例子。除了 Sing#、 Spec#和C# (或类似语言)之外,它根本无法用任何其他语言实现,因为很多架构都依赖于这些语言的静态类型安全性和静态可验证性。
需要记住的一件事:用 C 语言实现的操作系统的设计空间已经得到了充分的探索。实际上有成千上万的人。但是,在其他语言中,您实际上可能会发现以前没有人发现过的东西!用 Java 编写的操作系统只有大约十几个,用 C# 编写的操作系统大约有六个,在 Haskell 中大约有两个操作系统,只有一个用 Python 编写,没有一个用 Ruby 或 JavaScript 编写。
尝试用 Erlang 或 Io 编写操作系统,看看这会如何影响您对操作系统的思考!
您可能想查找 XINU。这是一个适用于 x86 的微型操作系统,除了被学生解剖之外,它并没有真正用于任何其他用途。
使用 ANSI C,并从模拟器开始。当您移植到真机时,会有一些汇编代码。上下文切换和中断处理(例如)更容易用汇编程序编写。
Andy Tannenbaum 写了一本关于操作系统的好书。还有许多其他好的。
祝你好运!没有什么比编写自己的操作系统更好的了,不管它多么小。
另请查看OSDev.org,其中包含您入门所需的所有信息。
毫无疑问,我会使用 Ada。这是我遇到的最好的通用系统编程语言,没有之一。例如,Ada 在指定记录中对象的位布局方面比 C 好得多。Ada 还支持在特定内存位置上覆盖记录。C 要求您使用指针来实现相同的效果。这可行,但更容易出错。Ada 还具有对中断的语言支持。
另一个:安全。Ada 默认使用绑定检查数组分配,但允许您在需要时将其关闭。C“默认”为不对数组进行绑定检查,因此您必须在需要时手动进行。时间表明,这不是正确的默认设置。你会忘记一个需要它的地方。缓冲区溢出漏洞是黑客使用的最常见的安全漏洞。他们有整个网站解释如何找到和使用它们。
至于学习如何做这件事,我知道的两本书是XINU(Unix 倒退,与 Scientology 无关)和Project Oberon。第一个是在我的操作系统研究生课程中使用的,第二个是由 Pascal 的创建者 Nikalus Wirth 编写的。
我曾经为 PCI 板上的 386SX 做过一次。关于如何在保护模式下启动 X86 cpu 的一个很好的来源是 linux 的源代码。这只是一些汇编语句。之后,您可以使用 gcc 编译您的 C 代码。结果是 ELF 格式的目标代码。我编写了自己的链接器,用目标代码制作程序。是的,它奏效了!祝你好运。
请务必查看我的问题的答案:
如果您正在制作完整的操作系统,则需要使用多种语言。我希望至少有汇编、C 和 C++。
我会使用虚拟机进行大部分测试。
C 很可能...所有主要的操作系统都是用 C/C++ 或 Objective-C(Apple) 编写的