Threads and processes create the illusion of simultaneous execution, even on a single CPU, through rapid switching.
Figure 3.1 Isolation of execution.
This isolation ensures that threads and processes can execute concurrently without interfering with each other's memory, execution state, and resources. This concept extends to resource virtualization, a practice crucial for managing complex, distributed systems.
In practice, every (distributed) computer system offers a programming interface to higher-level software. Virtualization deals with extending or replacing an existing interface to mimic the behavior of another system.
Figure 3.2 General organization.
There are many ways in which virtualization can be realized, but to comprehend the difference, one must recognize that computer systems present four interface types at three levels:
Figure 3.3 Various interfaces offered by computer systems.
One approach is a native virtual machine monitor. It will have to provide and regulate access to various resources, like external storage and networks
Another approach is a hosted virtual machine monitor. It runs on top of a trusted host operating system, eliminating the need for independent implementation — e.g. external storage.
By utilizing the interface offered by a virtual machine monitor (VMM) or hypervisor, multiple guest operating systems can run independently and concurrently on the same platform. It might help if we use the diagram you might be more familiar with in COE692.
Figure 3.4 Basic hosted virtual machine architecture.
In its simplest form, a virtual machine is a self-contained system that includes everything from its own operating system (guest OS) to an application environment and the application itself.
If you recall, there also exists containers which also provide a virtual environment, so why use them in the first place?