270 likes | 383 Views
Interrupts and Exceptions Understanding the Linux Kernel. Disciplina: Sistemas Operacionais Professor: Vitor Aluno: Isaac Veloso Nogueira. Definição. Interrupção evento que altera a seqüência de instruções executadas por um processador tipos: síncronas assíncronas
E N D
Interrupts and ExceptionsUnderstanding the Linux Kernel Disciplina: Sistemas Operacionais Professor: Vitor Aluno: Isaac Veloso Nogueira
Definição • Interrupção • evento que altera a seqüência de instruções executadas por um processador • tipos: • síncronas • assíncronas • OBS: o código executado por um manipulador de interrupção ou exceção não é um processo. Trata-se de um caminho de controle do kernel (kernel control path)
Definição • Intel • síncrona: exceção • assíncrona: interrupção
Tipos • Exceções • processor-detected exceptions • faults • traps • aborts • programmed exceptions • Interrupções • maskable interrupts • nonmaskable interrupts
Tipos • Exceções • processor-detected exceptions: geradas quando a CPU detecta uma condição anômala enquanto executa uma instrução • faults • traps • aborts • programmed exceptions
Tipos • Exceções • faults • o valor salvo do registrador eip é o endereço da instrução que executou causou o fault • a instrução pode ser reexecutada após o tratamento da exceção • após o tratamento da exceção, o programa pode continuar sua execução sem perda de continuidade
Tipos • Exceções • traps • um trap é disparado apenas quando não há necessidade de reexecutar a instrução que causou a exceção • após o kernel retornar o controle ao programa, o mesmo pode continuar sua execução sem perda de continuidade a partir da próxima instrução
Tipos • Exceções • aborts • um erro sério ocorreu ! • a unidade de controle pode não conseguir salvar no registrador eip o local preciso da instrução que causou a exceção • após o controle ser passado para o correspondente manipulador de exceção (abort exception handler), este não tem outra escolha a não ser forçar o processo afetado a terminar
Tipos • Exceções • programmed exceptions: ocorrem a partir da requisição do programador • podem ser disparadas pelas instruções int, int3, into, bound • as programmed exceptions são manipuladas pela unidade de controle como traps • uso comum: implementar system calls e notificar um debugger sobre um evento específico
IRQs and Interrupts • cada dispositivo de hardware capaz de emitir pedidos de interrupção tem uma linha de saída conhecida como IRQ (Interrupt ReQuest) • todas as linhas IRQ existentes são conectadas aos pinos de um circuito de hardware denominado Interrupt Controller, que executa as seguintes ações: • 1: monitora as linhas de IRQ, checando os sinais • 2: caso um sinal seja percebido: • converte o sinal recebido para um vetor correspondente • armazena o vetor em uma porta de I/O do Interrupt Controller, permitindo assim que a CPU leia o vetor através do barramento de dados • envia um sinal para o pino INTR do processador (emissão da interrupção) • aguarda que a CPU reconheça o sinal da interrupção através da escrita em uma das portas de I/O dos PIC (Programmable Interrupt Controllers) - quando isto ocorre, o Interrupt Contoller limpa a linha INTR • 3: volta ao passo 1
Exceptions • os microprocessadores 80x86 emitem cerca de 20 exceções diferentes • o kernel deve fornecer um exception handler dedicado para cada tipo de exceção • para algumas exceções, a CPU gera, também, um código de erro do hardware [hardware error code] e a empilha na pilha (Kernel Mode) antes de iniciar o exception handler
IDT • IDT – Interrupt Descriptor Table • A IDT é uma tabela do sistema que associa cada vetor de interrupção ou exceção ao endereço do correspondente interrupt/exception handler • A IDT pode ter três tipos de descritores…
IDT • os descritores são: • Task gate Não utilizado pelo Linux. • Interrupt gate Inclui o Segment Selector e o offset dentro do segmento de uma interrupt/ exception handler. Enquanto transfere o controle para o segmento apropriado, o processador limpa a IF flag, desabilitando assim outras interrupções mascaráveis. • Trap gate Similar ao interrupt gate, exceto que enquanto transfere o controle para o segmento apropriado, o processador não modifica a IF flag.
HW handling of interrupts and exceptions • Nested execution of exception and interrupt handlers • Linux não permite o chaveamento de processos (process switch) enquanto a CPU está executando um kernel control path associado a uma interrupção • entretanto, tais kernel control paths podem ser interrompidos por outro interrupt handler gerando uma execução aninhada de kernel threads
Initializing the IDT • Inicializando a IDT • antes que o kernel habilite as interrupções, ele deve ler os endereços da IDT para o registrador idtr e inicializar todas as entradas da tabela • a inicialização da IDT deve ser realizada com cuidado a fim de bloquear interrupções e exceções ilegais simuladas por processos (User Mode) via instruções int
Exception handling • manipulando exceções • a maioria das exceções emitidas pela CPU são interpretadas pelo Linux como condições de erro. • quando uma exceção ocorre, o kernel envia um sinal ao processo que causou a exceção para notificá-lo de uma condição anômala.
Interrupt handling • manipulando interrupções • I/O interrupts • timer interrupts • interprocessor interrupts
Interrupt handling • todos os I/O interrupt handlers executam as mesmas quatro ações básicas: 1: salvar o valor do IRQ e os conteúdos dos registradores na pilha do Kernel 2: enviar um ack para o PIC que está servindo o IRQ, permitindo que ele possa emitir novas interrupções 3: executar as rotinas de serviço de interrupção (ISRs) associadas a todos os dispositivos que compartilham a IRQ 4: finalizar [salto para o endereço da função ret_from_intr( ) ]
SW handling of interrupts and exceptions • Linux 2.4 usa três tipos de deferrable functions (funções adiáveis) • Softirq • Tasklet • Bottom Half
Softirq • função de baixa prioridade que permite ter sua execução adiada até que o kernel encontre uma oportunidade conveniente para executá-la • softirqs são alocadas estaticamente (por exemplo, em tempo de compilação) • softirqs não são serializáveis
Tasklet • para a maioria dos propósitos, tasklets são mais fáceis de serem escritos • tasklets são serializáveis
Bottom Half • essencialmente, um bottom half é uma tasklet de alta prioridade • é esperado que os bottom halves não existam mais em futuras versões do Linux (substituição pelos tasklets)
Tópicos • how IRQ give rise to interrupts • Interrupções e Exceções • how 80x86 processors handle interrupts and exceptions at the HW level • Nested execution of exception and interrupt handlers • how Linux initializes the data structures requiered by the Intel interrupt architecture • Exception handling • Interrupt handling • how Linux handles interrupt signals at the SW level
Tópicos • Interrupts • Exceptions • Manipulando Interrupções e Exceções em HW • Inicializando a IDT • Manipulando Interrupções e Exceções em SW
Causas • Exceções • programming errors • anomalous conditions • Interrupções • interval timers • I/O devices