Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
08/06/1998

< Portas Seriais II: Portas Lógicas >


Do ponto de vista do usuário, "dados" podem assumir infinitos formatos, desde os sons de uma melodia até os pontos coloridos de uma figura. Mas, para o computador, aparecem sempre sob a forma de números, ou "dígitos". Portanto, para serem processados, os dados devem ser codificados através de uma técnica denominada "digitalização", que os exprime como quantidades numéricas. E como computadores somente "entendem" os números do sistema numérico de base dois, ou sistema binário (que usa apenas os algarismos "zero" e "um"), além de digitalizados os dados devem ser convertidos para este sistema. Isto costuma ser tratado como um dos mistérios da informática, mas é uma coisa muito simples: nos acostumamos com o sistema decimal, de base dez, mas todo número pode ser expresso em qualquer sistema numérico, seja qual for a base. Basta converter.

Por razões ligadas à padronização, os dados numéricos processados pelos computadores são sempre agrupados em conjuntos de oito dígitos binários. Ao "digito binário" batizou-se de "bit". E o conjunto de oito deles denominou-se "byte". Então, computadores apenas manipulam dados expressos sob a forma de bytes. O que simplifica um bocado nossa faina: agora sabemos que a única coisa a cruzar nossas "portas" são bytes.

O microprocessador processa apenas os valores contidos em seus registradores. Portanto, se queremos que um dado seja processado, é preciso pô-lo lá. Um registrador é uma posição de memória especial, de acesso muito rápido por estar situada dentro do próprio microprocessador. As CPUs modernas, como o Pentium, usam registradores de 64 bits (onde cabem oito bytes lado a lado). Então, a forma mais simples de fornecer dados ao processador seria fazer com que os dispositivos transferissem os bytes diretamente para seus registradores. Infelizmente isto é impossível: microprocessadores são figuras tão importantes na hierarquia da informática que não "falam" com qualquer um e jamais se rebaixariam ao ponto de dar atenção a um reles dispositivo. Ele apenas se comunicam com a memória (outra forma de dizer isto, talvez mais a gosto dos puristas, seria informar que por razões ligadas à sua arquitetura interna, os microprocessadores apenas podem trocar dados com a memória). Assim, para enviar um byte ao microprocessador, primeiro o dispositivo o deposita na memória. Depois, respeitosamente, emite uma "requisição de interrupção" ("Interrupt Request", ou "IRQ") para avisar ao microprocessador que o dado foi enviado. Mais tarde, quando achar que pode dar atenção ao dispositivo, o majestático microprocessador interrompe seus afazeres, localiza o dado na memória e o transfere para um de seus registradores.

Para que este método funcione, é necessário cumprir duas condições: o microprocessador deve saber quem (que dispositivo) enviou o dado e onde (em que lugar da memória) ele foi depositado.

A primeira condição é satisfeita reconhecendo a interrupção. Nos modernos PCs há dezesseis delas, numeradas de zero a quinze, cada uma atribuída a um dispositivo. Assim, ao atender a uma requisição de interrupção, o microprocessador verifica seu número e através dele identifica quem o interrompeu. Por exemplo: meu modem usa a IRQ3. Toda a vez que o microprocessador de minha máquina recebe uma requisição de interrupção e constata que seu número é 3, sabe que ela foi originada pelo modem.

A segunda condição é satisfeita padronizando os locais da memória onde os bytes trocados com o microprocessador são depositados. Cada posição de memória pode abrigar um byte e é identificada por um número inconfundível, seu "endereço". Nos micros da linha PC, uma região de 1024 posições é dedicada exclusivamente a este fim. Cada uma delas funciona como uma espécie de "caixa postal". Todo dispositivo tem a sua, uma posição de memória só dele, onde são depositados os bytes trocados com a CPU. Assim, ao receber a requisição de interrupção de um dispositivo, a CPU sabe que há um byte à sua espera na "caixa postal" respectiva, ou seja, na posição de memória usada por aquele dispositivo. Como conhece o endereço que corresponde àquele dispositivo, vai até lá e transfere o dado para o registrador. Da mesma forma, quando a CPU precisa enviar um dado para o dispositivo, deposita o byte naquele mesmo endereço e "avisa" ao dispositivo, que vai buscá-lo em sua "caixa postal".

São estas "caixas postais" que denominamos "Portas". Teoricamente, haveria 1024 delas, mas nem todas são usadas. Além disto, com o fim de receber comandos e informar à CPU sobre seu status operacional, alguns dispositivos reservam para si posições de memória adicionais além daquela utilizada para a transferência de dados.

Pronto, de teoria já basta: o que vimos até agora já nos permite derivar uma definição mais consistente para "porta": do ponto de vista lógico, uma porta nada mais é que uma posição de memória identificada por seu endereço e usada para troca de informações entre a CPU e dispositivos de entrada e saída.

B. Piropo