Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os drivers que executam DMA usam três espaços de endereço diferentes, conforme mostrado na figura a seguir.
Em qualquer plataforma Windows, um driver tem acesso ao espaço de endereço virtual completo suportado pelo processador. Em um processador de 32 bits, o espaço de endereço virtual representa quatro gigabytes. A CPU converte endereços no espaço de endereço virtual para endereços no espaço de endereço físico do sistema usando uma tabela de páginas. Cada entrada de tabela de página (PTE) mapeia uma página de memória virtual para uma página de memória física, resultando em uma operação de paginação quando necessário. Um MDL (lista de descritores de memória) fornece um mapeamento semelhante para um buffer associado a operações DMA do driver.
Os dispositivos variam em sua capacidade de acessar o espaço de endereço virtual completo do sistema. Um dispositivo usa endereços no espaço de endereços lógicos (do dispositivo). Cada HAL usa registros de mapa para traduzir um dispositivo ou endereço lógico para um endereço físico (um local na RAM física). Para o hardware do dispositivo, os registros de mapa executam a mesma função que o MDL (e a tabela de páginas) executa para o software (drivers): eles traduzem endereços para memória física.
Como esses espaços de endereço são endereçados separadamente, um driver não pode usar um ponteiro no espaço de endereçamento virtual para abordar um local na memória física e vice-versa. O motorista deve primeiro traduzir o endereço virtual para um endereço físico. Da mesma forma, um dispositivo não pode usar um endereço lógico para acessar diretamente a memória física. O dispositivo deve primeiro traduzir o endereço.
Uma HAL deve configurar objetos de adaptador que suportem DMA para uma ampla variedade de dispositivos DMA e barramentos de E/S em computadores diferentes. Por exemplo, a maioria dos controladores ISA DMA, dispositivos subordinados e dispositivos bus-master têm linhas de endereço insuficientes para acessar o espaço de endereçamento físico completo do sistema de quatro gigabytes de um processador de 32 bits (ou o endereço físico do sistema de 64 gigabytes de um processador x86 em execução no modo PAE de 36 bits). Por outro lado, os dispositivos PCI DMA geralmente têm linhas de endereço mais do que suficientes para acessar todo o espaço de endereçamento físico do sistema em processadores de 32 bits. Portanto, cada HAL fornece mapeamentos entre os intervalos de endereços lógicos que os dispositivos DMA podem acessar e os intervalos de endereços físicos de cada computador.
Cada objeto adaptador é associado a um ou mais registros de mapa, dependendo da quantidade de dados a serem transferidos e da quantidade de memória disponível. Durante as transferências DMA, o HAL utiliza cada registro de mapa para associar uma página lógica acessível pelo dispositivo a uma página de memória física acessada pela CPU. Na verdade, os registos de mapa fornecem suporte de distribuição/recolha para controladores que usam DMA, independentemente de os seus dispositivos terem capacidades de distribuição/recolha.
A figura a seguir ilustra esse mapeamento de endereço físico-lógico para o driver de um dispositivo ISA DMA que não tem recursos de dispersão/coleta.
A figura anterior mostra os seguintes tipos de mapeamentos:
Cada registro de mapa mapeia uma gama de endereços físicos (apontados por linhas sólidas) para endereços lógicos de baixa ordem (linhas pontilhadas) para um dispositivo ISA DMA.
Aqui, três registros de mapa são usados para alias de três intervalos paginados de dados na memória física do sistema para três intervalos de tamanho de página de endereços lógicos de baixa ordem para um dispositivo ISA DMA.
O dispositivo ISA usa os endereços lógicos mapeados para acessar a memória do sistema durante as operações DMA.
Para um dispositivo PCI DMA comparável, três registradores de mapa também seriam usados para três intervalos de dados do tamanho de uma página. No entanto, os intervalos de endereços lógicos mapeados não seriam necessariamente idênticos aos intervalos de endereços físicos correspondentes, de modo que um dispositivo PCI também usaria endereços lógicos para acessar a memória do sistema.
Cada entrada no MDL mapeia um local no espaço de endereçamento virtual para um endereço físico.
Observe a correspondência entre um registro de mapa e uma entrada virtual-para-física no MDL:
Cada registro de mapa e cada entrada virtual em um MDL mapeia no máximo uma página física completa de dados para uma operação de transferência DMA.
Cada registro de mapa e cada entrada virtual em um MDL pode mapear menos de uma página inteira de dados. Por exemplo, a entrada virtual inicial em um MDL pode ser mapeada para um deslocamento do limite da página física, conforme mostrado anteriormente na figura Mapeamentos de endereços físicos, lógicos e virtuais .
Cada registro de mapa e cada entrada virtual em um MDL mapeia, no mínimo, um byte.
Em um IRP solicitando uma operação de leitura ou gravação, cada entrada virtual no MDL opaco aos drivers em Irp-MdlAddress> representa um limite entre páginas na memória física do sistema para o buffer do utilizador. Da mesma forma, cada registo de mapa adicional necessário para uma única transferência DMA representa um limite de página no intervalo de endereços lógicos acessíveis pelo dispositivo, correspondentes à memória física do sistema.
Em cada plataforma Windows, cada objeto de adaptador tem um conjunto associado de um ou mais registos de mapa localizados em um endereço base específico da plataforma (e opaco para controladores). Do ponto de vista de um driver, a base de registo de mapeamento mostrada na figura que ilustra o mapeamento de endereços para um dispositivo ISA DMA exemplar é um manipulador para um conjunto de registos de mapeamento que podem ser registos de hardware em um chip, num controlador DMA do sistema ou num adaptador bus-master, ou até mesmo registos virtuais criados pelo HAL na memória do sistema.
O número de registros de mapa disponíveis com um objeto adaptador pode variar para diferentes dispositivos e plataformas Windows. Por exemplo, o HAL pode disponibilizar mais registros de mapa para drivers que usam o DMA do sistema em algumas plataformas do que em outras plataformas, porque os controladores DMA em diferentes plataformas Windows têm recursos diferentes.