Virtualisation is a key principle of operating system design. The core idea is that a single resource (the processor, memory, or a disk) can be shared by mimicking multiple independent copies of it.

This is an especially helpful idea when thinking about multiple processes running at the same time. They may in theory access the same memory addresses, but in practice, this is virtual memory that allocates each process its own private virtual address space.

We also virtualise the CPU to give the OS better control (restrict operations, IO requests, etc) at the expense of some speed (associated with running directly on the hardware). This is done via kernel mode and user mode — this gap is bridged with syscalls.