Virtual Memory Layout: Windows CE 5.0 vs. Windows Embedded CE 6.0
9/8/2008
Antes Windows Embedded CE 6.0, houve um limite de 32 processos e um limite MB 32 na memória virtual (VM) para cada processo. Além disso, todos os processos compartilhada a mesma espaço de endereço 4 GB. Para CE 6.0, o processo kernel reside na 2 GB superior a 4-GB (32-bit) espaço memória virtual e a inferior 2 GB é exclusivo para cada processo. Há um limite de cerca de 32.000 processos, devido a o número de identificadores que podem ser criados. O limite prático sobre o número de processos é limitada pela quantidade de físico memória.
Nas versões anteriores de Windows Embedded CE, a atual aplicativo executado no slot zero. CE 6.0, slot zero e todos os outros slots processo são efetivamente 2 GB cada.
Como acessar memória virtual é convertida em acessar hardware através da unidade gerenciamento memória (MMU), codificar memória virtual é CPU-dependente. ARM e x 86 CPUs usam hardware página tabelas, para que a de conteúdo de memória virtual é acessado diretamente pelo hardware. Outros CPUs usam manipulador perder um software de conversão look-aside reserva (Cargas de TLB) para os quais o de conteúdo de memória virtual precisa ser preenchido.
A seguinte lista mostra o metas de design para gerenciamento memória virtual em CE 6.0:
- Grande quantidade de memória virtual por processo
- Nenhum predefinida número de processos limite
- Proteção entre processos
- Mimimalization de CPU-dependente codificar
- Alocação eficiente memória virtual
- Eficiente perder Cargas de TLB de manipulação
A seguinte tabela mostra a memória virtual mapa (n.); mapear (v.) CE 6.0.
Modo | Intervalo | Tamanho | Descrição | Comentários |
---|---|---|---|---|
Kernel |
0xF0000000-0xFFFFFFFF |
256 MB |
Máquina virtual da CPU-específicos |
Área interceptar chamar do sistema. Página dados de núcleo. |
Kernel |
0xE0000000-0xEFFFFFFF |
256 MB |
Kernel máquina virtual, CPU-dependente |
Memória virtual espaço de kernel, a menos que não permitido, o CPU, such as SHx. |
Kernel |
0xD0000000-0xDFFFFFFF |
256 MB |
Kernel VM |
Memória virtual espaço de kernel, compartilhada por todos os servidores e drivers carregados no kernel. |
Kernel |
0xC8000000-0xCFFFFFFF |
128 MB |
Armazenar objeto |
Memória RAM base armazenamento para sistema de arquivos, bancos de dados CEDB e Registro RAM-Based memória RAM. Armazenamento de dados de legado. |
Kernel |
0xC0000000-0xC7FFFFFF |
128 MB |
As DLLs xip kernel |
As DLLs xip para o kernel e todos os servidores e drivers carregados no kernel. |
Kernel |
0xA0000000-0xBFFFFFFF |
512 MB |
Mapeadas estaticamente Uncached |
Direcionar acessar para físico memória ignorando o armazenar em cache CPU. |
Kernel |
0x80000000-0x9FFFFFFF |
512 MB |
Mapeadas estaticamente Em cache |
Direcionar acessar para físico memória acessada através de armazenar em cache CPU. |
Usuário |
0x7FF00000-0x7FFFFFFF |
1 MB |
Não Mapeados para proteção |
Buffer entre usuário e kernel espaços. |
Usuário |
0x70000000-0x7FEFFFFF |
255 MB |
Sistema compartilhados heap |
Heap compartilhada entre o kernel e processos. Kernel e servidores kernel podem alocar memória no heap e gravação a ele. Somente leitura para os processos usuário. Permite que um processo para dados get de um servidor sem precisar fazer um kernel chamar. |
Usuário |
0x60000000-0x6FFFFFFF |
256 MB |
Arquivos mapa (n.); mapear (v.) RAM-backed |
|
Usuário |
0x40000000-0x5FFFFFFF |
512 MB |
Usuário-modo DLLs O código e dados |
DLLs são carregadas na inferior de pilha e crescem até:
|
Usuário |
0x00010000-0x3FFFFFFF |
1 GB |
Processo Máquina virtual allocatable do usuário |
Codificar executável e dados. Alocações Virtuais VM (heap) Usuário:
|
Usuário |
0 x 00000000-0x00010000 |
64 KB |
CPU-dependente dados kernel usuário |
Dados kernel usuário sempre é somente leitura para usuário. Depending on CPU, ele pode ser kernel leitura/gravação (ARM), ou kernel Read-only (todos os outros). |
A seguinte lista mostra alguns pontos de detalhes da tabela acima:
- Usuário-modo DLLs agora crescem de 0x40000000 para cima, em vez de para baixo.
- Os usuários podem chamar funções VM somente na memória que eles alocar com VirtualAlloc. Eles não podem executar operações VM em máquina virtual kernel-alocado no espaço usuário, such as pilhas, modos de exibição arquivo Memory-mapped e DLL codificar ou dados.
- O kernel pode ler e gravar para a área compartilhada heap e usuário os processos podem apenas ler para a área compartilhada heap. O objetivo dessa área é permitir que o sistema para se comunicar com cliente processos com mais eficiência. No entanto, porque todos os processos podem ler informações a partir de heap compartilhado, não armazenar qualquer segurança-informações sigilosas, such as uma senha, no heap compartilhada.
- Sempre há um desmapeado área de at least 64 KB entre as áreas para proteger áreas de intervalo acessar.
Interface de memória virtual para processos do usuário
Pode haver apenas uma memória virtual mapeada em um tempo. Você não pode acessar a memória de outros processos diretamente pela sua janela endereço memória virtual. Funções de memória virtual podem ser usadas apenas em um endereço que foi alocado por um processo. De exemplo, um aplicativo não pode chamar VirtualProtect em um endereço codificar a alteração sua própria proteção.
O * ex versões as seguinte funções são destinadas ao uso por servidores para acessar a memória virtual do processo de cliente.
As seguinte funções compõem a interface virtual memória para processos usuário:
- VirtualAlloc
- VirtualAllocEx
- VirtualFree
- VirtualFreeEx
- VirtualProtect
- VirtualQuery
- WriteProcessMemory
- ReadProcessMemory
- VirtualProtectEx
- VirtualQueryEx
Interface de memória virtual kernel
O seguinte * ex funções levar um identificador processo como um parâmetro para que você possa executar operações na memória virtual de outro processo. A seguinte lista mostra a interface memória virtual para o kernel:
- VirtualCopy
- VirtualCopyEx
- LockPages
- UnlockPages
- CeVirtualSharedAlloc
- AllocPhysMem
- CreateStaticMapping
- VirtualSetAttributes
- DeleteStaticMapping
Benefícios do layout de memória virtual
- O número de processos não está limitado a 32.
- O disponível quantidade de memória para cada processo não está limitado a 32 MB.
- Alternar os processos no ARM e x 86 é mais rápido porque é mais simples fazer usar de tabelas página as hardware. O tempo para alternar processos para MIPS e SHx permanece sobre o mesmo.
- Perder Cargas de TLB de manipulação é mais rápida em MIPS e SHx devido verificando acessar espaço de endereço mais simples. O tempo para identificador Cargas de TLB de perdas no ARM e x 86 permanece sobre o mesmo.
Compensações do layout de memória virtual
- A memória virtual para cada processo não está mais acessível em todas as vezes, mas a memória virtual para o processo kernel e o atual processo estiver acessível em todos os momentos. Portanto, acessando a memória de outro processo, particularmente reserva parâmetros que são passados para um servidor, não é mais simples como mapeamento um ponteiro.
- Mais complicada contagem de referência.
- Mais complicada entre processos a comunicação (comunicação entre processos) e reserva passando.
See Also
Other Resources
Kernel Functionality Modifications: Windows CE 5.0 vs. Windows Embedded CE 6.0
Kernel API Modifications: Windows CE 5.0 vs. Windows Embedded CE 6.0