Next: Performance improvements
Up: Future work
Previous: Protection of kernel memory
At this writing, the user-mode port is nearly fully functional. There's a major
omission and some minor ones:
- SMP Emulation
- This is the most serious missing functionality. This will allow
a virtual machine to be configured with multiple virtual processors, regardless
of how many physical processors are present on the host. This will allow SMP
development and testing to happen on uniprocessor machines. It will also enable
scaling experiments which test the scalability of the kernel on many more processors
than are present on the host. This will possibly allow the kernel to get ahead
of the available hardware in terms of processor scalability. SMP emulation is
also a way of allocating CPU time to virtual machines. If one virtual machine
is given one processor and another is given two, and they're both busy, the
two-processor machine will get twice as much CPU time as the uniprocessor machine
because it will have two processes running on the host versus the one being
run by the uniprocessor machine.
- SA_SIGINFO support
- The SA_SIGINFO flag allows processes
to request extra information about signals that they've received. There is nothing
difficult about supporting this option - it just hasn't been needed so far.
- Privileged instruction emulation
- A number of i386 instructions require that
the process executing them have special permission from the processor to run
them. The most common examples are the in and out set of instructions
and sti and cli. These make no sense to run as-is because
there is no hardware for in and out to talk to, and because
sti and cli are not how interrupts are enabled and masked.
So, they will have to be emulated using the equivalent user-space mechanisms.
Very few applications actually use these instructions, which is why this hasn't
been implemented yet.
- Virtual Ethernet enhancements
- The virtual Ethernet daemon can exchange packets
with the host and directly with the host's Ethernet, but it also needs to be
able to talk to its peers on other machines. This will allow a virtual Ethernet
to span multiple physical machines without putting the Ethernet frames directly
on the Ethernet, allowing a multi-machine virtual Ethernet to remain isolated
from the physical Ethernet.
- Nesting
- Currently, the user-mode kernel can not run itself. The inner kernel
hangs after getting fifty or sixty system calls into init. To some extent, this
is just a stupid kernel trick, but it does have some utility. The main one is
testing. It is a demanding process. It exercises many features of the host kernel
that aren't used very often. So if it can run itself correctly, that is a good
indication that it is functional and correct. The other main use for nesting
is testing itself on multiple distributions. There have been bugs and permission
problems which show up one some distributions and not others. So, this would
be a convenient way of making sure it works on many distributions.
Next: Performance improvements
Up: Future work
Previous: Protection of kernel memory
Jeff Dike
2000-08-23