Virtualization where multiple operating systems concurrently
run on a
single machine (say x86 PC) has its roots in Turing's universal
computer.
As discussed in class, a universal
Turing machine (UTM) is a special computer that takes as input
the description of any other computer (i.e., Turing machine)
and emulates its behavior so that the outputs match. That is,
one gets the same result whether one builds a computer in
hardware or emulates it in software by giving its
specification as input to a UTM.
We call this specification a "program."
Since the computer being emulated may itself be universal, we
may end up with nested emulations where a UTM A emulates a UTM B
that in turn emulates a UTM C (and so forth).
How does running Java code on a Java Virtual Machine that,
in turn, runs on a Windows PC fit into the picture?
What about emulating Windows within Linux that runs on
a x86 PC?
Keep in mind that emulated Windows itself may be running Java Virtual Machine
as a process (or group of threads) which in turn run Java code.
And the Java code may be a homework assignment that implements a
universal Turing machine that takes as input specifications of
other Turing machines.
Write your answers
in a file named HW0Answers.txt (if simple text), HW0Answers.ps
(if Postscript, e.g., generated from LaTeX/dvips),
or HW0Answers.pdf (for PDF files).
Please place this
file in the sys/ directory and turn it in, along with the lab programming
assignment.
Back to the CS 503 web page