Memory Addressing
9/8/2008
Existem dois tipos de endereços em Windows Embedded CE: físico endereços e mapeados endereços virtuais.
- Endereços físicos podem ser real memória RAM ou dispositivo memória que precisa ser acessados pela OS. Ele é definido pelo físico espaço de endereço a partir de uma perspectiva CPU. O CPU não é possível acessar esse diretamente após o MMU habilitado.
O kernel podem apenas gerenciar 512 MB de físico memória.
Em algumas CPUs, como MIPS e SHx, o kernel pode manipular apenas diretamente a primeira 1 GB de memória definida pelos processadores, 512 uncached MB MB em cache e 512 mas alias para o mesmo 512 MB de físico memória.
Em x 86 e processadores ARM, você pode dividir este físico intervalo usando OEMAddressTable. - Endereços virtuais mapeados definem um mapeamento entre o virtual e físico que pode ser usado pelo usuário-aplicativos e modo kernel.
Há dois tipos de endereços virtuais mapeados: estático e dinâmico.- Endereços virtuais estáticos fornecem uma tabela mapeamento para o kernel que abrange que intervalo do endereço virtual mapeia para um físico intervalo do endereço. Esse mapeamento não alteração sobre tempo e é criada no tempo inicializar. OEMAddressTable Define este estático virtual para físico mapeamento nos x 86 processadores ARM. Em MIPS e SHx, o kernel e CPU definem esse mapeamento. O mapeamento estático também pode ser estendido após inicializar tempo por chamado CreateStaticMapping ou NKCreateStaticMapping. Os mapeamentos criados com CreateStaticMapping e NKCreateStaticMapping estiver acessível somente pelo kernel.
- Um endereço virtual mapeado dinamicamente é aquele que cria uma Virtual - para - físico mapeamento que pode ser definido e, em seguida, lançado quando não em uso. Esse tipo de mapeamento é acessível para usuário-modo aplicativos e é criado por chamado VirtualCopy.
Usando VirtualCopy Com o sinalizador PAGE_PHYSICAL, um aplicativo pode mapa (n.); mapear (v.) Um físico endereço para um endereço virtual estático Process-specific.
O processo inicia, chamado VirtualAlloc alocar um intervalo do endereço virtual no seu processo para mapa (n.); mapear (v.) o físico endereço.
Isso é seguido um chamar para VirtualCopy Para o processo mapeamento completo e faça o físico memória disponível no processo.
Um driver geralmente usa VirtualCopy a memória Device-specific mapa (n.); mapear (v.) em seu usuário-modo processo espaço. A mesma região pode ser mapeada por more than um processo.
CreateStaticMapping é como VirtualCopy Que ele cria um mapeamento entre físico memória e memória virtual estática. A principal diferença é que o endereço virtual estático está mapeado no espaço de endereço de kernel. Isso torna o endereço estático acessível somente pelo kernel.
CreateStaticMapping é geralmente usado para mapa (n.); mapear (v.) alguma memória Device-specific para o kernel para que uma rotina serviço interrupção (ISR) possa acessá-lo. O mesmo físico endereço também pode ser mapeado usando VirtualCopy.