







Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Este documento aborda o processamento de interrupções em sistemas de informação, explicando os diferentes tipos de interrupções, como as interrupções por hardware e software, e os processos envolvidos na sua manipulação. Além disso, são discutidos os conceitos de tabelas de vetores de interrupções, prioridades e o papel dos controladores de interrupções. O texto também apresenta exemplos de interrupções específicas, como a interrupção do teclado.
Tipologia: Trabalhos
1 / 13
Esta página não é visível na pré-visualização
Não perca as partes importantes!








Bacharelado em Sistemas de Informação
Carlos Eduardo O. Velasco 1º Semestre / 2009
Bacharelado em Sistemas de Informação
Em Ciência da Computação, uma interrupção é um sinal de um dispositivo que tipicamente resulta em uma troca de contexto, isto é, o processador pára de fazer o que está fazendo para atender o dispositivo que pediu a interrupção.
Computadores digitais geralmente oferecem uma maneira de iniciar rotinas de software em resposta a eventos eletrônicos assíncronos. Esses eventos são sinalizados para o processador através de pedidos de interrupção (IRQs). O processamento da interrupção compõem uma troca de contexto para uma rotina de software especificamente escrita para tratar a interrupção. Essa rotina é chamada rotina de serviço de interrupção, ou tratador de interrupção (interrupt handler). Os endereços dessas rotinas são chamados vetores de interrupção e são armazenados geralmente em uma tabela na memória RAM, permitindo sua modificação caso seja necessário. As Interrupções foram concebidas para evitar o desperdício de tempo computacional em loops de software (chamados polling loops) esperando eventos que serão disparados por dispositivos. Ao invés de ficarem parados esperando o evento acontecer, os processadores tornaram-se capazes de realizar outras tarefas enquando os eventos estão pendentes. A interrupção avisa ao processador quando o evento ocorreu, permitindo dessa forma uma acomodação eficiente para dispositivos mais lentos.
Interrupções permitem aos processadores modernos responder a eventos gerados por dispositivos enquanto outro trabalho está sendo realizado. Os processadores também oferecem instruções para permitir os processos dispararem interrupções de software (traps). Isso pode ser usado para implementar uma multitarefa cooperativa.
As interrupções são sinais enviados ao microprocessador, através dos quais tarefas sendo executadas são suspensas temporariamente e é atendida um outra tarefa que necessita de uma atenção imediata. Muitas interrupções são destinadas a tarefas comuns que praticamente todos os softwares necessitam, como por exemplo a obtenção de digitações feitas no teclado ou a abertura de arquivos.
Os tipos de interrupções possíveis no processador são:
A interrupção por hardware é iniciada pelos circuitos existentes na placa do sistema, por uma placa expansão ou através de uma porta conectada a um dispositivo externo. As interrupções por hardware podem ser iniciadas por eventos tão diversos como um pulso do chip do timer do computador, um sinal vindo de um modem ou o pressionar de um botão do mouse. A interrupção do teclado é um exemplo típico de interrupção por hardware. Existe um circuito controlador do teclado na placa de sistema do computador que monitora o teclado para
Bacharelado em Sistemas de Informação
As informações de CS:IP e o registrador de flags são automaticamente inseridos na pilha ao ocorrer uma interrupção. Os outros registradores são salvos pela rotina da interrupção, que é comumente chamada de rotina manipuladora da interrupção (interrupt handler) ou de rotina de serviço da interrupção (interrupt service routine – ISR). Somente serão salvos os registradores que forem alterados pelas rotinas manipuladoras de interrupção. Quando uma rotina manipuladora de interrupção terminar o seu serviço, a mesma restaurará os registradores que tiver alterado, executando no final da rotina a instrução IRET (interrupt return) que possui a função de retirar o registrador de flags e o CS:IP da pilha, retornando-os aos seus lugares no processador. Com o CS:IP restaurado, o programa principal volta a funcionar.
Uma tabela de ponteiros é usada para ligar o número-tipo de uma interrupção com as localidades na memória das suas rotinas de serviço. Em um sistema baseado no modo real, esta tabela é chamada de tabela de vetores de interrupção. Em sistemas no modo protegido, esta tabela é chamada de tabela de descritores de interrupção.
No modo real, a tabela de vetores está localizada no limite inferior dos endereços de memória. Ela começa no endereço 0000016 e termina no endereço 003FF16.
Isto representa o primeiro kbyte de memória. Na realidade, a tabela de vetores de interrupção pode estar localizada em qualquer lugar na memória. Sua localização inicial e tamanho são definidos pelo conteúdo do registrador da tabela de descritores de interrupção, o IDTR. Quando o processador é inicializado ele entra no modo real com os bits do endereço de base no IDTR todos iguais a zero e o limite fixado em 03FF16. Na tabela de vetores de interrupção, cada um dos 256 vetores requer duas palavras. A palavra de endereço mais alto representa o
Bacharelado em Sistemas de Informação
endereço de base de segmento e identifica na memória, o inicio do segmento de programa no qual a rotina de serviço reside. Este valor será armazenado no registrador de segmento de código CS no momento do atendimento de uma interrupção. A palavra de endereço mais baixo do vetor representa o deslocamento da primeira instrução da rotina de serviço a partir do início do seu segmento de código e, será armazenado no registrador apontador de instrução – IP.
A tabela de descritores do modo protegido pode residir em qualquer localização do endereço físico do processador. A localização e o tamanho desta tabela são novamente definidos pelo conteúdo do IDTR. O endereço de base no IDTR identifica o ponto inicial da tabela na memória e o limite determina o número de bytes da tabela. A tabela de descritores de interrupção contém descritores de porta (gates), não vetores. São possíveis 256 descritores de interrupção identificados do gate 0 ao gate 255. Cada descritor de gate pode ser do tipo: gate de trap, gate de interrupção, ou gate de tarefa. Os dois primeiros tipos permitem que o controle seja transferido para uma rotina de serviço que está localizada dentro da tarefa atual. Por outro lado, o gate de tarefa permite que o controle de programa seja passado para uma outra tarefa. Como nos vetores de modo real, um gate no modo protegido age como um ponteiro que é
Bacharelado em Sistemas de Informação
usuário fazer chamadas de funções típicas do sistema operacional (DOS) ou do sistema de entrada/saída (BIOS).
Sempre que um pedido de interrupção válido ocorre (por hardware ou por software), o processador aponta para um vetor presente no espaço de memória que vai de 0000h a 03FFh (primeiro 1 kbyte da memória principal).
As interrupções e exceções do sistema genérico são servidas com um sistema de prioridade conseguida de duas maneiras:
A importância dos níveis de prioridade reside no fato de que, se uma rotina de serviço de interrupção foi iniciada, somente um dispositivo com nível de prioridade mais alto terá poder de interromper sua execução. Para as interrupções de hardware, as decisões de prioridade são complementadas através do circuito responsável pelas requisições. Ao teclado deve ser também associada uma interrupção de alta prioridade. Isto irá assegurar que seu buffer de entrada não ficará cheio, bloqueando entradas adicionais. Por outro lado, dispositivos como unidades de disquete e HD são tipicamente associados com níveis de prioridade mais baixos.
IRET: Retorna de uma rotina de tratamento de interrupção, recuperando, da pilha, o conteúdo dos registradores que foram automaticamente salvos na ocorrência da interrupção. Ao final de uma rotina de tratamento de interrupções, deve ser inserida a instrução IRET.
Formato de implementação: IRET
Bacharelado em Sistemas de Informação
Nos sistemas 8086 e 8088, os números das interrupções entre 08h e 0Fh são utilizadas para as interrupções do hardware; nos sistemas 80286 e superiores, os números das interrupções entre 08h e 0Fh (8 e 15 em decimal) e também 70h (112 em decimal) e 77h (119 em decimal) estão reservados para as interrupções de hardware.
Os chips INTEL 8259, que atuam como controladores programáveis de interrupções (programable interrupt controller – PIC), são utilizados em todos os equipamentos da linha IBM PC na gerência das interrupções por hardware. Um chip possui 8 canais de interrupções. Os equipamentos da linha PC/XT suportam apenas um chip 8259, isto é, apenas 8 canais de interrupções, enquanto que os demais equipamentos utilizam 2 chips em cascata, ou o equivalente a 2 combinados num único chip. No caso mais simples, cada canal estará conectado a um único dispositivo. Quando um canal for ativado, será emitida uma solicitação de interrupção (interrupt request – IRQ). Estas solicitações são numeradas de IRQ0 até IRQ15.
Durante a execução de uma interrupção, podem chegar novas solicitações de para outras interrupções. Um chip controlador de interrupções mantém um controle sobre as solicitações de interrupções, e decide qual será executada em seguida, com base num esquema de prioridade. Os canais de numeração mais baixa terão as prioridades mais altas. Assim, a IRQ terá precedência sobre a IRQ1. No caso de 2 chips em cascata (Figura 41), um atuará como mestre e o outro como escravo, sendo que os 8 canais do chip escravo operarão através do canal 2 do chip mestre, portanto os 8 canais do escravo terão maiores prioridades após o IRQ e IRQ1. Veja a Tabela 6 que indica as interrupções listadas de acordo com a prioridade decrescente.
Bacharelado em Sistemas de Informação
A possibilidade de iniciar uma interrupção de hardware na entrada INTR é habilitada com IF= ou mascarada com IF=0. Quando IF=1, o processador cumprirá qualquer solicitação de interrupção que o registrador de máscara de interrupções permitir; quando IF=0, nenhuma interrupção por hardware poderá ocorrer. Por software, isto pode ser feito através da instrução STI (set IF) ou CLI (clear IF), respectivamente. IF afeta somente a interface de interrupção de hardware não tendo qualquer influência sobre os outros grupos de interrupções. A instrução CLI sempre deverá ser seguida por uma instrução STI, sob risco de travar o equipamento.
Durante a seqüência de inicialização de uma rotina de serviço para uma interrupção de hardware, o processador automaticamente coloca nível lógico 0 em IF (IF ¬ 0). Isto mascara a ocorrência de qualquer interrupção de hardware adicional. Em algumas aplicações pode ser necessário permitir que outras interrupções de hardware com prioridade mais alta interrompam a rotina de serviço ativa. Se este é o caso, o bit IF pode ser colocado em nível lógico 1 (IF ¬ 1) com uma instrução STI localizada no início da rotina de serviço.
Os programas podem desativar uma ou todas as interrupções por hardware. Essa ação é normalmente necessária apenas quando for redigido um código de baixo nível que acesse o hardware diretamente. Por exemplo, ser for criada uma rotina que insira dados no buffer do teclado, a interrupção do teclado deve ser desativada durante a execução da rotina para que não exista o risco do teclado interferir no processo. As interrupções por hardware são também mascaradas de modo a impedir os atrasos durante a execução de operações sensíveis ao relógio. Uma rotina de I/O precisamente sincronizada não poderia permitir ser prejudicada por uma operação demorada no disco. Em última instância, a execução de todas as interrupções depende do ajuste existente no bit IF do registrador de flags.
Para mascarar interrupções de hardware em particular, basta enviar o padrão apropriado de bits para o IMR. Este registrador de 8 bits está localizado no endereço de porta 21h do PIC mestre, e em 1Ah para o PIC escravo. Para isso, é necessário definir os bits que correspondem aos números das interrupções que se pretendem mascarar.
Interrupções internas e exceções diferem das interrupções de hardware externo porque elas ocorrem devido ao resultado da execução de uma instrução, não de um evento que ocorre no hardware externo. Uma interrupção interna ou exceção é iniciada porque uma condição interna de erro foi detectada antes, durante ou depois da execução de uma instrução. Neste caso, uma rotina deve ser iniciada para atender a condição interna antes de prosseguir na execução da mesma ou da próxima instrução do programa. As localizações de maior prioridade foram reservadas para tratamento deste tipo de interrupção ou exceção.
As interrupções internas e exceções são categorizadas como sendo de falha, trap ou aborto. No caso de uma falha, os valores de CS e IP salvos na pilha apontam para a instrução que resultou na interrupção. Desta forma, depois de servir à exceção, pode ser re-executada. No caso de um trap, os valores de CS e IP que foram levados para a pilha apontam para a instrução seguinte à que causou a interrupção. Desta forma, depois da conclusão da rotina de
Bacharelado em Sistemas de Informação
serviço, a execução do programa prossegue normalmente. No caso de um aborto, nenhuma informação é reservada e, o sistema pode precisar ser reinicializado. Algumas interrupções internas e exceções no sistema genérico são:
Uma chamada ao SO não pode ser feita com base na instrução máquina CALL, pois esta contém explicitamente o endereço de memória destinatário e tenta, como se sabe, afectar o Program Counter, PC do processador, com esse endereço. Ora, se este endereço refere uma zona de memória do SO, por corresponder a uma subrotina do SO (por exemplo, para ler dados de um ficheiro), a execução de tal instrução máquina, por um programa em modo utilizador daria um erro, por violação de memória. Por outro lado, usar essa instrução exigiria que o programa uutilizador conhecesse o endereço de destino da subrotina a chamar, o que também não é conveniente. De facto, isto obrigaria a 'religar' os programas utilizadores de cada vez que se alterasse o código do SO.
Precisamos de um mecanismo que permita fazer o seguinte:
'saltar' (isto é, afectar o PC) para um ponto de entrada no código do SO, sem que o invocador saiba qual o endereço de destino do salto;
alterar o modo de operação do processador, para supervisor, quando se efectua aquele salto, para que a subrotina chamada tenha todos os privilégios para executar a acção pedida;
ao retornar ao programa utilizador, repor o valor do bit de estado para o modo utilizador
Este mecanismo é suportado por uma instrução máquina que faz o que, nalguns processadores, se designa por uma chamada ao supervisor, e tipicamente gera uma interrupção do programa, ou seja:
empilha o PC e as Flags de estado do processador, põe a flag de interrupções do CPU a zero, põe a flag de modo a indicar supervisor;
salta para uma rotina cujo endereço obtém a partir de uma entrada de uma tabela de vectores de interrupção, cujo índice é indicado como um argumento da própria instrução
Bacharelado em Sistemas de Informação