Hypervisors need to score well on
An interpreter can be safe and faithful, but performance will be bad.
Sensitive instructions:
behave differently if executed in kernel mode than when
executed in user mode.
Privileged instructions:
trap if executed in user mode.
Popek and Goldberg showed that a machine is virtualizable
only if the sensitive instructions are a subset of the
privileged instructions.
The Intel family did not have this property until 2005.
Also, user mode programs could read senstive info, like
whether they were in user mode. (We don't want the guest OS
doing this.)
What we need is trap-and-emulate.
So how were hypervisors possible before 2005?! Answer: binary translation.
Another approach: paravirtualization.
Here, the host presents a "machine-like" software interface
that allows the guest to make hypercalls.
Drawback: the guest has to be aware it is running on a VM,
since it has to make the hypercalls.
1. d; 2. a; 3. c;