Kernel virtual machine, it is CPU dependent, for example this space is not available for SHx. | ||
0xD0000000 | 0xDFFFFFFF | Used for all kernel mode modules of the OS. |
0xC8000000 | 0xCFFFFFFF | Object Store used for RAM file system, database and registry. |
0xC0000000 | 0xC7FFFFFF | XIP DLLs. |
0xA0000000 | 0xBFFFFFFF | Non-cached mapping of physical memory. |
0x80000000 | 0x9FFFFFFF | Cached mapping of physical memory. |
Process Address Space
The process address space ranges from 0x00000000 through 0x7FFFFFFF, and is divided into a CPU- dependent kernel data section, four main process regions, and a 1 MB buffer between user and kernel spaces. Figure 5-7 illustrates the main regions. The first process region of 1 GB is for application code and data. The next process region of 512 MB is for the DLLs and read-only data. The next two regions of 256 MB and 255 MB are for memory-mapped objects and the shared system heap. The shared system heap is read-only for the application process, but readable and writable for the kernel.

Figure 5-7 Process space in Windows Embedded CE 6.0
Table 5-10 summarizes the virtual memory regions in user space with start and end addresses.
Table 5-10 Process memory regions
Start Address | End Address | Description |
---|---|---|
0x7FF00000 | 0x7FFFFFFF | An unmapped buffer for protection between user and kernel spaces. |
0x70000000 | 0x7FEFFFFF | Shared heap between the kernel and processes. |
0x60000000 | 0x6FFFFFFF | Memory-mapped file objects that do not correspond to an actual physical file, mainly for backward compatibility with applications that used RAM-backed map files for inter-process communication. |
0x40000000 | 0x5FFFFFFF | DLLs loaded into the process and read-only data. |
0x00010000 | 0x3FFFFFFF | Application code and data. |
0x00000000 | 0x00010000 | CPU-dependent user kernel data (read-only for user processes). |
Memory Management Unit
Windows Embedded CE 6.0 requires the processor to provide a memory mapping mechanism to associate physical memory with virtual memory, up to a maximum of 512 MB of mapped physical memory. Figure 5-8 shows an example with 32 MB of flash memory and 64 MB of RAM mapped into the cached and non-cached static mapping regions of the kernel. On ARM-based and x86-based platforms, the memory mapping relies on a user-defined OEMAddressTable, whereas on the SHx-based and MIPS-based platforms, the mapping is directly defined by the CPU. The Memory Management Unit (MMU) is responsible for managing the physical-to-virtual address mappings.

Figure 5-8 Physical-to-virtual memory mapping example