为 x86 架构开发操作系统 [关闭]
Posted
技术标签:
【中文标题】为 x86 架构开发操作系统 [关闭]【英文标题】:Developing an operating system for the x86 architecture [closed] 【发布时间】:2010-09-12 21:42:19 【问题描述】:我正计划为 x86 架构开发一个操作系统。
我有哪些编程语言选项? 有哪些类型的编译器可用,最好是在 Windows 环境中? 是否有任何好的资源可以帮助我了解有关操作系统开发的更多信息? 是在虚拟机上还是在物理硬件上测试我的操作系统更好?有什么建议吗?
【问题讨论】:
最好使用什么语言?在 X86 架构中,最好选择 x86 汇编语言和 C! 投票结束过于广泛。另见:***.com/questions/254149/… 【参考方案1】:在我最后一年的拼贴项目中,我开发了一个小型 x86 操作系统,它带有一个虚拟内存管理器、一个虚拟文件系统和完全抢占式多任务处理。我把它开源了,代码被大量注释,查看它的源代码页面:
https://github.com/stephenfewer/NoNameOS
根据我的经验,我可以推荐以下内容:
您将需要 x86 汇编语言用于各个部分,这是不可避免的,但可以保持在最低限度。很快您就会运行 C 代码,这是 OS 开发的可靠选择。一旦你有了某种可用的内存管理器,你就可以根据需要进入 C++(你需要某种内存管理器来处理诸如 new 和 delete 之类的事情)。
无论您选择哪种语言,您仍然需要汇编和 C 语言才能将系统从 Bios 引导到任何可用的形式。
最终,您选择的主要语言将取决于您要开发的操作系统类型。
我的开发环境是 GNU 开发工具 DJGPP 以及 NASM 汇编器的 Windows 端口。对于我的 IDE,我使用 IBM 的 Eclipse 和 CDT 插件,它在 Eclipse 中提供了 C/C++ 开发环境。
为了测试,我推荐BOCHS,一个开源的 x86 PC 模拟器。它可以让您快速启动您的操作系统,这非常适合测试,并且可以集成到 eclipse 中,因此您只需按一下按钮就可以构建和运行您的操作系统。我还建议偶尔同时使用 VMWare 和物理 PC,因为这样可以发现一些细微的错误。
附:操作系统开发真的很有趣,但非常密集,我花了 12 个月的大部分时间。我的建议是做好计划,您的设计是关键!享受:)
【讨论】:
我会推荐 Qemu(不知道它是否在 Windows 上运行)作为主虚拟机,因为它比 BOCHS 快很多!对于更严重的错误,我通常使用 BOCHS,因为它具有强大的调试功能并与 gdb 集成。 @QAZ,我知道这是一个很晚的帖子,但是您的项目有新链接吗?此链接已失效。 @QAZ,您能否提供一个指向您的项目的新链接? 嗨,我已经更新了上面答案中项目的链接。【参考方案2】:C 很可能...所有主要的操作系统都是用 C/C++ 或 Objective-C(Apple) 编写的
【讨论】:
【参考方案3】:毫无疑问,我会使用 Ada。这是我遇到的最好的通用系统编程语言,没有之一。例如,Ada 在指定记录中对象的位布局方面比 C 好得多。Ada 还支持在特定内存位置上覆盖记录。 C 要求您使用指针来实现相同的效果。这可行,但更容易出错。 Ada 还具有对中断的语言支持。
另一个:安全。 Ada 默认为绑定检查数组分配,但允许您在需要时将其关闭。 C“默认”为不对数组进行绑定检查,因此您必须在需要时手动进行。时间表明,这不是正确的默认值。你会忘记一个需要它的地方。缓冲区溢出漏洞是黑客使用的最常见的安全漏洞。他们有完整的网站解释如何找到和使用它们。
至于学习这方面的知识,我知道的两本书是XINU(Unix 倒退,与山达基无关)和Project Oberon。第一个是在我的操作系统研究生课程中使用的,第二个是由 Pascal 的创建者 Nikalus Wirth 编写的。
【讨论】:
【参考方案4】:请务必查看我的问题的答案:
How to get started in operating system development
【讨论】:
【参考方案5】:马里兰大学提供的操作系统课程使用GeekOS。这是一个小型、广泛评论的操作系统,专为教育目的而设计,可以使用 Bochs 或 QEMU 模拟器运行。
有关如何在课程中使用它的示例,请查看课程webpage 的先前课程。在那里,您会发现必须向 GeekOS 添加不同功能的任务。
这是熟悉在 x86 架构上运行的小型简单操作系统的好方法。
【讨论】:
【参考方案6】:你选择什么语言并不重要。如果该语言是图灵完备的,那么您可以在其中编写一个操作系统。
但是,语言的表现力会使某些类型的设计很容易或很难实现。例如,旧 Smalltalk 操作系统的“活力”和活力取决于它们在 Smalltalk 中实现的事实。您也可以在 C 中做到这一点,但它可能太难了,以至于您甚至都不会考虑它。 javascript 或 Ruby OTOH 可能非常适合。
Microsoft Research's Singularity 是另一个例子。除了 Sing#、Spec# 和 C#(或类似语言)之外,它根本无法实现,因为很多架构都依赖于这些语言的静态类型安全性和静态可验证性。
要记住一件事:用 C 语言实现的操作系统的设计空间已被充分探索。实际上有成千上万的人。但是,在其他语言中,您实际上可能会发现以前没有人发现过的东西!大约只有十几个用 Java 编写的操作系统,大约六个用 C# 编写的,在 Haskell 中大约有两个操作系统,在 Python 中只有 一个,在 Python 中只有 none Ruby 或 JavaScript。
尝试用 Erlang 或 Io 编写操作系统,看看这会如何影响您对操作系统的思考!
【讨论】:
"如果语言是图灵完备的,那么您可以在其中编写操作系统。"这不是真的。 Java 是图灵完备的,但操作系统的某些部分无法在 Java 中完成(例如端口 I/O)。图灵完备并不不意味着你可以用它做任何事情。 你怎么能用 ASM 以外的语言启动电脑??? @JesonPark:您也无法使用 ASM 启动 PC。您只能使用本机机器代码启动它。因此,您可以按照与 ASM 相同的方式进行操作:将程序从语言转换为本地机器代码。 @JörgWMittag:我知道!但是在所有 OS-Dev 教程中,首先我们使用 asm 语言编写 Bootloader 除非你想玩主板线!!!!!! @JörgWMittag 我希望看到您在不使用任何程序集的情况下启动 x86 操作系统。 (多重引导不算在内。)【参考方案7】:还可以查看OSDev.org,其中包含您入门所需的所有信息。
【讨论】:
【参考方案8】:使用 ANSI C,并从模拟器开始。 当您移植到真机时,会有一些汇编代码。上下文切换和中断处理(例如)更容易用汇编程序编写。
Andy Tannenbaum 写了一本关于操作系统的好书。还有很多其他好的。
祝你好运!没有什么比编写自己的操作系统更棒的了。
【讨论】:
安迪...他是你的朋友吗?【参考方案9】:我为 386SX 做过一次,它位于 PCI 板上。关于如何在保护模式下启动 X86 cpu 的一个很好的来源是 linux 的源代码。这只是一些汇编语句。之后,您可以使用 gcc 编译您的 C 代码。结果是 ELF 格式的目标代码。我编写了自己的链接器,用目标代码制作程序。是的,它奏效了!祝你好运。
【讨论】:
【参考方案10】:语言和编译器完全取决于您要完成的任务。不过,我建议您可能从太低的层面来处理问题。
有一些关于操作系统基础的材料。 MIT has OpenCourseware on the subject。阅读Andrew Tannenbaum 的Operating Systems series,并查看Minix 之类的内容。
了解那里有什么。开始修补东西。借用想法,看看它们的去向。如果你真的愿意,你可以重新发明***,但你会在其他人的作品的基础上学到更多。
【讨论】:
我在某种程度上不同意。通过重新发明***,你可以学到很多东西——假设这里的目标是学习而不是制造产品。为一门著名的编程语言手动编写自己的解析器肯定是在重新发明***,但它仍然通常用作编程练习,因为通过深入研究,您可以了解很多关于解析器如何工作的知识。同样适用于操作系统。很高兴看到其他人是如何做到的,但前提是您自己尝试过。【参考方案11】:如果您想编写一个操作系统,那么您需要几个人。一个操作系统不能写一个人。我认为在现有的操作系统项目上工作会更好
Reactos --> C,汇编程序 SharpOS --> C# JNode --> Java这只是操作系统项目的简短列表。您如何看待每种可能的语言都有一个项目。
【讨论】:
编写操作系统是这里的 CS 本科生的标准项目。只需要他们一个学期。 一个操作系统绝对可以由一个人编写。它有多少功能以及它的完善程度可能非常有限,但绝对有可能。【参考方案12】:您可能想查找 XINU。它是一个适用于 x86 的微型操作系统,除了供学生解剖之外,它并没有真正用于任何其他用途。
【讨论】:
【参考方案13】:如果您要制作完整的操作系统,则需要使用多种语言。我希望至少有汇编、C 和 C++。
我会在大部分测试中使用虚拟机。
【讨论】:
为什么你可能同时需要 C++ 和 C? @Daniel:虽然 C 非常适合高性能、接近硬件级别的低级编程,但我会推荐 C++ 用于所有其他更高级别的东西。不知道为什么你/不会/需要 C 和 C++。 @Rich:您不需要超过一种语言。您可能想要使用多个。我们不要将“需要”与“非常想要”混为一谈。 @David:我会支持“需要”。以上是关于为 x86 架构开发操作系统 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
微控制器(esp32)是否使用x86或arm,我可以在这些MCU中安装Linux [关闭]