fbpx IRQs no Linux: Como Funcionam as Interrupções de Hardware | Certificação Linux

Tratamento de IRQs no Linux

📅 06/03/2019 ⏱ 6 min ✍️ Uira Ribeiro
Linuxhow-to
Tratamento de IRQs no Linux
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponível no
Google Play
Disponível na
App Store

As Requisições de Interrupção (IRQ) são chamadas que os dispositivos podem fazer para requerer atenção especial do processador.

A maioria dos computadores oferece apenas 16 interrupções de hardware. Pode parecer pouco para as modernas configurações com os mais diferentes dispositivos. Felizmente os IRQs podem ser compartilhados.

O mecanismo de tratamento das interrupções faz com que a CPU esteja atenta aos eventos externos à sequência de instruções que ela está executando, para quando for necessária uma quebra do processamento normal para atender a uma outra solicitação.

Em grandes sistemas multiusuário, uma constante rajada de interrupções é direcionada ao processador.

Respostas rápidas a essas interrupções são essenciais para manter os recursos do sistema bem utilizados, e para prover tempos de resposta aceitáveis pelos usuários.

É importante saber que estes recursos são limitados e precisam ser gerenciados para que conflitos entre os dispositivos sejam evitados.

Desta forma, os sistemas operacionais reagem a eventos que representam as solicitações de serviços.

Por exemplo, se uma aplicação necessita da leitura de um arquivo, ela faz a solicitação a uma função executada pelo sistema operacional.

Este irá acessar o controlador do periférico e requisitar a transferência dos dados para o endereço de memória informado no pedido do serviço.

O controlador do periférico ao terminar avisa o processador através de uma requisição de interrupção que fará com que o sistema operacional execute uma rotina para seu tratamento.

As interrupções podem ser geradas pelos seguintes eventos:

  • Geradas por programa que são implementadas com o uso de instruções especiais;
  • Por erro, como na divisão por zero, referência à memória fora do espaço permitido etc;
  • Por tempo, como no escalonamento;
  • Falha de hardware;
  • Por eventos de entrada e saída de dados sinalizando o final de operação ou condição de erro.
  • Então, os eventos gerados pelas interrupções provocam a execução da rotina de tratamento correspondente à fonte da interrupção no sistema operacional.

Ao fazer o tratamento das interrupções de hardware, o dispositivo solicitante interrompe processador.

Este acaba a execução da instrução atual, testa existência de interrupção e salva o estado atual do processo que perderá o controle do processador na memória.

O processador carrega o contador de programa com endereço da rotina de tratamento da interrupção e transfere seu controle para a rotina de tratamento da interrupção.

A rotina de tratamento da interrupção executa e, ao término, restaura o estado anterior para retornar à execução da rotina interrompida.

Um núcleo simples desabilita o tratamento de interrupções enquanto ele responde a uma interrupção. Elas são novamente habilitadas após o processamento estar completo.

Se houver um fluxo permanente de interrupções, como nos sistemas multiusuário, este esquema pode ocasionar interrupções desabilitadas por um grande tempo e em respostas insatisfatórias.

Para evitar isso, o Kernel precisa estar atento ao tempo máximo de processamento permitido para cada interrupção. Se essa fatia de tempo estourar, ele passa o restante do processamento da interrupção para um outro processo apropriado do sistema que irá terminar de tratá-las, enquanto o núcleo continua apto a receber novas interrupções.

Isto significa que elas podem ficar habilitadas durante muito tempo, e o sistema torna-se mais eficiente em responder a requisições das aplicações dos usuários.

A lista de IRQs do sistema pode ser vista no arquivo

# cat /proc/interrupts 

           CPU0       

  0:         78   IO-APIC   2-edge      timer

  1:          9  xen-pirq   1-ioapic-edge  i8042

  4:       3409  xen-pirq   4-ioapic-edge

  8:          2  xen-pirq   8-ioapic-edge  rtc0

  9:          0  xen-pirq   9-ioapic-level  acpi

 12:          3  xen-pirq  12-ioapic-edge  i8042

 14:          0   IO-APIC  14-edge      ata_piix

 15:          0   IO-APIC  15-edge      ata_piix

 48:   14474493  xen-percpu-virq      timer0

 49:          0  xen-percpu-ipi       resched0

 50:          0  xen-percpu-ipi       callfunc0

 51:          0  xen-percpu-virq      debug0

 52:          0  xen-percpu-ipi       callfuncsingle0

 53:          0  xen-percpu-ipi       spinlock0

 54:        211   xen-dyn-event     xenbus

 55:     755401   xen-dyn-event     blkif

 56:     887240   xen-dyn-event     eth0

NMI:          0   Non-maskable interrupts

LOC:          0   Local timer interrupts

SPU:          0   Spurious interrupts

PMI:          0   Performance monitoring interrupts

IWI:          0   IRQ work interrupts

RTR:          0   APIC ICR read retries

RES:          0   Rescheduling interrupts

CAL:          0   Function call interrupts

TLB:          0   TLB shootdowns

TRM:          0   Thermal event interrupts

THR:          0   Threshold APIC interrupts

DFR:          0   Deferred Error APIC interrupts

MCE:          0   Machine check exceptions

MCP:       1216   Machine check polls

HYP:   16105716   Hypervisor callback interrupts

ERR:          0

MIS:          0

PIN:          0   Posted-interrupt notification event

PIW:          0   Posted-interrupt wakeup event

Quer aprender mais sobre Linux ? Conheça nosso curso para prova LPI

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe :-)

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Depois de anos vendo profissionais perderem horas em tarefas simples por não conhecer as ferramentas certas do Linux, decidi ensinar.
Hoje sou autor da maioria dos Materiais de Aprendizado oficiais da LPI e mentor de mais de 14.000 alunos certificados.

Conheça minha história completa →

Isso foi só uma peça. O curso ensina o caminho completo — do primeiro comando ao dia da prova.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp