Diferença entre o acesso mapeado pela porta e o mapeado pela memória?

17

Alguém pode explicar qual é a diferença entre o mapeamento de portas e o mapeamento de memória e o que ambos realizam? Por que há mapeamento de portas, como elas diferem na estrutura dos mapas de memória e há alguma razão pela qual muitas arquiteturas usam ambas? Além disso, o que é uma "porta" nesse sentido, porque porta pode significar coisas diferentes em contextos diferentes?

Exemplo: encaminhamento de porta, porta como terminal de comunicação, "mapeamento de porta".

Digamos que eu escreva OUT para a porta 400h (fictício; apenas por exemplo) (como em x86-64, etc.).

Para onde ou para onde estou escrevendo, se não estiver na memória? Como é uma "porta" mapeada e o que é nesse sentido?

    
por Varaquilex 18.01.2014 / 23:08

2 respostas

20

E / S mapeada em memória e E / S mapeada por porta são dois métodos complementares para E / S.

E / S Mapeada na Memória

Em sistemas mapeados na memória, o dispositivo de E / S é acessado como se fosse parte da memória. Os comandos Load e Store são executados para leitura e gravação em dispositivos de E / S, assim como são usados para a memória (o mapeamento da porta possui comandos especiais para E / S). Isso significa que os dispositivos de E / S usam o mesmo barramento de endereço que a memória, o que significa que a CPU pode se referir à memória ou ao dispositivo de E / S com base no valor do endereço. Essa abordagem requer isolamento no espaço de endereço: isto é, os endereços reservados para E / S não devem estar disponíveis para a memória física.

Abaixo está uma imagem de um sistema de computador simples e básico . O caso é muito mais complicado nos sistemas contemporâneos.

E/Smapeadaporporta

Deacordocom Wikipedia

Port-mapped I/O often uses a special class of CPU instructions specifically for performing I/O. This is found on Intel microprocessors, with the IN and OUT instructions. These instructions can read and write one to four bytes (outb, outw, outl) to an I/O device. I/O devices have a separate address space from general memory, either accomplished by an extra "I/O" pin on the CPU's physical interface, or an entire bus dedicated to I/O. Because the address space for I/O is isolated from that for main memory, this is sometimes referred to as isolated I/O.

Quanto às vantagens e desvantagens: como os dispositivos periféricos são mais lentos que a memória, o compartilhamento de barras de dados e endereços pode diminuir o acesso à memória. Por outro lado, pela simplicidade de E / S que os sistemas mapeados pela memória fornecem, a CPU requer menos lógica interna e isso ajuda na implementação de CPUs mais rápidas, mais baratas e que consomem menos energia. A lógica é semelhante à dos sistemas RISC: reduza a complexidade, obtenha um sistema mais dedicado e robusto, que é bastante útil para sistemas embarcados, por exemplo.

Pelo contrário (novamente da Wiki):

Port-mapped I/O instructions are often very limited, often providing only for simple load and store operations between CPU registers and I/O ports, so that, for example, to add a constant to a port-mapped device register would require three instructions: read the port to a CPU register, add the constant to the CPU register, and write the result back to the port.

Eu recomendo strongmente que você leia esse artigo wiki para mais informações.

Para responder a uma das suas perguntas:

What or where am I writing to if it's not in memory?

Você está gravando nos registros da interface de E / S através do barramento de dados, que depois (quando pronto) envia os dados para o dispositivo de E / S real. Abaixo está uma imagem de uma interface de dispositivo de E / S de exemplo.

    
por 18.01.2014 / 23:46
1

Na E / S Mapeada na Memória (simplesmente MMIO), os dispositivos são acessados por meio de instruções que, na verdade, são destinadas a acessar a memória. Cada dispositivo recebe determinados endereços de memória. No entanto, quando você tenta ler ou gravar nessa parte da memória, um determinado dispositivo (provavelmente o northbridge) apenas o envia para o dispositivo relacionado. Mesmo que o computador não tenha memória suficiente para tal endereço (como os endereços MMIO são geralmente muito altos), não importa como a memória física (que é aquela que você vê quando olha para a placa-mãe, aquela conhecida como RAM ) não está nem relacionado. Se você tiver RAM suficiente para o endereço, ele será mapeado para um número maior de não-E / S ou apenas um significado perdido que você não poderá ler ou gravar nele.

E / S mapeada em porta (simplesmente PMIO) é muito diferente. Você tem instruções diferentes usadas para ler e gravar em portas. Há um espaço de endereço de porta exatamente como o espaço de endereço de memória, onde os endereços são endereços de E / S que realmente se comunicam com os dispositivos ou são apenas inválidos. O PMIO pode ser pensado essencialmente como um MMIO com um espaço de endereço de memória separado apenas para E / S.

    
por 27.05.2016 / 19:50