8

Is it possible to support multiple processes without support for virtual memory? I would like to know more about it if so.

  • Possibly off-topic? Unless it is about UNIX systems only. – Maciej Piechotka Jan 2 '11 at 10:36
10

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.

¹ In modern unices, this is usually done lazily (copy-on-write), which again relies on the MMU raising an exception when it can't find a physical page.

  • In the second bullet point "when it can't find a physical page for a given virtual address" should instead be something like "when access to the page corresponding to the given virtual address is to be denied". The kernel-owned page is most likely resident. – Ruslan Jul 22 at 10:29
  • @Ruslan When a page is not mapped in a process, the MMU usually contains information that does not map to a physical page. It can happen that the MMU contains the address of a physical page that the process doesn't have access to, but that's the exception rather than the rule, used for kernel memory if the kernel uses this feature of the MMU (which Linux does). – Gilles Jul 22 at 13:08
2

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.

0

This depends on how you define process vs threads in terms of memory.

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). – Gilles Jan 2 '11 at 13:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.