因为我们已经拥有操作系统,主要是.Java并不是设计用于在裸机上运行,但这并不像最初看起来那么大.由于C编译器提供了编译为特定指令的内部函数,因此Java编译器(或JIT,在此上下文中区别没有意义)可以做同样的事情.处理GC和内存管理器的交互也有点棘手.但它可以做到.结果是一个内核,它有95%的Java并且可以运行jar.下一步是什么?
现在是编写操作系统的时候了.设备驱动程序,文件系统,网络堆栈,以及使计算机可以执行操作的所有其他组件.Java标准库通常严重依赖系统调用来完成繁重的工作,因为它必须这样做,因为运行计算机是一件痛苦的事.例如,编写文件涉及以下层(至少,我不是操作系统的人,所以我肯定错过了一些东西):
所有这一切都必须正常工作,并保持十几个线程访问磁盘的性能,因为磁盘本质上是一堆巨大的共享可变状态.
最后,你已经拥有了Linux,除了它不能正常工作,因为它没有在功能和性能方面投入太多精力,而且它只运行Java.可能你从单个地址空间和没有内核/用户空间的区别中获得了性能,但是获得的收益并不值得.
有一个特定语言操作系统有意义的地方:虚拟机.让底层操作系统处理运行计算机的困难部分,租户操作系统处理将虚拟机转换为执行环境.BareMetal和MirageOS遵循此模型.你为什么要这样做而不是使用Docker呢?这是个好问题.
确实有一个 JavaOS http://en.wikipedia.org/wiki/JavaOS
这里讨论为什么用java编写的操作系统不多。是否可以使用java制作操作系统?
简而言之,Java需要运行在JVM上。JVM需要运行在操作系统上。使用 Java 编写操作系统并不是一个好的选择。
操作系统需要处理使用java无法完成的硬件(使用JNI除外)。这是因为 JVM 只提供了有限的可在 Java 中使用的命令。这些命令包括添加、调用方法等。但处理硬件需要命令来直接操作reg、内存、CPU、硬件驱动程序。JVM 不直接支持这些,因此需要 JNI。这又回到了起点——仍然需要使用 C/汇编来编写操作系统。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
10219 次 |
| 最近记录: |