3 Answers
3

You can run a multi-process operating system even with no hardware support (no MMU), with all pointers representing a physical address. You do however lose several key features usually provided through the MMU:

Since a pointer always points to a specific place in RAM, you can't have swap (or only in a very limited way). Normally, the MMU raises an exception when it can't find a physical page for a given virtual address, and the OS-provided exception handler fetches the page from swap.

Since a pointer is dereferenced with no check, every process can access other processes's memory, and the kernel memory. Normally, the MMU raises an exception when it can't find a physical page for a given virtual address, and the OS-provided exception handler terminates the process for attempting an invalid access.

Since the same pointer has the same meaning in different processes, you can't easily implement fork. Normally, the effect of fork is to make a copy¹ of the process's physical memory, and create a new virtual memory map from the same virtual addresses to the new physical addresses.

There are unix-like operating systems that work on systems with no MMU.

One of the functions of virtual memory is partitioning. While it is possible to run multiple processes without any partitioning, this would be more like running multiple threads than processes - sharing the same address space.

Yes and no. It is possible to enforce memory separation without virtual memory. Some microcontrollers have hardware memory protection but not virtual memory (see jlliagre's answer). And even without hardware support, you can enforce memory separation through static analysis (it's not easy, but it's doable).
–
GillesJan 2 '11 at 13:32

It is certainly possible with some constraints like memory protection which would be an issue as already stated. For example µClinux http://www.uclinux.org/ supports multiple processes without implementing virtual memory. Note that some CPUs like at least the Analog Devices Blackfin do provide a MPU (Memory Protection Unit) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . This allows virtual memory less operating systems to still allow memory to be partitioned.