Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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

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

3 Answers 3

up vote 9 down vote accepted

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.

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer
    
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

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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