Um endereço de porta IO pertence à RAM?

2

Eu tenho usado o Linux (Ubuntu). Para se comunicar com dispositivos IO, os endereços de porta IO são usados. Por exemplo, 0x378 é um endereço para uma porta paralela.

Uma porta IO endereça um endereço RAM real? Se não for, onde reside?

    
por Usr1 19.02.2015 / 10:42

3 respostas

3

De volta à raiz do IBM PC que usava o microprocessador 8088, as salas de endereços separadas eram usadas para RAM e IO. O processador 8088 suportava 20 endereços de bit ao acessar RAM, mas usava apenas endereços de 16 bits para acesso IO. Havia um pino extra no processador para sinalizar se RAM ou IO estava endereçado.

Esse procedimento é chamado de E / S mapeada por porta e ainda está sendo usado pelos processadores X64 reais.

Portanto, o endereço 0x378 da porta paralela não apresenta um endereço na RAM.

    
por 19.02.2015 / 16:39
1

Vamos imaginar que uma CPU tenha apenas 4 pinos (bits) para endereçar dispositivos. Isso significa que ele pode selecionar até 16 dispositivos, de 0000 para 1111 .

Agora pense que endereços de RAM são de 0000 para 0111 ( 8 endereços, RAM muito limitada), deixa apenas outros 8 (de 1000 para 1111 ) para outros dispositivos (Disco Rígido, Porta Serial, Porta USB, Ethernet, Wifi, etc).

A mesma coisa acontece em uma escala muito grande em CPUs reais, eles têm um espaço para endereçar todo o hardware limitado por pinos físicos na CPU. Quando a CPU é iniciada, o BIOS reconhece o hardware instalado e atribui espaço de endereço para cada um deles.

Em sistemas mais antigos, como o DOS e o Windows 3.1, ele era geralmente criado manualmente por arquivos de configuração como autoexec. bat e config.sys ou dip-switches e jumpers diretamente no hardware. Os sistemas modernos fazem isso dinamicamente através de mecanismos como PCI e PCI Express .

    
por 19.02.2015 / 12:29
1

Isso não depende do sistema operacional, mas da CPU. E a resposta varia entre as famílias da CPU.

Em x86 (AMD / Intel), a resposta é NÃO. O exemplo de porta que você dá é típico para PCs x86, e você pode ver a partir do comprimento (16 bits) que não é um endereço RAM de 32 ou 64 bits. O x86 tem instruções especiais para se comunicar com portas IO, e essas instruções IO sabem que os endereços IO são de 16 bits.

Nos chips ARM, que você pode encontrar em seu telefone, os endereços de porta de entrada / saída estão no mesmo intervalo de endereços que a RAM (mas obviamente em endereços diferentes). Um chip ARM usa o mesmo tipo de instruções para ler portas IO e memória, portanto, em ambos os casos, você precisa de um endereço de 32 bits.

    
por 19.02.2015 / 17:02