Differences between version 4 and revision by previous author of VirtualMachine.
Other diffs: Previous Major Revision, Previous Revision, or view the Annotated Edit History
Newer page: | version 4 | Last edited on Wednesday, April 14, 2004 6:11:26 am | by AristotlePagaltzis | Revert |
Older page: | version 3 | Last edited on Saturday, February 15, 2003 3:25:45 pm | by GlynWebster | Revert |
@@ -1,16 +1,16 @@
-A ''virtual machine'' is a
program that executes ObjectCode designed for a different type of computer than the virtual machine is running on. The [JVM] virtual machine for [Java] is the most widely used, just about every WebBrowser has one
.
+A program that emulates a hardware environment and
executes MachineCode inside it
.
-Virtual machines are used
for:
+A well-known example is the [JVM], a VirtualMachine that allows
for the execution of [Java] ByteCode
: just about every WebBrowser has one. Lesser known examples include the SmallTalk and [LISP] [VirtualMachine]s.
-; Compatibility : Virtual machines
are simple, compilers are complicated. Object code
from one compiler can
run on any type of machine
, with any type
of [CPU
], providing someone'
s written
a virtual
machine for it
.
+While many [VirtualMachine]s
are designed to provide an environment different
from the hardware they
run on, this doesn't necessarily have to be the case: [VMWare] emulates a PC in a PC, f.ex. This is useful for running a real version
of MicrosoftWindows under
[Linux] instead of using [Wine
], or for testing multiple [LinuxDistribution]
s on
a fast
machine without having to stop what you're doing
.
-; Safety : A virtual machine can limit what the object code it is running does. In theory that Java program your web browser automatically downloaded from a webserver in Estonia and started to run won't write anything to your disk, because the JVM won't let it.
-
-; Novelty : Programming languages implicitly define what a computer ''is''. If that computer is far different from a Von Neumann Machine (the basis of most modern CPU designs), then you may as well write a virtual machine
for your imaginary computer, and have your compiler create code for that machine. The result probably won't be much less efficient than a native code compiler, and will be far easier to attain.
-
-; Debugging
: A virtual machine can monitor what the ObjectCode it is running does. You can break out of a programming that is running on a virtual machine at any point and examine everything about the machine's state. [Bochs | http://bochs.sourceforge.net/] is [ia32] emulator for Linux for this purpose.
+Virtual machines are used
for:
-; Emulation : I get to play my favourite ZX Spectrum video game[1] on my PC. Whee!
+; Compatibility : a VirtualMachine is simple, a [Compiler] is complicated. MachineCode from one [Compiler] can run on any type of machine, with any type of [CPU], providing someone's written a VirtualMachine for it.
+; %%% Safety : Anything the program running in a VirtualMachine does has to be done by the VirtualMachine on its behalf. The VirtualMachine could decide not to write to the harddisk because you haven't given permission for the program inside it to do so; and the VirtualMachine could even pretend to have written to disk successfully to the emulated code -- it will be none the wiser, because it exists in an isolated universe. Thus, in theory the [Java] applet your WebBrowser downloaded from a webserver in Estonia can't do any harm.
+; %%% Novelty : Programming languages implicitly define what a computer ''is''. If that computer is far different from a JohnVonNeumann machine (the basis of most modern [CPU] designs), then you may as well write a VirtualMachine for your imaginary computer, and have your [Compiler] create code for that machine. The result probably won't be much less efficient than a native code compiler, and will be far easier to attain.
+; %%% DeBugging : A VirtualMachine emulates an entire hardware environment. You can stop a running program at any point and examine ''everything'' about the machine's state -- something not possible with a regular debugger. [Bochs] was written for this purpose.
+; %%%
Emulation : I get to play my favourite ZX Spectrum video game[1] on my PC. Whee!
----
[1] [Ant Attack | http://sandywhite.co.uk/fun/ants/]! [http://www.wave.co.nz/~glyn/AALogo001.gif]