Interrupções
• Uma interrupção é equivalente a uma chamada de procedimento. A
chamada é equivalente a um CALL gerado pela execução de uma
instrução.
• As interrupções são casos especiais de chamadas de procedimentos.
• Em ambos os casos o procedimento que é executado designa-se “rotina de
serviço à interrupção” ou “
interrupt handler
”.
• O retorno do procedimento ou rotina de serviço à interrupção é feito com a
instrução IRET.
109
• As interrupções possíveis numa CPU são normalmente pré-definidas numa
TABELA DE VECTORES DE INTERRUPÇÃO.
• Um VECTOR DE INTERRUPÇÃO é um número de 4 bytes. A tabela de
vectores de interrupção está armazenada nos primeiros 1K de memória
(endereços de 0 a 3FFh).
• Existem 256 vectores diferentes de interrupção.
• Cada vector contem o endereço do procedimento de serviço à interrupção
(valores para IP e CS). Primeiros 2 bytes têm o IP e os 2 últimos bytes o
CS.
• Os primeiros 32 VECTORES DE INTERRUPÇÃO são RESERVADOS e
utilizados presentemente pelo fabricante Intel e sistemas de operação (ou
exploração).
• Os restantes vectores de 32-255 estão disponíveis para o utilizador.
• Alguns vectores reservados são para condições de excepção que
ocorrem na execução das instruções: divisão por zero, overflow, ...
111
Mecanismos de Interrupção do CPU
• O manuseamento correcto de interrupções requer:
– desactivação prévia de interrupções
– iniciação do vector de interrupção para o handlerapropriado – activação das interrupções
• O gestor (handler) de uma interrupção deve:
– verificar o estado da flag de interrupções
– guardar o contexto (registos, flags e tudo o mais que for manipulado)
– bloquear as interrupções que possam interferir com o processamento do gestor – permitir as interrupções que não causam interferências (ex. relógio do sistema) – determinar a causa da interrupção e tomar as acções apropriadas
– restaurar o contexto previamente guardado
– desbloquear as interrupções previamente inibidas – retornar ao processo interrompido
• Aquando de uma interrupção:
– Para além do tempo da chamada e execução da rotina de serviço à
interrupção, o programa não foi afectado pelo funcionamento desta.
– A comunicação entre a rotina e o
programa não pode ser feita por registos, pois estes pertencem ao estado do
processador, que deve ser preservado.
113
Mecanismos de Interrupção do CPU
• As interrupções são tipicamente causadas por eventos externos à
CPU, tais como:
– operações de entrada/saída – detecção de faltas de hardware
– situações catastróficas (falha de energia)
• As interrupções podem estar associadas a 3 tipos de eventos:
– interrupções internas – interrupções externas – interrupções de software
– NMI (Interrupções não mascaráveis) – Excepções
• Interrupções externas ou de hardware:
– desencadeadas por periféricos ou coprocessadores – ligadas ao NMI ou INTR:
• NMI
– reservado para “catástrofes” (falha de energia, erro de memória) • INTR
– CPU procura o vector
– PIC coloca-o no barramento; multiplexa fontes (XT - 1 PIC: 8 fontes) (AT - 2 PIC: 16 fontes)
115
• Interrupções de software:
– são meras instruções assembly do CPU - INT n
– geram um apontador para uma posição da tabela de vectores de interrupção tal como uma interrupção de hardware.
Exemplo:
• IRQ0 - salta para a posição 08h da tabela de vectores de interrupção • INT 8 - “emula” o IRQ0, saltando para a mesma posição da tabela
– O MS-DOS utiliza as interrupções de software 20h a 3Fh para comunicação com os seus módulos e com as aplicações
• Interrupções de software (continuação):
– Cada instrução INT tem associado um número de 0 a 255. Por exemplo INT 100, corresponde ao vector de interrupção 100 e encontra-se nos endereços de memória 190H - 193H.
– As interrupções de software são utilizadas para chamar procedimentos do
sistema, dado que não é necessário conhecer o endereço da função do sistema. – Estes procedimentos são comuns a todos os sistemas e aplicações de software. – A instrução IRET permite o retorno ao programa principal. O mesmo que um
POPF seguido de um RET.
– O IRET carrega da stack o estado anterior das flags IF e TF.
– A instrução STI permite receber interrupções. A instrução CLI desabilita as interrupções.
117
• Interrupções por hardware
– O pino INTR é utilizado para desencadear, através de um sinal externo, um dos 256 tipos de interrupção (geralmente entre 20H - 0FFH).
– Estas interrupções podem ser mascaradas, através da colocação a zero da flag
IF pela instrução CLI. Pode ser habilitada através da instrução STI.
– Se a entrada NMI estiver activa, ocorre uma interrupção do tipo 2.
– O sinal INTA é, também, um pino de interrupção, no entanto, é utilizado como saída para responder ao pedido efectuado em INTR de modo a ser colocado, pelo periférico, o número do tipo de vector de interrupção no barramento de dados D7 - D0.
119
• Prioridade das Interrupções:
– O que acontece se ocorrerem duas interrupções simultaneamente? – Nesse caso será atendida a interrupção de mais alta prioridade.
Mais Elevada
Mais Baixa
Prioridade
Divisão por Zero NMI
INTR
Passo a Passo
Interrupção
Supondo que o pino INTR se encontra habilitado, e que recebe um sinal de interrupção durante uma operação de divisão que resulta numa divisão por
zero. Como a interrupção gerada internamente (interrupção tipo 0) tem maior
prioridade que a interrupção gerada pelo pino INTR, será atendida a interrupção interna.
• Controlador de Prioridades de Interrupções (PIC)
– Se colocarmos o NMI a detectar as interrupções originadas por falhas de energia, apenas sobra o pino INTR para receber todas as outras interrupções (teclado, impressora, rato, etc.).
– De modo a evitar este problema recorre-se à utilização de um controlador de prioridades de interrupções (PIC) o 8259A.
121
Mecanismos de Interrupção do CPU
• Controlador de Prioridades de Interrupções (PIC)
– Quando o 8259A recebe um sinal de interrupção num dos seus pinos de IR#, envia para o pino INTR do processador um sinal de interrupção. Se IF = 1, o processador responde à interrupção:
1 - efectua um ciclo de reconhecimento de interrupção no pino INTA e prepara o bus de dados para receber informação;
2 - efectua um segundo ciclo para informar o 8259A que pode enviar o informação sobre o tipo de interrupção. Este valor é colocado nas 8 linhas menos significativas do barramento de dados;
3 - efectua o procedimento normal de resposta a uma interrupção.
– A vantagem da utilização do PIC é a possibilidade de converter várias linhas de pedido de interrupção para uma só, sem lógica adicional.
• Controlador de Prioridades de Interrupções (PIC)
– PIC 8259A
123
Mecanismos de Interrupção do CPU
• Controlador de Prioridades de Interrupções (PIC)
– Podemos interrogar-nos sobre o que acontece se ocorrerem dois pedidos simultâneos de interrupção nas linhas IR#.
– Se o PIC estiver a operar no modo de prioridades fixas, a prioridade mais elevada dos pedidos de interrupção é ordenada de IR0 para IR7.
– O registo interrupt mask tem como função habilitar ou desabilitar entradas de interrupção. Cada bit deste registo corresponde a uma entrada.
– O registo interrupt requestverifica qual a linha de entrada que pede uma interrupção. Cada bit deste registo corresponde a uma entrada.
– O registo in-serviceindica qual a linha de interrupção que está a ser servida. – O priority resolverdefine se, e quando é que, uma das entrada IR# é
• Controladores de Prioridades de Interrupções Master e Slave - Modo
de funcionamento:
– Se o slavereceber um pedido de interrupção, e se estiver habilitado, envia um sinal para uma entrada IR# do master.
– Se o sinal tiver maior prioridade que qualquer outro, o master envia um sinal para a entrada INTR do processador.
– O processador envia dois sinais de INTA para os dois PIC. O slaveignora o primeiro sinal e o master coloca nos pinos CAS# a identificação do slave, habilitando o PICslave.
– Quando o slaverecebe o segundo pulso do INTA coloca no barramento de dados o número da interrupção pedida.
125
Mecanismos de Interrupção do CPU
• Controladores de Prioridades de Interrupções Master e Slave - Modo de
funcionamento:
– A interface com os PICs é conseguida através das portas 20h/0A0h e 21h/0A1h. • O primeiro endereço em cada par é o endereço do PIC master (IRQ 0 - 7); O
segundo endereço de cada par corresponde ao PIC slave (IRQ 8 - 15). – A porta 20h/0A0h refere-se a uma localização de escrita / leitura a partir da qual é
possível escrever comandos no PIC e ler o estado dos seus registos.
– A porta 21h/0A1h refere-se a uma localização de escrita / leitura que contém o registo da máscara de interrupções.
– No registo da máscara de interrupções, um 0 activa a linha e um 1 desactiva a linha de interrupção.
– Cuidado! Quando se alteram os bits do registo da máscara de interrupções, não se deve escrever o valor directamente na porta 21h/0A1h; deve-se começar por ler o valor actual e depois efectuar operações AND e OR para alterar os bits desejados e só depois escrever o valor em 21h/0A1h.
de funcionamento:
– Registo da máscara de interrupções – Tabela de IRQs