【问题标题】:Can you only write operating systems in C?只能用 C 编写操作系统吗?
【发布时间】:2011-06-07 08:10:23
【问题描述】:

我知道 C 及其超集允许您进行低级访问,但您可以使用不同的语言吗?例如 Visual Basic、C# 甚至 Java?我只是好奇,因为自 C 诞生以来,似乎应该有更好的东西出现。

【问题讨论】:

  • Java的问题在于Java创建字节码,需要虚拟机运行。如果没有操作系统,那么虚拟机要运行什么?
  • 比C好?异端。
  • @Sam:“这需要虚拟机来运行它”。啊,Jazelle,你这么快就被遗忘了吗?
  • Lisp 机器有一个用 Lisp 编写的操作系统(比如它曾经的操作系统)。如果这对你有价值。但是不能说 Lisp “自 C 诞生以来就出现了”:-)
  • 属于超级用户???呐。 S&A,也许。重复,好吧,它在许多其他问题中得到了回答(是否定的)。相关:What's the advantage of writing an OS entirely in assembly?Why don't people use c++ to make operating systems(这说明他们确实使用 c++)Which language would you use in your OS? 和许多其他人。

标签: c# java c operating-system


【解决方案1】:

您可以使用其中任何一种来编写操作系统。但是,您需要一个引导程序(可能用 C 编写)来加载和运行您的语言的运行时。

Google Scholar 展示了一些很好的研究起点:http://scholar.google.com/scholar?q=java+operating+system&hl=en&btnG=Search&as_sdt=1,5&as_sdtp=on

【讨论】:

  • 不一定。您可以扩展 C# 编译器(有开源实现)以使其能够从 C# 生成引导代码。如果我没记错的话,微软有一个 100% 用 C# 编写的操作系统(尽管我很可能弄错了)。
  • 我记得读过它使用汇编、C(可能还有一些 C++)作为硬件和内核之间的一些“粘合代码”,但主要是 C#。
  • 正确。这叫做奇点。
  • a link 给它。 :)
  • 实际上,我相信即使是大多数用 C 编写的操作系统也会使用一些汇编代码,主要用于硬件交互。所以即使是 C 也需要一些“胶水代码”...
【解决方案2】:

您可以使用您选择的任何语言编写操作系统 - 只要您具有将其编译到该平台上所需的引导程序。

例如,JNode 是一个基于 Java 的操作系统(带有少量汇编程序)。

【讨论】:

    【解决方案3】:
    【解决方案4】:

    您几乎可以使用任何编程语言。不过,您可能需要一些汇编和/或 C 粘合代码才能使用任何托管编程语言。

    您可以在OSDev wikiforum 获得很多信息。

    在一个项目中,他们甚至创建了直接编译为机器代码的 C# 编译器,因此内核中可能没有太多 C 或其他代码。任何内核都需要一些程序集。

    【讨论】:

      【解决方案5】:

      我很确定你可以,但正如你所说,使用 C 是因为它允许你进行低级别访问,但是,Visual Basic、Java 和 C# 它们是在框架下工作的地方

      【讨论】:

      【解决方案6】:

      可能有一些工具可以获取字节码(或 C# 中的 IL)并将其编译为当前处理器架构可以理解的机器级代码。不过,我自己一个都不认识。

      【讨论】:

        【解决方案7】:

        从所有答案看来,你可以,但它不会像创建一个用 C 编写的那样简单或容易。很可能它需要硬件支持或至少需要一些 c 或 c++“胶水代码”

        【讨论】:

          【解决方案8】:

          汇编器就是答案!单独的 C 不能产生一个好的引导扇区,因为您没有可用的正确输出格式。但大多数操作系统认为 C 的大部分内容都是不错的语言。

          【讨论】:

            【解决方案9】:
            【解决方案10】:

            Cosmos - C# 开源托管操作系统

            http://www.codeproject.com/KB/system/CosmosIntro.aspx

            【讨论】:

              【解决方案11】:

              您可以使用多种语言“开箱即用”来编写操作系统,例如 C++、D、汇编。

              如果您想使用 C#、Java 或 VB 等语言,则需要有一个运行时环境(在某些情况下包括 JIT 编译器)。这意味着,您将不得不编写这些运行时,而您将无法使用 Java 之类的语言来执行此操作。您必须使用 C/C++/Assembly 之类的语言编写运行时代码,然后您的运行时才能加载您的 Java/VB 代码。

              另一种方法是为 C#/Java/VB 编写一个新的编译器,它将编译为机器代码或程序集。这会起作用,但是,在 OS/Executive 级别使用 VB 或 Java 等语言会遇到很多麻烦,因为它们不允许您像 C/C++ 那样进行内存访问。两者都不允许您直接运行 CPU 指令。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-02-10
                • 2012-01-11
                • 2014-12-19
                • 1970-01-01
                • 2012-10-07
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多