Registros de Mapa

Os drivers que executam o AMD usam três espaços de endereço diferentes, conforme mostrado na figura a seguir.

mapeamentos de endereço físico, lógico e virtual.

Em qualquer plataforma Windows, um driver tem acesso ao espaço de endereço virtual completo com suporte do 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 em endereços no espaço de endereço físico do sistema usando uma tabela de páginas. Cada PTE (entrada de tabela de página) 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 de 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ço lógico (dispositivo). Cada HAL usa registros de mapa para converter um dispositivo ou endereço lógico em 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 convertem endereços para memória física.

Como esses espaços de endereço são resolvidos separadamente, um driver não pode usar um ponteiro no espaço de endereço virtual para abordar um local na memória física e vice-versa. O driver 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.

Um HAL deve configurar objetos de adaptador que dão suporte ao DMA para uma ampla variedade de dispositivos DMA e barramentos de E/S em computadores diferentes. Por exemplo, a maioria dos controladores de DMA ISA, dispositivos subordinados e dispositivos de barramento master têm linhas de endereço insuficientes para acessar o espaço de endereço 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 DMA PCI geralmente têm linhas de endereço mais do que suficientes para acessar o espaço de endereço físico completo 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 intervalos de endereços físicos de cada computador.

Cada objeto do adaptador está 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 transferências de DMA, o HAL usa cada registro de mapa para alias de uma página lógica acessível pelo dispositivo para uma página de memória física na CPU. Na verdade, os registros de mapa fornecem suporte de dispersão/coleta para drivers que usam DMA, independentemente de seus dispositivos terem recursos de dispersão/coleta.

A figura a seguir ilustra esse mapeamento de endereço físico para lógico para o driver de um dispositivo ISA DMA que não tem recursos de dispersão/coleta.

mapeamento de endereço para um dispositivo de exemplo isa dma.

A figura anterior mostra os seguintes tipos de mapeamentos:

  1. Cada registro de mapa mapeia um intervalo 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.

  2. O dispositivo ISA usa os endereços lógicos mapeados para acessar a memória do sistema durante as operações de DMA.

    Para um dispositivo DMA PCI comparável, três registros de mapa também seriam usados para três intervalos de dados de tamanho de 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, portanto, um dispositivo PCI também usaria endereços lógicos para acessar a memória do sistema.

  3. Cada entrada no MDL mapeia um local no espaço de endereço 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 de 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ço Físico, Lógico e Virtual .

  • Cada registro de mapa e cada entrada virtual em um MDL mapeia, no mínimo, um byte.

Em um IRP que solicita uma operação de leitura ou gravação, cada entrada virtual no MDL opaco para drivers em Irp-MdlAddress> representa um limite de página na memória física do sistema para um buffer de usuário. Da mesma forma, cada registro de mapa adicional necessário para uma única transferência de DMA representa um limite de página no intervalo de endereços lógicos acessível pelo dispositivo com alias da memória física do sistema.

Em cada plataforma Windows, cada objeto de adaptador tem um conjunto associado de um ou mais registros de mapa localizados em um endereço base específico da plataforma (e opaco para drivers). Do ponto de vista de um driver, a base de registro de mapa mostrada na figura que ilustra o mapeamento de endereços para um dispositivo DEMA ISA de exemplo é um identificador para um conjunto de registros de mapa que podem ser registros de hardware em um chip, em um controlador de DMA do sistema ou em um adaptador de master de barramento ou que podem até ser registros virtuais criados por HAL na memória do sistema.

O número de registros de mapa disponíveis com um objeto de adaptador pode variar para diferentes dispositivos e plataformas Windows. Por exemplo, o HAL pode disponibilizar mais registros de mapa para drivers que usam DMA do sistema em algumas plataformas do que em outras plataformas porque os controladores de DMA em diferentes plataformas Windows têm recursos diferentes.