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
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.