为什么操作系统不是用java编写的?

sti*_*oob 8 java

到目前为止,所有操作系统都是用C/C++编写的,而Java中没有.有大量的Java应用程序,但不是操作系统.为什么?

Ste*_*Kay 8

因为我们已经拥有操作系统,主要是.Java并不是设计用于在裸机上运行,​​但这并不像最初看起来那么大.由于C编译器提供了编译为特定指令的内部函数,因此Java编译器(或JIT,在此上下文中区别没有意义)可以做同样的事情.处理GC和内存管理器的交互也有点棘手.但它可以做到.结果是一个内核,它有95%的Java并且可以运行jar.下一步是什么?

现在是编写操作系统的时候了.设备驱动程序,文件系统,网络堆栈,以及使计算机可以执行操作的所有其他组件.Java标准库通常严重依赖系统调用来完成繁重的工作,因为它必须这样做,因为运行计算机是一件痛苦的事.例如,编写文件涉及以下层(至少,我不是操作系统的人,所以我肯定错过了一些东西):

  1. 文件系统必须为文件找到空间,更新其目录结构,处理日志,最后确定需要写入哪些磁盘块以及按什么顺序写入.
  2. 块层,必须调度并发写入和读取以最大化吞吐量,同时最大化公平性.
  3. 设备驱动程序,必须保持设备满意并将其戳到正确的位置以使事情发生.当然,每个设备都以自己特殊的方式打破,需要自己的驱动程序.

所有这一切都必须正常工作,并保持十几个线程访问磁盘的性能,因为磁盘本质上是一堆巨大的共享可变状态.

最后,你已经拥有了Linux,除了它不能正常工作,因为它没有在功能和性能方面投入太多精力,而且它只运行Java.可能你从单个地址空间和没有内核/用户空间的区别中获得了性能,但是获得的收益并不值得.

有一个特定语言操作系统有意义的地方:虚拟机.让底层操作系统处理运行计算机的困难部分,租户操作系统处理将虚拟机转换为执行环境.BareMetalMirageOS遵循此模型.你为什么要这样做而不是使用Docker呢?这是个好问题.


Dee*_*Two 4

确实有一个 JavaOS http://en.wikipedia.org/wiki/JavaOS

这里讨论为什么用java编写的操作系统不多。是否可以使用java制作操作系统?

简而言之,Java需要运行在JVM上。JVM需要运行在操作系统上。使用 Java 编写操作系统并不是一个好的选择。

操作系统需要处理使用java无法完成的硬件(使用JNI除外)。这是因为 JVM 只提供了有限的可在 Java 中使用的命令。这些命令包括添加、调用方法等。但处理硬件需要命令来直接操作reg、内存、CPU、硬件驱动程序。JVM 不直接支持这些,因此需要 JNI。这又回到了起点——仍然需要使用 C/汇编来编写操作系统。

希望这可以帮助。

  • 在我看来,必须对操作系统的某些部分使用汇编并不能否定操作系统的其余部分*是*用另一种语言(Java、C# 等)编写的事实。我还没有看到一个操作系统(甚至是基于 C 或 C++ 的操作系统)*不*包含至少一点汇编代码。整个事情几乎不需要“回到起点”。另外,请记住:没有什么可以阻止您将 Java 编译为机器代码。 (2认同)