quinta-feira, 4 de julho de 2013

Pedido de interrupção (IRQ)

Começando do básico, os endereços de IRQ são interrupções de hardware, canais que os dispositivos podem utilizar para chamar a atenção do processador. Apesar de podermos utilizar muitos programas ao mesmo tempo, os processadores são capazes de fazer apenas uma coisa de cada vez. A multitarefa surge de um chaveamento muito rápido entre as aplicações abertas, dando a impressão de que todas realmente estão sendo executadas ao mesmo tempo.

Mas, o que fazer quando o processador está ocupado, processando qualquer coisa e você digita um carácter do teclado, o modem precisa transmitir dados para o processador, ou qualquer coisa do género? É neste ponto que entram os endereços de IRQ. Ao ser avisado através de qualquer um destes canais, o processador imediatamente pára qualquer coisa que esteja fazendo e dá atenção ao dispositivo, voltando ao trabalho logo depois.

Se não fossem pelos endereços de IRQ, o processador não seria capaz de ler as teclas digitadas no teclado, nem os clicks do rato, a sua conexão pararia toda vez que abrisse qualquer programa e assim por diante. Se você está sentado na cadeira agora, lendo este texto é graças a eles.

A má notícia é que um mesmo IRQ não pode ser compartilhado entre dois dispositivos e existem apenas 16 endereços disponíveis, que não podem ser expandidos, ou seja, temos que nos desenrascar com o que temos. (actualmente muitas placas PCI podem compartilhar o mesmo IRQ, mas na verdade apenas um dispositivo, o controlador PCI usa uma canal de interrupção, como veremos com detalhes mais adiante).

Mas, veja pelo lado bom, poderia ser pior e na verdade já foi mesmo. Lembra-se do XT? Aquele dinossauro de 16 bits que foi o avô de todos os PCs modernos? Ele tinha apenas 8 endereços de IRQ, numerados de 0 a 7. A explicação é simples, o XT usava o processador 8088, que apesar de ser internamente um processador de 16 bits, usava um barramento de apenas 8 bits para comunicar com os periféricos. Com isto, tinha apenas 8 IRQs.

Num XT, os 8 endereços disponíveis ficavam geralmente configurados da seguinte forma:

0 - Sinal de clock da placa mãe
1 - Teclado
2 - Livre
3 - COM 2
4 - COM 1
5 - Disco Rígido
6 - Drive de disquetes
7 - Porta paralela
 
O número do endereço de IRQ indica também a sua prioridade, começando do 0 que é o que tem a prioridade mais alta. Não é à toa que o IRQ 0 é ocupado pelo sinal de clock da placa mãe, pois é ele quem sincroniza o trabalho de todos os componentes, inclusive do processador. Logo depois vem o teclado, que ocupa o IRQ 1. Veja que o teclado é o dispositivo com um nível de prioridade mais alto, para evitar que as teclas digitadas se percam. Isso pode parecer desnecessário, já que um processador actual processa mil milhões de operações por segundo e dificilmente alguém digita mais do que 300 ou talvez 400 teclas por minuto, mas, na época do XT, as coisas não eram assim tão rápidas.

Em seguida vêm os demais periféricos, como as portas de série e a drive de disquetes. A IRQ2 ficava livre para a instalação de um periférico qualquer. Na verdade, na maioria das vezes o 5 também ficava livre, pois os discos rígidos não eram algo muito comum naquela época. Aliás, nem o rato usavam...

A partir do 286, houve uma evolução neste esquema, pois finalmente os PCs passaram a ter 16 endereços de IRQ, numerados de 0 a 15, como nos dias de hoje. Como quase todas as evoluções na família PC, foi preciso manter compatibilidade com o padrão anterior, para que as placas para XT pudessem funcionar nos PCs 286 em diante.

Assim, resolveram manter o controlador de IRQs original para que tudo continuasse funcionando da mesma maneira que antes e simplesmente adicionar um segundo controlador para obter os 8 novos endereços. Este segundo controlador passou a ser ligado no IRQ 2, que costumava ficar livre. 

Todos os pedidos de interrupção dos periféricos ligados aos endereços entre 8 e 15, controlados pelo segundo controlador, passam primeiro pelo IRQ 2, para só depois chegar ao processador. Isto é chamado de cascateamento de IRQs.

Dá para notar duas coisas neste esquema. Em primeiro lugar que o IRQ 2 não pode mais ser utilizado por nenhum periférico. Caso você jumpeie um modem para usar o IRQ 2, ele será remapeado para o IRQ 9. Ou seja, na prática, não temos 16 endereços de IRQ, mas apenas 15.

Em segundo lugar, como o segundo controlador está ligado ao IRQ 2, todas as placas que utilizarem os endereços de 8 a 15, terão prioridade sobre as que usarem os IRQs de 3 a 7, pois, do ponto de vista do processador, estão ligadas ao IRQ 2, que é por onde todos os pedidos chegam a ele:

in Manual de Hardware Completo
de Carlos E Marimoto


Sem comentários: