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

< Interrupções >


Noite de sábado, barzinho cheio, chopinho gelado na mão, você na sua mesa predileta examina o cardápio, indeciso no meio de um monte de tira-gostos enquanto o garçom impaciente espera o pedido batendo o pé e com aquele olhar gélido de quem tem mais o que fazer. Não mais que de repente, na mesa do canto, aquela gatinha espetacular (ou gatinho, pra Cora não me chamar de novo de machista) que você mal conhece manda em sua direção o sorriso trinta e sete, aquele que exige atenção imediata. Ao mesmo tempo, entra o flanelinha esbaforido para avisar que você esqueceu de trancar o carro. Naquele bar, você sabe, se perder o garçom das onze, só à meia noite pinta outro em sua mesa. O carro lá fora, aberto. E o sorriso trinta e sete já começando a se transmutar em um esgar de desprezo. Você só pode dar atenção a um destes trepidantes eventos de cada vez. E agora?

Bem, como diria o Fagundes, você decide. Continua firme com o cardápio ou interrompe a escolha? E, em interrompendo, faz o que? Tranca o carro ou agarra seu chopp e se manda pra mesa do canto, prenhe de amor pra dar? A decisão, evidentemente, vai ser calcada em prioridades. O que é mais premente nesse momento?

Pois é exatamente assim que sua máquina funciona: baseada em interrupções. Ela fica lá, fazendo seja o que for, mas atenta. Volta e meia aparece algum evento pedindo para ser atendido. A máquina interrompe o que está fazendo e atende. Depois, continua como se nada houvesse acontecido. Por vezes há mais de um evento ao mesmo tempo querendo interromper. A máquina avalia qual deles é o mais importante, ou seja, que interrupção tem maior prioridade, e os atende nessa ordem. E segue adiante.

No barzinho, há interrupções de todo tipo. Mas na máquina, só de dois: software e hardware. As do primeiro tipo nada mais são que uma instrução especial executada por um programa. Todos os chamados "serviços" do DOS são executados assim: o programa solicita a interrupção e o sistema operacional atende, ou seja, suspende o que está fazendo, executa a função solicitada e o programa segue faceiro. Estas só interessam a programadores. Mas as interrupções de hardware são diferentes. Elas são solicitadas por dispositivos e atendidas pela própria máquina. E interessam a todos nós.

Por que? Bem, alguns dispositivos precisam interromper o funcionamento da máquina para operações de entrada e saída. O que tem que ser feito de maneira ordenada, senão o sistema não pode estabelecer prioridades, não sabe a quem atender primeiro, a coisa vira bagunça e a máquina "pendura". Então, no momento da instalação do dispositivo, é preciso escolher uma interrupção e atribui-la a ele. Daí em diante tudo corre na mais perfeita ordem.

Como? Não entendeu o que eu quis dizer com "escolher uma interrupção"? Então explico: é que as interrupções de hardware são poucas. E cada uma tem um número para distinguir prioridades. Escolher uma interrupção significa, então, atribuir um número, ou uma prioridade, às solicitações de interrupção emitidas pelo dispositivo. Quando ele solicitar à máquina que interrompa o que está fazendo para atendê-lo, a máquina examina a prioridade da interrupção, verifica se há mais alguma sendo solicitada naquele momento, compara as prioridades e atende primeiro à maior. Do ponto de vista do funcionamento do sistema, é simples assim. Já o processo de escolha e ajuste da interrupção para um novo dispositivo, infelizmente, não é tão singelo. Veja porque:

Do ponto de vista da eletrônica (e, como sempre, de forma simplificada), a coisa funciona assim: um daqueles riscos dourados em sua placa mãe é a chamada "linha" de interrupção. Nos XT, ele liga todos os "slots" e alguns circuitos de sua placa mãe a um chip, chamado Interrupt Controller, ou controlador de interrupções (os AT, desde o 286 até os 486, usam dois chips iguais interligados). Quando um dispositivo, cuja placa controladora está espetada em um slot, deseja interromper o funcionamento da máquina, manda um sinal por essa linha. O controlador de interrupções identifica o dispositivo pelo número da interrupção que lhe foi atribuída, avalia a prioridade, escolhe a mais alta e avisa à CPU. Que, então, interrompe seus afazeres para atender.

O problema é que o controlador de interrupções só consegue manejar oito delas. Por isso, em um XT, só há oito interrupções, de IRQ0 a IRQ7 ("IRQ" é o acrônimo de "Interrupt Request", ou solicitação de interrupção). E no AT, com seus dois chips, dezesseis: IRQ0 a IRQ15. Parece bastante. Mas não é: primeiro, porque muitas delas já tem "dono" (a IRQ1, por exemplo, tanto no AT quanto no XT atende ao teclado, e não pode ser atribuída a nenhum outro dispositivo). Depois, porque cada vez há mais dispositivos que exigem uma interrupção. E, se você atribuir a mesma IRQ a dois dispositivos e usá-los ao mesmo tempo, o desastre é certo.

Se tudo o que há pendurado em sua máquina é uma impressora e um mouse, tudo bem: cada um usa sua interrupção e ainda sobra um monte delas. Mas se você começar a agregar ao seu micro penduricalhos que exijam o uso de interrupções, prepare-se para um jogo. Um interessante quebra cabeças, parecido com aquele do barqueiro que tinha que atravessar o rio com a cabra, o lobo e a couve e só cabiam dois de cada vez no barco.

Mas não se preocupe: semana que vem começaremos a examinar o assunto. Vamos ver que interrupções estão "amarradas" a que dispositivos, e quais as que estão disponíveis. Destas, veremos quais escolher para nossos dispositivos, e como atribui-las a eles. E, por fim, como proceder quando ocorrem os "conflitos de interrupção", ou seja, como evitar que dois dispositivos briguem pelo uso da mesma interrupção. Vai ser um bocado divertido, você vai ver.

PS: Amanhã, terça-feira 10, nova reunião do Grupo de Usuários do OS/2. Desta vez, obedecendo ao critério de revezamento, será na PUC, sala 508L. Como sempre, às dezenove horas.

B. Piropo