能否使用Java制作操作系统?

35

我想知道是否有可能用Java编写一个像Windows XP这样的操作系统,与用C语言编写的一样具备相同的功能。


5
已经存在这样的操作系统!请查看此链接=>http://sourceforge.net/projects/jos/ - missingfaktor
9
JOS从未取得任何进展......http://www.jnode.org是一个更好的例子。 - Stephen C
即使进行最少量的研究,也会发现已经有人创建了这个。 - Raedwald
6个回答

45
理论上是可以的,但你仍然需要一些低级汇编代码来引导在该机器上运行的Java VM,并且还需要用于访问硬件驱动程序的低级代码。
维基百科中得知:
鉴于Sun Microsystems的Java现在是最主要的面向对象语言之一,因此尝试使用基于Java的操作系统并不奇怪。在这个领域中,理想情况下,内核将只包含支持JVM所需的最少量内容。这是这种操作系统中唯一必须用其他语言而非Java编写的组件。建立在该JVM和基本硬件支持之上,就可以编写其余的操作系统,甚至可以编写传统上使用更低级别语言(例如C)编写的部分系统,例如设备驱动程序,也可以使用Java编写。
尝试创建这样一个操作系统的示例包括JX、JNode和JavaOS。

硬件驱动程序也应该用Java编写。 - Thorbjørn Ravn Andersen

6
在理论上,你可以使用Java处理器以Java字节码作为处理器的指令集来编写整个操作系统。请注意,这里不是解释。

有没有可以去做这个的地方?比如去哪里获取Java处理器,如何连接等等... - KrystosTheOverlord
这是我能找到的最好的资料:https://www.electronicdesign.com/technologies/embedded-revolution/article/21772568/java-processors或者,这里有一个开源版本,声称已经成功地使用FPGA实现了:https://opencores.org/projects/jop - iCodeSometime

5

理论上是可以的。但是你需要使用低级代码来运行Java虚拟机(除非你想将Java编译为汇编语言,这可能会牺牲很多Java的特性)。


Jikes RVM(前身为IBM Jalapeno)和Sun Lab的Maxine是自托管JVM的两个例子。前者有大约1000行C代码。Java通常被编译成机器码。 - Tom Hawtin - tackline
@TomHawtin-tackline,Maxine已经发布给普通公众了吗? - Thorbjørn Ravn Andersen
@Thorbjørn Ravn Andersen HotSpot是Oracle生产的JVM。还有JRockit,当HotSpot添加重要特性时,将逐步淘汰它 - 没有必要拥有两个生产JVM。 (还有Java ME JVM,也是如此。) - Tom Hawtin - tackline

3

这要看你认为的“特性”是什么。如果你指的是图形界面、华丽的窗口效果等,那么是的,不过你需要汇编语言或C语言来处理底层操作(如与I/O端口交互等)。如果你将Windows ABIs也视为一种特性,那么就会更难,因为它们遵循Pascal调用约定。


4
Windows API不是操作系统必要的一部分。 - Thorbjørn Ravn Andersen

3

操作系统更接近硬件(如驱动程序)。在我看来,这并不是Java的领域(只是操作系统问题域的错误解决方案)。


3

正如其他人所提到的,这个已经尝试过了。Jnode是唯一经得起时间考验并正在积极开发的操作系统,虽然他们多年没有发布新版本。 但是,如果您查看他们的Git提交,他们正在编写即将发布的代码。我是Java的粉丝,并期待着发布。讨厌冗长命令式语言(如Java)的人可能会对此感到不适,但这并不适用于每个人。

有趣的是,在硬件中实现Java字节码的想法。我认为这不会有任何进展,因为Java的强项在于您不需要过多关注硬件。您只需要获取一个Java操作系统,它可以在任何JVM上运行。

我认为Java在操作系统领域的真正优势是虚拟化。我想不出比使用Java更好的方法来拥有虚拟操作系统,因为Java无处不在。

就像其他发帖者在上面指出的那样,如果没有Java硬件实现,它不能完全在Java中实现。 Jnode完全由汇编和Java编写。但是,所有现代操作系统都使用某些汇编语言。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接