Compartilhar via


Virtual Memory Layout: Windows CE 5.0 vs. Windows Embedded CE 6.0

Windows Mobile Not SupportedWindows Embedded CE Supported

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

  • Mapa (n.); mapear (v.) RAM-backed arquivos são mapeados na localidade fixa para compatibilidade com versões anteriores. Arquivos mapa (n.); mapear (v.) RAM-backed são objetos arquivo Memory-mapped que não têm um real arquivo abaixo delas. Eles são adquiridos por chamado CreateFileMapping com hFile Defina como INVALID_HANDLE_VALUE. Essa região fornece compatibilidade com versões anteriores para aplicativos que usados arquivos mapa (n.); mapear (v.) RAM-backed para cruzado-comunicação processo, esperando todos os processos para modos de exibição mapa (n.); mapear (v.) no mesmo endereço virtual.

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é:

  • Base começando em 0x40000000.
  • O código e dados são misturados.
  • Um DLL carregados no múltiplo processa cargas no mesmo endereço em todos os processos.
  • Compartilhar páginas de código o mesmo físico páginas.
  • Páginas de dados possuem exclusivo físico páginas para cada processo.

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:

  • Iniciar alocações VM acima o exe e aumentar o backup.

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:

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:

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