Sítio do Piropo

B. Piropo

< PC@World >
Volte

10/1997

Um Severo Professor

 

Se você está acompanhando regularmente esta coluna já sabe que por mais complexo que pareça, um computador não passa de um conjunto de dispositivos de entrada que alimenta uma CPU com dados que são por ela processados e devolvidos ao usuário através dos dispositivos de saída (e se não tem lido as colunas ultimamente, nada impede que se ponha em dia agora mesmo: todas elas estão disponíveis aí no pé da página através dos links "Artigos anteriores"). Os dados são transportados sob a forma de impulsos elétricos que percorrem um conjunto de condutores denominado "barramento" e armazenados em discos para utilização posterior, ou na memória, para utilização imediata. A coisa é simples assim.

Mas provavelmente você há de estar matutando como será que isto funciona na prática. Como a CPU "sabe" que um dispositivo de entrada está pronto para enviar dados para serem processados? Como ela procede para receber estes dados? Imagine que enquanto seu computador está recebendo um arquivo através do modem você premiu uma tecla, provocando uma situação em que dois dispositivos de entrada, teclado e modem, tentam enviar dados para a CPU simultaneamente. Qual deles será atendido primeiro?

Para compreender como as coisas funcionam, vamos apelar para uma analogia. Imagine que, em uma sala de aula, o professor está explicando um tópico particularmente instigante que desperta grande interesse nos alunos. Naturalmente, se nenhuma providência for tomada, a tendência é que em alguns momentos se forme uma tremenda confusão com a algaravia provocada por diversos alunos tentando interromper a aula simultaneamente para solicitar o esclarecimento de um ou outro ponto mais complexo. Pois há séculos que os bons mestres sabem lidar com esta situação (os maus simplesmente não permitem que sua majestática aula seja interrompida): o aluno deseja interromper? Pois levante a mão em silêncio. O mestre continua a explicação por alguns momentos até que a frase seja concluída ou o conceito seja fechado e então interrompe a aula. Se mais de um aluno estiver solicitando atenção, o mestre usa seu tirocínio para escolher qual será atendido primeiro e ele então expõe sua dúvida. Os demais são atendidos um de cada vez e a aula prossegue sem tumulto.

Agora imagine que um professor mais severo e um tanto maníaco por organização estabeleça o seguinte procedimento: no início do curso é instalado na sala de aula um conjunto de escaninhos, um para cada aluno. Que, por sua vez, recebe um número de inscrição. Quando o aluno deseja perguntar algo ao mestre, escreve sua dúvida em um pedaço de papel, o deposita silenciosamente em seu próprio escaninho, volta para seu lugar e levanta uma placa com seu número de inscrição. O mestre prossegue a aula até o ponto em que julgar que pode interrompê-la, quando então verifica quais alunos estão exibindo a placa solicitando interrupção. Seleciona um deles para ser atendido, verifica seu número para saber a localização de seu escaninho, vai até lá e lê a pergunta. Se a resposta for apenas do interesse daquele aluno, ele a escreve em outro pedaço de papel e o deposita no escaninho do aluno, que toma então conhecimento de seu conteúdo. Em seguida verifica se ainda há placas levantadas e as atende até que a última solicitação de interrupção tenha sido satisfeita, quando então dá prosseguimento à aula. O método se apoia em dois recursos básicos, ambos exclusivos para cada aluno: uma solicitação de interrupção (o aluno levantando a placa com seu número) e um canal de comunicação (o escaninho de cada aluno, através do qual as informações são transferidas). Evidentemente, do ponto de vista didático, este procedimento seria um desastre. Mas do ponto de vista do computador, é uma maravilha. Porque é exatamente assim que as coisas funcionam.

A CPU é o rígido e severo mestre. Os alunos são os dispositivos de entrada e saída. Ao serem instalados, cada um recebe seu "número de inscrição", ou sua requisição de interrupção, e seu "escaninho", ou seu trecho de memória para se comunicar com a CPU, identificado pelo endereço de memória de seu o primeiro byte. Isto é feito porque os dispositivos de entrada e saída são muitíssimo mais lentos que a CPU e tornariam o processamento muito demorado caso trocassem dados diretamente com ela. A comunicação entre CPU e dispositivos se dá então através destes trechos de memória, os "escaninhos" da metafórica sala de aula. Agora imagine que um modem precisa transferir alguns dados à CPU para que sejam processados. Enquanto o modem está recebendo os dados, a CPU está ocupada com outras coisas (como por exemplo "refrescar" o conteúdo da tela, atualizar o relógio interno do micro e, ça va sens dire, obedecer seqüencialmente às instruções do programa que está sendo executado naquele momento). O modem, então, vai escrevendo os dados em seu escaninho, um trecho de memória usado apenas por ele, identificado pelo seu endereço inicial conhecido como "endereço de entrada e saída" ("input/output address", ou I/O address). Quando termina, levanta a placa com seu número, ou seja, emite uma requisição de interrupção ("interrupt request", ou IRQ) e espera.

Enquanto executa suas tarefas rotineiras, a CPU consulta freqüente e regularmente o controlador de interrupções ("Interrupt controller"), ou seja, verifica se algum dispositivo de entrada está com a placa levantada. Se não, prossegue em sua faina. Se sim, pára o que está fazendo e atende a interrupção. Para fazê-lo, primeiro ela identifica o dispositivo através do número da interrupção. Por exemplo: o drive de disquete usa a interrupção número 6 (conhecida por IRQ6) enquanto o teclado usa a IRQ1. Em seguida consulta uma tabela para verificar onde fica o "escaninho" usado pelo dispositivo, ou seja, qual é seu endereço de I/O, e lê os dados contidos naquele trecho de memória para processá-los. Isto é feito milhares de vezes a cada segundo, de modo que as interrupções parecem ser atendidas imediatamente. Mas não são: há todo um complicado processo decisório envolvido, que inclui por exemplo resolver quem será atendido primeiro, já que alguns dispositivos como o relógio interno têm prioridade, por razões evidentes.

Os dados são enviados para os dispositivos de saída da mesma maneira: a CPU os escreve no trecho de memória correspondente ao dispositivo (seu "escaninho" ou endereço de I/O) que os lê e apresenta ao usuário. E a CPU jamais confunde dispositivos, já que cada um usa um número de interrupção diferente e um diferente endereço de I/O.

Pois é assim, como severo mestre que obedece a rígidos critérios atendendo a uma interrupção de cada vez, que a CPU comanda o funcionamento de nossos micros.

 

B. Piropo