Arquitectura de Computadores II
9 de Janeiro de 2009
Apresentação
PCI - Interrupções
32223 – Paulo Pires
16807 – José Serrano
Arquitectura de Computadores II
Sumário
• Interrupção noção geral
• Tipos de interrupções, noção geral
• Ciclo de interrupção por hardware
• O barramento PCI, noção geral
• Gestor de interrupções
• Prioridades nas interrupções
• MSI - 252
• Tabela de vectores
• Exemplo de um ciclo de interrupção
Interrupção noção geral
• Uma interrupção é equivalente a uma chamada a um procedimento. A
chamada é equivalente a um CALL gerado pela execução de uma instrução.
• As interrupções são casos especiais das chamadas a 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.
Tipos de interrupções, noção geral
As interrupções podem estar associadas a 3 tipos de eventos:
1. Interrupções internas
1. interrupção 0 à interrupção 4
 NMI
 Excepções
2. Interrupções externas
1. Interrupções externas ou de hardware:
 desencadeadas por periféricos ou coprocessadores
 ligadas ao sinal NMI ou INTR:
 NMI, reservado para “catástrofes” (falha de energia, erro de memória)
 INTR, CPU procura o vector
3. Interrupções de software
1. São meras instruções assembly ao CPU - INT n
2. 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
Ciclo de interrupção 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).
 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.
O barramento PCI, noção geral
• Criado pela INTEL em 1992
• Independente do processador
• Versão 2.0 : 33 MHz, 32 bits por ciclo (tx transf. 132MB/s)
• Versão 2.1 : 66 MHz, 64 bits por ciclo (tx transf. 528MB/s)
• Funciona a 5 V ou 3,3 V
• Slot de 120 pinos, para placas de 32 bits, ou 184 pinos (120+64)
para placas de 64 bits
• Recurso ao BUS MASTERING
• Compatibilidade com o recurso PnP
• Utilizados por diversos tipos de periféricos (placas de rede, som,
video, modem e adaptadores USB
O barramento PCI, noção geral – cont.
Gestor de interrupções
• 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.
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.
Caso a flag IF seja igual a 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;
Gestor de interrupções – cont.
2 - efectua um segundo ciclo para informar o 8259A que pode enviar a
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.
Gestor de interrupções – cont.
MSI
• Os fabricantes podem usar um pino do dispositivo para sinalizar
uma interrupção, ou em alternativa implementar o MSI e usá-lo para
sinalizar uma interrupção, o que tornaria desnecessária a utilização
do pino.
• Mas a especificação recomenda que qualquer dispositivo que
implemente o MSI também sinalize no pino as interrupções, isto
porque existem sistemas que não suportam o MSI.
• Implementação :
• No “startup” o software de configuração faz uma verificação
do bus PCI e faz uma detecção dos dispositivos
• Quando é detectado um dispositivo PCI, o software de
configuração verifica se possui alguma das compatibilidades
descritas numa lista
• Verifica se nessa compatibilidades está presente a
compatibilidade com MSI (ID – 05h)
MSI – cont.
• o software atribui um endereço de memória ao dispositivo
para registo dos pedidos de interrupção
• Verifica a múltiplas mensagens de interrupção possíveis do
dispositivo para determinar quantos eventos ficaram adjacentes
a esse registo
• o software disponibiliza ao dispositivo um numero de
mensagens igual ou menor às solicitadas pelo dispositivo mas
no mínimo uma.
• escreve a mensagem base no registo de mensagens do
dispositivo
• finalmente coloca o bit MSI “enable” no registo de controlo de
mensagens do dispositivo, ficando este assim habilitado a gerar
interrupções utilizando o MSI.
MSI – cont.
Resumindo
Quando um dispositivo PCI suporta MSI e está activo, ele gera um
pedido de interrupção ao processador escrevendo uma mensagem
pré-definida num endereço de memória pré-definido
O Processador possui uma rotina de varrimento desses endereços
atribuídos para registo das mensagens de interrupção e quando
elas surgem, ele identifica qual o dispositivo que solicitou a
interrupção
Prioridades nas interrupções
• O que acontece se ocorrerem duas interrupções simultaneamente?
Nesse caso será atendida a interrupção de mais alta prioridade.
Supondo que o pino INTR se encontra activo 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á a interrupção
interna atendida.
Prioridades nas interrupções, (cont …)
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.
Tabela de vectores
• 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 inteiro 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.
Tabela de vectores (Cont …)
• Os primeiros 32 VECTORES DE INTERRUPÇÃO são RESERVADOS e
utilizados presentemente pelo fabricante Intel e pelo sistemas operativos.
• 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, ...
Exemplo de um ciclo de interrupção
PIC 8259A
Exemplo de um ciclo de interrupção

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. Caso a flag IF seja igual
a 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.
Exemplo de um ciclo de interrupção
Processador x86.
Interrupção externa

termina o processamento da instrução atual

salva na pilha o registo com as flags

iguala a zero as flags IF e TF

salva na pilha os reg. CS e IP (endereço de retorno)

obtém os novos valores de CS e IP a partir da tabela de vetores de interrupção:
CS:IP←mem(0000:vetor*4)

desvia para rotina de tratamento de interrupção

retorno através da instrução IRET
Download

interrupção