在编程语言的上下文中,如果编译的代码在某种虚拟机上运行,为什么虚拟机不需要操作系统?例如,使用Java,用Java编写的程序在JVM中运行,但(据我所知)JVM没有操作系统。我知道操作系统是必要的,因为它们管理资源(例如,哪个进程与CPU有关),那么JVM怎么不需要呢?我对虚拟机的理解是,它是自己的处理器,拥有自己的架构和指令,但“虚拟机”一词是否可以与自己的操作系统一起使用?
答案 0 :(得分:1)
就“眼睛”而言,虚拟机是它自己的操作系统。它只是没有物理硬件可供考虑。
(物理/实际)CPU执行JVM - 这是依赖于平台的,然后JVM执行Java代码 - 这是独立于平台的。
因此JVM确实需要一个操作系统。独立于操作系统与不需要操作系统之间存在差异。在这种情况下,独立意味着对于Java,运行它的操作系统并不重要。只要JVM存在,它就可以正常工作。 JVM必须确保底层操作系统正确执行您的Java代码。
答案 1 :(得分:1)
简短的回答是JVM不需要操作系统。
JVM独立指定,与特定操作系统分开。无需指定操作系统就很有用,并且正如其他地方所指出的那样,没有我们通常认为的操作系统这样的JVM。
事实上,Java最初是用于厨房用具之类的东西 - 没有文件系统,没有鼠标或键盘,可能是键盘和一些7位数显示器,就是这样。因此,当Java程序需要在足够复杂且需要操作系统的机器上运行时,Java会与任何操作系统进行交互 - Windows,Mac OS,Unix等 - 及其部分内容核心类抽象了许多正常的操作系统操作,只要单个Java程序可以在没有更改的情况下运行任何这些操作。当然这有困难 - 这是一件很难的事情 - 但Java比我所知道的任何事情都更广泛和更好。
答案 2 :(得分:0)
大多数Java程序员都知道的JVM(Oracle JVM)希望在现有的操作系统(Linux,Windows,Solaris等)下运行,但JVM的存在预计会在裸机上运行。有关此类JVM,请参阅http://jnode.org。
不幸的是,Oracle JVM缺少一些必要的工具,无法将操作系统提供的设备构建到JVM本身。例如,你不能限制单个线程使用的内存或CPU数量,也不能强行杀死一个线程。
答案 3 :(得分:0)
真正的虚拟机需要操作系统。但Java的所谓虚拟机并不是虚拟机。它在操作系统的上下文中实现理想化的指令集,通常在用户模式过程中。在Java错误使用该术语之前,我们曾经将这些事物称为伪代码解释器,并且使用它们构建了一些非常强大的系统。