200 likes | 303 Views
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
E N D
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.
As interrupções podem estar associadas a 3 tipos de eventos: • Interrupções internas • interrupção 0 à interrupção 4 • NMI • Excepções • Interrupções externas • 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 • Interrupções de software • São meras instruções assembly ao 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 Tipos de interrupções, noção geral
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
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.
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: • efectua um ciclo de reconhecimento de interrupção no pino INTA e prepara o bus de dados para receber informação; • 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; • 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