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 rodar 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 os aplicativos abertos, dando a impressão de que todos realmente estão sendo executados ao mesmo tempo.

Mas, o que fazer quando o processador está ocupado, processando qualquer coisa e você digita um caracter 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 mouse, 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 virar com o que temos. (atualmente 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-se 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 atual processa bilhõ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 seriais e o 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 HDs não eram algo muito comum naquela época. Aliás, nem mouse usavam… 🙂

Apartir 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:

Num PC atual, os endereços de IRQ, esta é a configuração de endereços mais comum:

IRQ 0 – Sinal de clock da placa mãe (fixo)
IRQ 1 – Teclado (fixo)
IRQ 2 – Cascateador de IRQs (fixo)
IRQ 3 – Porta serial 2
IRQ 4 – Porta serial 1
IRQ 5 – Livre
IRQ 6 – Drive de disquetes
IRQ 7 – Porta paralela (impressora)
IRQ 8 – Relógio do CMOS (fixo)
IRQ 9 – Placa de vídeo
IRQ 10 – Livre
IRQ 11 – Controlador USB
IRQ 12 – Porta PS/2
IRQ 13 – Coprocessador aritmético
IRQ 14 – IDE Primária
IRQ 15 – IDE Secundária

Veja que com apenas a placa de vídeo e os dispositivos da placa mãe, já ficamos com apenas dois endereços de IRQ disponíveis. Ao adicionar uma placa de som e um modem, todos os endereços estariam ocupados, não dando mais margem de expansão para uma placa de rede ou uma placa SCSI por exemplo. A solução seria desabilitar dispositivos que não estivessem sendo usados, como por exemplo, a segunda porta serial, a porta PS/2, o controlador USB, etc. Mas, de qualquer forma, logo chegaria o ponto em que não haveria mais nada a ser desabilitado.

Este problema começou a tornar-se cada vez mais evidente, à medida que mais e mais periféricos começaram a tornar-se padrão. Os únicos periféricos “de fábrica” em um 286 eram o monitor e o teclado, todo o restante era opcional. Hoje em dia, é raro encontrar um PC à venda sem pelo menos placa de som, modem e CD-ROM, enquanto as placas de rede também estão tornando-se cada vez mais comuns. Isso sem falar nas placas de captura de vídeo, da segunda placa de rede, necessária para compartilhar a conexão de banda larga, etc.

Felizmente, pensaram neste problema quando desenvolveram o barramento PCI, incluindo o recurso de PCI Steering, que permite que dois, ou mais periféricos PCI compartilhem o mesmo endereço de IRQ. Neste caso, o controlador PCI passa a atuar como uma ponte entre os periféricos e o processador. Ele recebe todos os pedidos de interrupção, os encaminha para o processador e, ao receber as respostas, novamente os encaminha para os dispositivos corretos. Como o controlador é o único diretamente conectado ao processador é possível ocupar apenas um endereço de IRQ.

Nem todos os dispositivos PCI suportam trabalhar desta maneira, mas a grande maioria funciona sem problemas. Veja que screenshot abaixo, temos as duas placas de rede e a placa de som compartilhando o IRQ 9:

Além do barramento PCI, outros barramentos usados atualmente permitem compartilhar um único IRQ entre vários periféricos. O USB é um bom exemplo, o controlador ocupa um único IRQ, que é compartilhado entre todas as portas USB e todos os dispositivos conectados a elas. Mesmo que a sua placa mãe tenha 6 portas USB e você utilize todas, terá ocupado apenas um endereço.

Caso você utilizasse apenas periféricos USB, mouse, impressora, scanner, etc. poderia desabilitar todas as portas de legado da sua placa mãe: as duas seriais, a paralela e a PS/2. Seriam 4 endereços de IRQ livre.

Outro exemplo são as controladoras SCSI, onde é possível conectar até 15 dispositivos, entre HDs, CD-ROMs, gravadores, etc. em troca de um único endereço de IRQ.

As portas IDE da placa mãe consomem dois IRQs, já que temos duas portas. Mas, caso você tenha apenas um HD, e não pretenda usar a IDE secundária, sempre existe a possibilidade de desabilitá-la no setup. Todas estas opções aparecem na sessão “Integrated Peripherals”.

Com todas estas facilidades, fica fácil ter um sistema com vários IRQs livres, como no exemplo abaixo:

IRQ 0 – Sinal de clock da placa mãe (fixo)
IRQ 1 – Teclado (fixo)
IRQ 2 – Cascateador de IRQs (fixo)
IRQ 3 – Livre (serial 2 desativada)
IRQ 4 – Modem
IRQ 5 – Livre
IRQ 6 – Drive de disquetes
IRQ 7 – Livre (porta paralela desativada)
IRQ 8 – Relógio do CMOS (fixo)
IRQ 9 – Placa de som, placa de rede (1), placa de rede (2)
IRQ 10 – Placa de vídeo
IRQ 11 – Controlador USB (Mouse, impressora e scanner)
IRQ 12 – Porta PS/2
IRQ 13 – Coprocessador aritmético
IRQ 14 – IDE Primária
IRQ 15 – Livre (IDE Secundária desativada)

Todos estes dispositivos e ainda 4 endereços de IRQ livres não soam nada mal. Na verdade, a escassez de endereços de IRQ é um problema muito menor hoje em dia do que já foi no passado. Antigamente era preciso configurar manualmente o endereço a ser usado por cada placa e não havia como compartilhar um IRQ entre dois periféricos como temos hoje. Um jumper no lugar errado era o suficiente para o modem ou a placa de som entrarem em conflito com alguém e pararem de funcionar.

Hoje em dia, todas as placas novas são PCI, o que naturalmente significa que são plug and play. Basta espeta-las para que o BIOS atribua automaticamente um endereço. Usando apenas placas PCI, você terá conflitos apenas caso realmente todos os IRQs estejam ocupados.

Mas nem tudo está resolvido. Apesar dos conflitos ao se usar apenas placas PCI sejam raríssimos, ainda estão em uso muitos PCs antigos com placas ISA. É aí que as coisas podem complicar um pouco.

Existem dois tipos de placas ISA, as que são plug-and-play e as placas de legado. As primeiras, que começaram a aparecer ainda na época do 486, já são configuradas automaticamente pelo BIOS, mas não são capazes de compartilhar IRQs como as placas PCI. O plug-and-play destas placas ISA não é tão confiável quanto o das placas PCI, elas podem entrar em conflito mesmo existindo IRQs livres. Neste caso, você pode alterar manualmente o endereço a ser usado pela placa através do gerenciador de dispositivos do Windows, basta clicar sobre o ícone do dispositivo, acessar as propriedades e abrir a guia de recursos.

As placas ISA plug-and-play são uma espécie de meio termo. Além delas existem as placas ISA de legado ou legacy ISA, onde é preciso configurar os endereços de IRQ manualmente, através de jumpers, ou então usando um software que acompanha a placa (o que é muito comum em placas de rede ISA). Uma vez configurada para usar um endereço, a placa irá entrar em conflito com qualquer dispositivo que tente usa-lo. Para complicar, o BIOS não enxerga as placas de legado, podendo atribuir o mesmo endereço para alguma placa plug-and-play, causando o conflito.

Para evitar este problema, é preciso reservar manualmente os endereços de IRQ e DMA ocupados por periféricos ISA de legado através da sessão “PNP/PCI Setup” do CMOS Setup. Se, por exemplo, você tiver um modem jumpeado para utilizar o IRQ 7 você deve marca-lo com a opção “Legacy ISA”. Na foto abaixo temos a sessão “PnP/PCI” do Setup de uma placa mãe com BIOS Award. Veja que cada endereço de IRQ pode ser configurado separadamente:



A opção defaut é não reservar os endereços, deixando-os livres para o uso de qualquer dispositivo PnP; para reservar um endereço, basta alterar a opção. Lembre-se de reservar apenas os endereços necessários, pois ao reservar um endereço ele deixa de estar disponível para as placas Plug-and-play. Se reservar muitos endereços você terá problemas de conflitos mesmo com vários IRQs livres.

Existe mais um ponto interessante sobre as placas ISA, que é o fato de existirem tanto placas ISA de 8 bits, quanto placas de 16 bits. É fácil diferencia-las, pois as placas de 8 bits utilizam apenas a primeira parte do encaixe. As placas de 8 bits utilizam exatamente o mesmo barramento que era usado no XT, o que significa que estas placas enxergam apenas os IRQs de 0 a 7. Este é o caso por exemplo de muitos modems de 28.8 e 33.6 da US Robotics. Neste caso não existe muito segredo, caso todos os seus IRQs de 0 a 7 já estejam ocupados, o jeito será mudar o endereço de um dos dispositivos, dando lugar ao modem. Você pode simplesmente reservar no Setup o endereço que esteja sendo usado por uma placa Plug-and-play que esteja instalada, assim da próxima vez que iniciar o micro, o BIOS se encarregará de dar outro endereço para ela, deixando o modem em paz.

Note que toda a configuração de endereços feita perlo BIOS é armazenado numa área do CMOS, chamado ESCD. Caso or exemplo o BIOS não reconheça uma placa recém instalada, mesmo que ela seja plug-and-play e existam endereços livres, caso ele insista em assinar o mesmo endereço para duas placas que não suportam o PCI Steering, causando um conflito , ou qualquer outro problema do gênero, existe a opção de limpar o ESCD. Isto fará com que o BIOS precise reconfigurar o endereços de todas as placas, partindo do zero.

Para limpar o ESCD, basta acessar o Setup e ativar a opção “Force Update ESCD” ou “Reset Configuration data”. Não se preocupe, pois não será preciso reinstalar as placas, apenas podem ser alterados os IRQs usados por algumas.

Conseguindo mais IRQs: Com raras exceções, todos os dispositivos do micro precisam enviar informações ao processador. Para isto, cada um precisa de um canal de IRQ, que funciona como uma espécie de campainha, que o dispositivo “toca” para chamar a atenção do processador para sí. A má notícia é que qualquer micro PC possui apenas 16 IRQs disponíveis, 15 na verdade, já que o IRQ 0 é usado pelo sinal de clock da placa mãe, sem o qual computador nenhum poderia funcionar.

Num PC básico, com modem, placa de som e impressora, as IRQs disponíveis são suficientes, aliás nestes micros ainda costumam sobrar um ou dois IRQs disponíveis. Qualquer conflito de hardware neste caso não surgirá por falta de IRQs, mas por falta de experiência do usuário que não soube configurar tudo direito.

O problema é que hoje em dia usamos cada vez mais acessórios, como placas de captura de vídeo, placas de rede, placa SCSI, RAID ou ambas, dispositivos USB, o cradle de Palm, ou outros dispositivos que ocupem portas seriais, vários HDs, e por aí vai, a lista de diapositivos possíveis é quase ilimitada.

Porém, continuamos com apenas as mesmas 16 (ou 15) IRQs disponíveis, fazendo com que num PC mais equipado muitas vezes o usuário se depare com uma falta crônica de endereços IRQ para instalar dispositivos. E, sem um IRQ disponível, nada da nova placa funcionar.

Infelizmente, não é possível instalar mais IRQs, aliás o XT tinha apenas 8 IRQs (de 0 a 7), as 16 que temos atualmente surgiram graças a uma quase gambiarra feita apartir do 286, um cascateador de IRQs, que ocupa a IRQ 2 e permite acessar as IRQs de 8 a 15, santa idéia 🙂

Se as palavras de ordem hoje em dia são reciclar, economizar, racionar, etc. vamos aprender a racionalizar o uso das IRQs disponíveis para conseguir conectar todos os periféricos desejados.

Vamos começar montando um PC imaginário bem simples: apenas a placa mãe, memória, processador, HD, disquete, CD-ROM, placa de vídeo, monitor, teclado e mouse PS/2.

Mantendo todas as configurações defaut do Setup (presumindo que seja uma placa mãe razoavelmente atual),e deixando o Windows detectar sozinho todos os dispositivos, sem alterar nada, teremos provavelmente o seguinte cenário:

IRQ 0 – Sinal de clock da placa mãe (fixo)
IRQ 1 – Teclado (fixo)
IRQ 2 – Cascateador de IRQs (fixo)
IRQ 3 – Porta serial 2
IRQ 4 – Porta serial 1
IRQ 5 – Livre
IRQ 6 – Drive de disquetes
IRQ 7 – Porta paralela (impressora)
IRQ 8 – Relógio do CMOS (fixo)
IRQ 9 – Placa de vídeo
IRQ 10 – Livre
IRQ 11 – Controlador USB
IRQ 12 – Porta PS/2
IRQ 13 – Coprocessador aritmético
IRQ 14 – IDE Primária
IRQ 15 – IDE Secundária

Só com a placa de vídeo o nosso PC já está com apenas duas IRQs livres. Instalando uma placa de som e um modem, ocuparemos ambas, ficando sem um único IRQ disponível. Apartir daqui, para instalar novos dispositivos, teremos que racionalizar os endereços, desativando dispositivos que não são necessários.

Por exemplo, mantendo a configuração que temos agora (placa mãe, memória, processador, HD, disquete, CD-ROM, placa de vídeo, monitor, teclado, mouse PS/2, placa de som e modem) poderíamos desabilitar vários dispositivos que estão ocupando endereços de IRQ:

* Ambas as portas serias : estamos usando um mouse PS/2, e por enquanto não temos nada que necessite de uma porta serial.

* Porta paralela : Por enquanto não temos impressora scanner ou qualquer outro dispositivo que use a porta paralela

* USB : Não temos nenhum periférico USB

Com apenas uma rápida inspeção, já foi possível livrar quatro endereços que antes estavam ocupados. Todos estes dispositivos podem ser desativados através do Setup. Caso você não tenha intimidade com ele, poderá encontrar um tutorial sobre a configuração do Setup na área de tutoriais do site.

Vamos então ao próximo problema:

Imagine que agora iremos adicionar a este PC uma placa de rede, uma placa SCSI, impressora, scanner USB e uma placa de captura de vídeo.

Em primeiro lugar, teríamos que reativar a porta paralela, por causa da impressora, e a porta USB, por causa do scanner. A placa de rede e a placa SCSI consumiriam então os outros dois IRQs que estavam livres. Estaríamos então novamente sem endereços livres, ainda faltando instalar a placa de captura de vídeo.

Neste caso seria preciso usar um pouco de criatividade, existiriam várias opções: o mouse, que está ocupando a porta PS/2 poderia ser substituído por um USB, permitindo desativar a porta PS/2 e livrar o IRQ 12 usado por ela, desativar a porta do drive de disquetes (ficando sem, ou substituindo-o por um USB), livrando o IRQ 6 ocupado por ela, desativar a IDE secundária da placa mãe, instalando o CD-ROM como slave do HD (livrando o IRQ 15) e assim por diante. Lembre-se que existem no mercado adaptadores que permitem transformar uma porta USB numa porta paralela, caso usássemos um destes, seria possível desabilitar também a porta paralela.

Fazendo isto, ainda seria possível instalar vários outros periféricos novos, até novamente ficássemos sem endereços de IRQ. Neste caso, provavelmente já estaríamos sem slots PCI ou ISA livres e não poderíamos instalar mais nada de qualquer forma 🙂

PCI IRQ Activated By: Com certeza você já deve ter ouvido dizer que em alguns casos duas ou mais placas PCI podem compartilhar o mesmo endereço de IRQ, mas caso esteja em dúvida sobre o por que disco acontecer em alguns micros e em outros não, esta opção do Setup, encontrada na sessão “PCI/Plug and Play Setup” de muitas placas mãe pode ser a resposta.

Apesar de desde as suas primeiras versões o barramento PCI permitir o compartilhamento de IRQs, os primeiros periféricos PCI não eram compatíveis com, o recurso. Por outro lado, quase todos os periféricos PCI atuais o são.

Esta opção possui duas alternativas, “Edge” e “Level“. Caso você esteja configurando o Setup de um micro antigo, montado a 2 ou 3 anos, então o recomendável é manter a opção em Edge, pois provavelmente o PC terá placas PCI incompatíveis com o recurso. Edge desativa o compartilhamento de IRQs, o que irá evitar problemas.

Porém, caso você esteja configurando um PC atual escolha a opção Level, que habilita o compartilhamento de IRQs.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X