只能用 C 编写操作系统吗?

Posted

技术标签:

【中文标题】只能用 C 编写操作系统吗?【英文标题】:Can you only write operating systems in 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? 和许多其他人。 【参考方案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】:

http://de.wikipedia.org/wiki/JavaOS

【讨论】:

【参考方案4】:

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

您可以在OSDev wiki 和forum 获得很多信息。

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

【讨论】:

【参考方案5】:

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

【讨论】:

VB、C# 和 Java 是怎样的“视觉语言”? en.wikipedia.org/wiki/Visual_programming_language 哦,太好了!!,我想我误解了“视觉”这个词,对不起,我会编辑它【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

市面上有一些 C# 操作系统

http://en.wikipedia.org/wiki/Singularity_(operating_system)

http://www.brokenwire.net/bw/Programming/62/c-operating-system

http://www.gocosmos.org/index.en.aspx

【讨论】:

【参考方案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 指令。

【讨论】:

以上是关于只能用 C 编写操作系统吗?的主要内容,如果未能解决你的问题,请参考以下文章

《操作系统真象还原》ELF文件

学生成绩管理系统 用C语言编写

编写脚本用的语言是C语言吗?

qt 只能写c++程序吗,不能写c语言的程序吗,要写c只能用 gtk吗?

Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?

如果没有可用的 c++ 编译器,C 语言可以调用用 c++ 编写的 DLL 吗?