EA869leopini/DISCIPLINAS/EA869/2018-1/... · 2018-05-03 · GERADOR DE SINAIS DE INTERRUPÇÃO •...

39
EA869 INTRODUÇÃO A SISTEMAS DE COMPUTAÇÃO DIGITAL 2S2017 PED Tiago Novaes Angelo INTERRUPÇÃO Aulas 17 , 18 e 19

Transcript of EA869leopini/DISCIPLINAS/EA869/2018-1/... · 2018-05-03 · GERADOR DE SINAIS DE INTERRUPÇÃO •...

EA869 INTRODUÇÃO A SISTEMAS DE COMPUTAÇÃO DIGITAL

2S2017

PED Tiago Novaes Angelo

INTERRUPÇÃO

Aulas 17 , 18 e 19

Objetivos

• Definir o conceito de interrupção

• Diferenciar Interrupção de Subrotinas

• Conhecer os mecanismos de interrupção do ARM

• Conhecer as diversas estratégias para implementar interrupções

• Aprender a instalar interrupções na memória

Recordando o que fizemos... • Na última aula vimos como desviar a execução de um programa através da

chamada de subrotinas

Quais condições podem acarretar a interrupção da

execução de um programa?

• Esta técnica é de especial importância para escrita de códigos otimizados, uma vez que permite eliminar redundâncias, reutilizar o mesmo código para diferentes entradas de dados e decompor problemas grandes em pequenas partes (modularizar)

• Porém, nem sempre a interrupção de um programa acontece de forma programada como é no caso da chamada de subrotinas

Mouse, teclado, sensores, telas touchscreen, sinais internos (reset) podem interromper a execução da CPU para o atendimento dos seus eventos!

Atendimento de eventos externos e internos!

Controlador

EXEMPLO Vamos supor que você está jogando CandyCrush no seu smartphone e alguém resolve ligar para você...

CPU MEM

PROG

GSI

• Gerador de Sequência de interrupção: é o hardware dentro do controlador que irá receber o sinal de interrupção, interromper a execução da instrução e desviar a execução do programa para a ROTINA DE SERVIÇO DE INTERRUPÇÃO (RSI), a qual atenderá o evento que gerou interrupção.

RSI

EXEMPLO

INTERRUPÇÃO

É a quebra da sequência de operação de forma a atender eventos especiais, tais como:

- Entrada de dados atendendo a solicitação de periféricos - Atendimento de sinal de sensor - Sinais internos

• DEFINIÇÃO:

Como eu informo a CPU que um evento quer interrompê-la?

Via um sinal de interrupção

enviado ao GSI por linhas de interrupção

Cada linha de interrupção têm associada a ela um dispositivo (ou conjunto

deles) que enviam o sinal de interrupção quando desejam ser atendidos.

EXEMPLO • Vejamos agora o atendimento de uma interrupção mais detalhadamente:

MOV R0, #200

MOV R0, #100

MOV R0, #300

MOV (R0), R3

MOV R1, (R0)+

MOV R2, (R0)+ ADD R3, R1, R2

MOV R1, (R0)+

MOV R2, (R0)+ ADD R3, R1, R2

MOV (R0), R3

MOV (R0), R3 RTI

RSI: MOV R1, (R0)+ MOV R2, (R0)+ ADD R3, R1, R2

BUSCA EXECUÇÃO

SINAL DE INTERRUPÇÃO

• Ao aparecer um sinal de interrupção:

1. Controlador termina de executar a instrução corrente

2. GSI salva o estado atual da máquina, o endereço de retorno e desvia a execução do programa para a rotina de serviço de interrupção (RSI)

3. Ao terminar de executar a RSI, o controlador restaura o estado anterior à interrupção e retorna a execução do programa principal.

O que vai acontecer?

para que tudo isto ocorra, quais

microoperações o GSI deve realizar?

GERADOR DE SINAIS DE INTERRUPÇÃO

• O QUE É? É um dispositivo do controlador que, ao receber um sinal de interrupção, salva o estado atual do processador (Registrador de Estado ou PSW), o endereço de retorno e desvia a execução do programa para Rotina de Serviço de Interrupção (RSI).

• ARQUITETURA:

D Q

CLR Q

EXECUÇÃO BUSCA

GERADOR DE SEQUÊNCIA

DE INTERRUPÇÃO

PARTIDA

... ...

...

sinais de controle sinais de controle

sinal do fim da

sequência de micro-

comandos

sinal do fim

da sequência

de micro-

comandos

C.O. sinal de

interrupção

Flip-Flop

de

Interrupção sinais de controle

ATENDIMENTO DE UMA INTERRUPÇÃO

• Relembrando os passos para o atendimento de uma interrupção:

1. Armazenar o conteúdo do PC para posterior retorno à execução interrompida (Endereço de retorno);

2. Armazenar o estado corrente do processador, para restaurar, no retorno, a situação no momento à interrupção; 3. Desviar o controle de execução para Rotina de Serviço de Interrupção;

Onde iremos armazenas essas

informações? PILHA!

SINAIS DE CONTROLE DO GSI

PUSH PC PUSH PSW JUMP RSI

Pilha ← (PC) Pilha ← (PSW) PC ← End da RSI

End de retorno

Estado corrente do processador

GERADOR DE SINAIS DE INTERRUPÇÃO

Desvia a execução para RSI

RETORNO DA INTERRUPÇÃO

• Semelhante ao retorno da subrotina, o retorno da interrupção se dá por uma instrução ao final da Rotina de Serviço de Interrupção:

POP PSW

POP PC

PSW ← Estado anterior à Interrupção

PC ← Endereço de retorno

MOV (R0), R3 RTI

RS1: MOV R1, (R0)+ MOV R2, (R0)+ ADD R3, R1, R2

Quais operações a instrução RTI deve executar?

NOTE QUE O RETORNO DEVE SER PROGRAMADO NA RSI ELE NÃO É EXECUTADO PELO GSI!

GERADOR DE SINAIS DE INTERRUPÇÃO

ROTINAS DE SERVIÇO DE INTERRUPÇÃO

Qual é o endereço da Rotina de Serviço de Interrupção?

• Antes de executar os sinais de controle para o atendimento de um sinal de interrupção, o GSI deve conhecer qual o endereço da RSI

• Existem 3 formas de informar o GSI qual é este endereço

Mapeamento Interno à CPU

• Neste caso, cada linha de interrupção está associada a um endereço de memória

• O programador deve instalar a RSI no endereço de interrupção associado ao pino de interrupção onde foi ligado o dispositivo

L1

Mapeamento

RS1 MEM

L2 RS2

CPU

ROTINAS DE SERVIÇO DE INTERRUPÇÃO

Qual é o endereço da Rotina de Serviço de Interrupção?

• Antes de executar os sinais de controle para o atendimento de um sinal de interrupção, o GSI deve conhecer qual o endereço da RSI

• Existem 3 formas de informar o GSI qual é este endereço

Mapeamento Externo à CPU

• Neste caso, temos um hardware chamado “Controlador de Interrupções” que informa ao GSI qual é o endereço da interrupção;

• Porém, antes de executar o JUMP para a RS, a CPU precisa ler este endereço enviado pelo controlador

L1 end

MEM

L2

CPU

Controlador de

Interrupções GSI

PUSH PC PUSH PSW

JUMP RSI

IN CONTRL

ROTINAS DE SERVIÇO DE INTERRUPÇÃO

Qual é o endereço da Rotina de Serviço de Interrupção?

• Antes de executar os sinais de controle para o atendimento de um sinal de interrupção, o GSI deve conhecer qual o endereço da RSI

• Existem 3 formas de informar o GSI qual é este endereço

Polling

• Neste caso, temos uma Rotina de Serviço que lê o status de todos os dispositivos conectados à linha de interrupção

• Caso algum dispositivo tenha emitido um sinal de interrupção, acontece o desvio para RSI correspondente.

LI

MEM CPU

GSI

RS: IN STATUS1 Jcond RS1 IN STATUS2 Jcond RS2 ... IN STATUSn Jcond RSn

INTERRUPÇÃO • Resumindo o que vimos até agora...

• Definição: Uma interrupção nada mais é do que a quebra da sequência de operação para o atendimento de um evento interno ou externo

• Atendimento: O atendimento da interrupção desvia a execução da CPU para uma Rotina de Serviço de Interrupção. Uma vez finalizado, as condições anteriores do processador são restauradas

• Endereço: O sinal de interrupção é enviado pelo dispositivo através de uma linha de interrupção. Cada linha de interrupção tem associada a si um endereço da memória

• Hardware: Uma área dentro do controlador, o Gerador de Sinais de Interrupção, é responsável por atender a interrupção. O retorno é executado por uma instrução (RTI) ao final da RSI

Onde se encontram as Rotinas de Serviço de

Interrupção?

Possibilidade 1:

Nos endereços associadas às linhas

de interrupção

L1 → RS1

L2 → RS2

L3 → RS3 ...

(1) Em posições não contíguas de memória

L1 END1

L2 END2

Ln ENDn

RS1 “mouse”

MEMÓRIA

RS1 “mouse”

RS2 “teclado”

RS2 “teclado”

Invadiu a área reservada para a RSI

de outra linha de interrupção!

Solução?

Desviar a execução para uma área livre da memória

ENDX RS2 “teclado” – P2

RS2 “teclado” – P1

...

JUMP ENDX

Nesta forma de organização, cada

endereço associado à linha

de interrupção possui um

conjunto de palavras para instalação das

RSIs.

SINAIS DO GSI

PUSH PC PUSH PSW JUMP ENDi

PC ← ENDi

ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO

Existe uma solução mais “elegante” para instalar as RSIs?

VETORES DE INTERRUPÇÃO!

ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO

(2) Em vetores (interrupção vetorizada)

L1 END1

L2 END2

Ln ENDn

MEMÓRIA

Nesta forma de organização, os endereços associados à cada linha de interrupção

estão em posições contíguas da memória...

...

Desta forma, os endereços de interrupção

conterão apenas os endereços das RSI apropriadas.

RS1

RS2

RS3

• Processadores mais modernos (por exemplo, ARM) possuem uma área da memória reservada para os endereços das RSIs. Essa área é chamada de “Vetor de Interrupções” e geralmente localiza-se no início do espaço de memória, a partir do endereço 0

• A vantagem desta estratégia é que as RSIs podem ser instaladas em qualquer área livre da memória sem restrição de tamanho

Isto implica não haver espaço para a instalação da RSI...

SINAIS DO GSI

PUSH PC PUSH PSW JUMP (ENDi)

PC ← (ENDi) = RSIi

VETOR DE INTERRUPÇÕES

ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO

ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO

• Em algumas circunstâncias, para que a Rotina de Serviço de Interrupção seja executada corretamente, podem ser necessárias algumas condições especiais

• Por exemplo, o evento “reiniciar”:

- Ao pressionar o botão “reiniciar”, o programa corrente é interrompido e a execução é desviada para uma RSI que inicializa o Sistema Operacional

- Durante esta inicialização, nenhum sinal de interrupção pode interromper a RSI - Para que nenhuma interrupção aconteça, precisamos desabilitá-las no Registrador de Estado (PSW)

REGISTRADOR DE ESTADO (PSW)

- Uma forma de implementação é associar bits do PSW à linhas de interrupção. Se bit = 1, a linha correspondente ao bit pode interromper a execução. Se bit = 0, não pode interromper.

L1 L2 L3

Se, antes de executar a RSI eu seto 001 no PSW, quem poderá

interrompê-la?

0 0 1

A este valor que setamos no PSW chamamos de

MÁSCARA DE INTERRUPÇÃO

Apenas a Linha 1!

Muitas vezes faz-se necessário passar uma máscara para o Registrador de Estado antes de iniciar a

execução da RSI.

Como faremos isso?

(3) Em vetores (interrupção vetorizada) com PSW (estado)

L1 END1

L2 END2

Li ENDi

MEMÓRIA

Uma forma de alterar o estado do processador,

adequando-o para execução da RSI, é

enviando uma máscara do desvio

PUSH PC PUSH PSW

JUMP (ENDi + 1)

PSW ← (ENDi) = pswi

...

Esta máscara pode ser alocada no Vetor de

Interrupções, em uma posição antes do endereço da RSI.

mask1

RS1

RS2

mask2

maski

RSi

MOV ENDi, PSW PC ← (ENDi + 1) = RSIi

Qual outra forma de enviar a máscara para

o PSW?

VETOR DE INTERRUPÇÕES

(com PSW)

Através da primeira linha da RSI:

RS1: MOVE mask1, PSW ...

RTI

SINAIS DO GSI

ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO

INTERRUPÇÃO X SUBROTINAS

INTERRUPÇÃO ATENDIMENTO Síncrono

(programa) Assíncrono

(sinal externo)

END DA ROTINA DE SERVIÇO

Própria Instrução Vetor de

Interrupções

DESVIO DA EXECUÇÃO

Salva PC e PSW Salva PC

Restaura PC e PSW Restaura PC RETORNO AO PROGRAMA

QUEM EXECUTA O DESVIO PARA RS

Controlador ao executar CALL

GSI

QUEM EXECUTA O RETORNO

Controlador ao executar RTS

Controlador ao executar RTI

Diferença entre Interrupção e

Subrotina?

INSTALANDO RSIs • Agora que sabemos os mecanismos de funcionamento da interrupção e onde se localizam os

endereços e as rotinas de serviço, vamos aprender como se escreve um programa Assembly para implementar interrupções. Vamos começar com um exemplo prático:

Seja uma arquitetura onde as linhas de interrupção L1, L2 e L3 estão associadas a um Vetor de Interrupções de endereços contíguos e sem PSW. O Vetor de Interrupções começa na posição 0 de memória e as RSIs estão, respectivamente, nas posições 300, 400 e 500. Escreva um programa que implemente estas condições.

L1 END1

L2 END2

L3 END3

RS1

RS2

RS3

0

1

2

300

400

500

Antes de continuar, vamos falar mais um pouco sobre pseudo-instruções...

PSEUDO-INSTRUÇÕES

É um tipo especial de instrução não executável, que insere valores em posições de memória, reserva espaço e organiza na memória o local de instalação das instruções. Quem lê e “executa” as pseudo-instruções é o montador ao alocar o programa Assembly na memória.

Em resumo, pseudo-instruções são regras que ajudam o montador a definir o conteúdo de cada posição da memória ao instalar um programa.

DS X Reserva X palavras da memória a partir da posição da pseudo-instrução

DW V Posição de memória desta pseudo-instrução recebe o valor V

ORG Y A próxima instrução é alocada na posição Y de memória

ADR rótulo Posição recebe o endereço de “rótulo”

INSTALANDO RSIs

Instalando o VI:

ORG 0 ADR RS1 ou DW 300

Instalando as RSIs:

ADR RS2 ADR RS3

ou DW 400 ou DW 500

ORG 300 RS1: ...

... RTI ORG 400

RS2: ... ... RTI ORG 400

RS2: ... ... RTI

• Agora que sabemos os mecanismos de funcionamento da interrupção e onde se localizam os endereços e as rotinas de serviço, vamos aprender como se escreve um programa Assembly para implementar interrupções. Vamos começar com um exemplo prático:

Seja uma arquitetura onde as linhas de interrupção L1, L2 e L3 estão associadas a um Vetor de Interrupções de endereços contíguos e sem PSW. O Vetor de Interrupções começa na posição 0 de memória e as RSIs estão, respectivamente, nas posições 300, 400 e 500. Escreva um programa que implemente estas condições.

L1 END1

L2 END2

L3 END3

RS1

RS2

RS3

0

1

2

300

400

500

INSTALANDO RSIs

Seja agora uma arquitetura onde as linhas L1, L2 e L3 estão associadas a um Vetor de Interrupções de endereços contíguos e com PSW. O V.I. começa na posição 0 de memória e as RSIs estão, respectivamente, nas posições 150, 350 e 400. Cada linha pode ser interrompida pelas outras, menos por si mesma e os 3 bits menos significativos do PSW habilitam e desabilitam as interrupções nas linhas. Escreva um programa Assembly que implemente esta situação, lembrando que os sinais de controle gerados pelo GSI são: PUSH PC

PUSH PSW

JUMP (ENDi + 1)

MOV ENDi, PSW

INSTALANDO RSIs

Seja agora uma arquitetura onde as linhas L1, L2 e L3 estão associadas a um Vetor de Interrupções de endereços contíguos e com PSW. O V.I. começa na posição 0 de memória e as RSIs estão, respectivamente, nas posições 150, 350 e 400. Cada linha pode ser interrompida pelas outras, menos por si mesma e os 3 bits menos significativos do PSW habilitam e desabilitam as interrupções nas linhas. Escreva um programa Assembly que implemente esta situação, lembrando que os sinais de controle gerados pelo GSI são:

Instalando o VI:

ORG 0

ADR RS1 ou DW 150

Instalando as RSIs: ORG 150 RS1: ...

... RTI ORG 350

RS2: ... ... RTI ORG 400

RS2: ... ... RTI

Definindo as máscaras:

psw1: PSW

L3 L2 L1

psw2:

psw3:

1102

1012

0112

DW 110

ADR RS2 ou DW 350 DW 101

ADR RS1 ou DW 400 DW 011

PUSH PC

PUSH PSW

JUMP (ENDi + 1)

MOV ENDi, PSW

INSTALANDO RSIs

. PRIORIDADE POR NÍVEL . PRIORIZAR ATENDIMENTO DE INTERRUPÇÕES SIMULTÂNEAS . Fixa . por Varredura . EXCEÇÕES INTERNAS . EXCEÇÕES PROGRAMADAS

QUESTÕES ADICIONAIS

Interrupção

Interrupções são uma sub-classe das EXCEÇÕES

Exceções

Exceções ocorrem quando o fluxo normal de um programa precisa ser temporariamente interrompido.

São geradas por fontes internas ou externas ao programa em execução

Estado do processador antes da exceção é sempre preservado

ARM possui 7 tipos de exceções. Cada uma relacionada a um modo de operação

Pode ocorrer mais do que uma exceção ao mesmo tempo (atendimento prioritário)

Eventos

Pino de Reset do processador ativado

Pino de Interrupção rápida (FIQ) foi ativado

Pino de Interrupções (IRQ) foi ativado

Executar um Breakpoint

Executar uma instrução em um endereço de memória inválido (prefetch abort)

Instrução de transferência de dados à memória tentou acesso a um endereço inválido (Data Abort)

Executar uma interrupção de software (SWI)

Processador não reconhece instrução corrente (Undefined Instruction)

Quais eventos são capazes de gerar uma exceção?

Prioridade de Atendimento

Exceções

Prioridade Exceção

1 (máxima) Reset

2 Data Abort

3 FIQ

4 IRQ

5 Prefetch Abort

6 SWI

6 UI

Rotina de Exceção

Vetor de Endereço

2

3

Programa Principal

1

Atendimento

Exceções

Atendimento da Exceção

1. Ao receber uma exceção, o processador termina de executar a instrução atual, interrompe o programa e muda o modo de operação para o modo correspondente ao evento.

2. O estado da máquina e alguns registradores são colocados na pilha • 8 registradores são salvos: PC, R0-R3, R12, LR e SPSR

3. Endereço da exceção é buscado no Vetor de Interrupção

4. Registrador LR recebe o endereço de retorno

5. Primeira instrução da Rotina de Exceção é executada • SPSR recebe a máscara de Interrupção (Ver slide 386) • Instruções especiais (MRS/MSR) para definir campos específicos do SPSR

6. Rotina de Exceção é executada

7. Retorno da Exceção é realizado pela instrução MOVS PC, LR (“equivalente” ao RTI)

8. Estado anterior à execução e os 8 registradores são recuperados da pilha

IRQ

Data Abort

Prefetch Abort

SWI

UI

Reset

0x1C

0x18

0x14

0x10

0x0C

0x08

0x04

0x00

16 + N

16

FIQ

Int Ext. 0

RESERVED

Int Ext. N 0x40 + 4*N

0x40

7-10

6

5

4

3

2

1

N/A

End

Vetor de Int.#

Vetor de Interrupção

• Permite até 496 interrupções externas - Implementação definida pelo usuário

• Contém os endereços das Exceções

• Vetor pode ser realocado caso seja necessário

- Usar um registrador offset para isso

• Cada exceção possui um número correspondente para ser feito o mapeamento

• - Valor usado pelo Registrador de Estado e Controlador de Interrupções

Interrupções Externas

• São atendidas através de duas linhas de interrupção: FIQ e IRQ

• São controladas por um Controlador Externo de Interrupções (Nested Vectored Interrupt Controller - NVIC)

Cortex-Mx Processor Core

INTISR[0] … INTISR[N]

INTNMI

NVIC

Cortex-Mx Integration Layer

• Prioridade programada pelo usuário

• Suporta até 496 interrupções

• Suporta uma interrupção não-mascarada

Interrupções

• Podem ser habilitadas ou desabilitadas através do Registrador de Estado

Core Execution

Higher Priority

Base CPU

IRQ2

IRQ1

Foreground ISR2 ISR1 ISR2 Foreground

Time

IRQ3

ISR3

Exemplo: Atendimento prioritário

Interrupções de Software

• “Exceções Programadas”

• Instruções que equivalem ao atendimento de um sinal de interrupção

• Reproduzem operações de I/O

• #ArmSim: Exemplo - LEDs

CONCLUSÕES • Interrupção é a quebra da sequência de operação de forma a atender eventos

especiais (entrada de dados atendendo solicitações de periféricos, sinal de sensor, sinais internos, etc

• O GSI (Gerador de Sinais de Interrupção) é o hardware responsável por atender as solicitações de interrupção e desviar a execução do programa para a Rotina de Serviço de Interrupção (RSI)

• Ao desviar a execução do programa, o GSI armazena o endereço de retorno (PC) e o estado atual (PSW) do processador. Ao retornar, restaura estas condições

• Em geral, os endereços das RSI ficam armazenados em um Vetor de Interrupções

• As vezes faz-se necessário estabelecer um novo estado (PSW) para o processador enquanto ele executa a RSI com o objetivo de controlar quem pode interromper essa rotina

• Este novo PSW pode estar no próprio Vetor de Interrupções ou na primeira linha da RSI

• Por fim, o projeto das interrupções é um compromisso entre o hardware e o programador, já que este é quem escreverá os programas de instalação das Interrupções

EXERCÍCIOS

INTERRUPÇÃO COM VETOR DE INTERRUPÇÃO SEM MASCARAMENTO

PUSH PC

PUSH PSW

JUMP (ENDi )

Seja uma arquitetura onde as linhas L1, L2 e L3 estão associadas a um

Vetor de Interrupções de endereços contíguos. O V.I. começa na

posição 0 de memória e as RSIs estão, respectivamente, nas posições

100, 300 e 400. Cada linha pode ser interrompida apenas por si mesma

e os 3 bits menos significativos do PSW habilitam e desabilitam as

interrupções nas linhas.

Escreva um programa Assembly que implemente esta situação, sendo os

sinais de controle gerados pelo GSI:

INTERRUPÇÃO POR NÍVEL

PUSH PC

PUSH PSW

JUMP (ENDi )

Seja uma arquitetura com três linhas de interrupção. O programa

principal está armazenado na posição 1000 de memória. As rotinas de

serviço, nas posições 100, 200 e 300. Cada rotina de serviço poderá ser

interrompida pelas outras linhas mas não pela própria linha. A arquitetura

usa máscara de interrupção nos bits menos significativos da PSW.

Suponha que os endereços dos vetores de interrupção sejam 1, 10 e 20

e que o GSI gere os seguinte sinais de controle:

a) Seria possível implementar o funcionamento proposto em uma

arquitetura de mascaramento por nível?

b) Caso seja possível, qual condição necessita.