Symbian OS devices have an MMU which is used to map the addresses seen by running code to real addresses of memory and I/O. The MMU in effect creates a virtual memory map, allowing scattered blocks of RAM to appear contiguous, or for a section of memory to appear at different addresses in different processes, or not at all.
Symbian OS uses the MMU to provide memory protection between processes, to allow sharing of memory, efficient allocation of RAM and to make all processes “see” the same memory layout. Three different memory models are supported by Symbian OS on ARM CPUs:
moving model: this is the model familiar from EKA1 where processes are moved to a run-address in low memory when executing and moved back to a home-address in high memory when not running.
direct model: this is used when the CPU does not have an MMU, or is emulating a system without an MMU. Not normally used, but occasionally useful for development boards
multiple model: only supported in ARM architecture V6 and above, each process has its own set of MMU tables. A context switch changes the current MMU table to the new thread’s table, instead of moving memory about in a single table as with moving model.
For ARM architectures with a virtually-tagged cache, fixed processes avoid the need to flush the cache on context switches by keeping all the code and data at a fixed address. This implies that there can only ever be one instance of each fixed process because the data chunk address cannot be changed.
Important servers such as the file server and window server are fixed.
There is no limit to the number of fixed processes that can be supported. The kernel will attempt to use ARM domains for fixed process protection, but there are a limited number of domains so when they are exhausted normal MMU techniques will be used. Domains are slightly faster in a context switch but this is negligible compared to the real purpose of the fixed process in avoiding the cache flush.