n00b1990
n00b1990

Reputation: 1249

How are system calls handled in a virtual machine?

I was wondering how a system call is treated when used in a virtual machine. Does it send some kind of signal through the virtualizing kernel and then to the "real" kernel (of the physical machine)?

I googled the subject but I can't seem to find anything. Thank you in advance.

Upvotes: 6

Views: 6274

Answers (2)

Stark07
Stark07

Reputation: 498

There are 3 common strategies to handle this:
1. Hypervisor traps system calls from guest: The hypervisor checks whether the privileged instruction(effectively system call) came from the guest OS itself, or from a user-space program within the guest OS. If it's the former case, then the hypervisor will actually forward the call to the hardware, although through the virtualization instructions. If it's the latter, the hypervisor will redirect the call to the guest OS, and then proceed.
2. Binary translation: Here the hypervisor checks the code from the guest OS in what are called as "basic blocks", scanning for privileged instructions. Wherever it finds them, it replaces them with calls to it's own procedures to system calls. It then proceeds to cache these blocks & eventually builds a whole set of such blocks.
3. Paravirtualization: Here the guest OS itself is modified so that instead of making calls to the hardware, it has APIs to invoke the hypervisor to get its hardware I/O done.

Source: Modern Operating Systems by Andrew Tanenbaum

Upvotes: 10

Linuxios
Linuxios

Reputation: 35783

In a virtual machine, where all hardware is virtualized, it works just like it would on real hardware. It goes through whatever syscall instructions the architecture has, which are read by the hypervisor, which executes the instructions on it's virtual processor.

However, in a emulation layer like Wine, syscalls in the PE executables are mapped to syscalls on the Linux kernel APIs.

Upvotes: 0

Related Questions