ARQUITETURA DE COMPUTADORES II
Modos de Transferência
Interrupção
Prof. César Augusto M. Marcon
2 / 28
Interrupção
•
Vantagem
– Evita tempo desperdiçado com múltiplos testes, que é inerente ao polling
•
Funcionamento
– CPU/controlador é avisado pelo periférico que este deseja transmitir/receber
dados
•
Principais características de interrupções de E/S
– Assincronismo em relação a qualquer instrução
•
Ocorre a qualquer instante
– Seu tratamento NÃO quebra a execução da instrução corrente
•
Teste de interrupção é feito depois da execução da instrução
– Diferenciar
•
Interrupção de hardware externo a CPU
– Origem de um periférico
•
Interrupção de hardware interno a CPU
– Origem de um circuito interno ao processador (exemplo: exceções  divisão por zero)
•
Interrupção de software
– Chamadas ao sistema operacional ou outros programas residentes
3 / 28
Interrupção – Procedimento ao Ocorrer Interrupção
1. Priorizar interrupções
•
Atender de maior prioridade no caso de simultaneidade de interrupções
2. Tratamento de interrupções aninhadas
•
•
Desabilitar interrupções, caso não seja permitido aninhamento de interrupções
Prosseguir normalmente, caso contrário
3. Salvar contexto (PC, registradores)
•
•
4.
5.
6.
7.
8.
Salvamento rápido (um ciclo  próprio processador)
Salvamento lento (diversos ciclos  seqüência de instruções para por na
pilha)
Identificar periférico
Desviar PC para rotina de tratamento da interrupção
Executar programa de interrupção
Recuperar contexto
Reabilitar interrupções (caso tenham sido desabilitadas)
4 / 28
Interrupção - Exemplo: microcontrolador 8051 (Intel)
• Características
– 4 pinos dedicados à
interrupção
• INT0, INT1, TIMER0,
TIMER1
– Interrupções pode ser
habilitada ou não por software
• Exemplo
– Quando há pedido de
interrupção no pino INT0, o
PC é posto em uma pilha, e
PC recebe valor 3
5 / 28
TRATAMENTO DE INTERRUPÇÕES SIMULTÂNEAS
Interrupção associada a polling
• Funcionamento
– Opera do mesmo modo que na interjeição
• Ou lógico de todos os pedidos de interrupção é enviado ao
processador/controlador
• Vantagem
– Menor número de pinos de E/S
– Menor custo de hardware
• Conseqüência
– Lento
• São feitos testes seqüenciais para atendimento dos periféricos
6 / 28
Interrupção Daisy Chain (Serial)
•
O que é?
– Conexão em série dos dispositivos de E/S
•
Característica
– Primeiro a receber Int_Ack tem maior prioridade  prioridade implícita
•
Funcionamento
1. Quando há pedido de interrupção, CPU aceita habilitando sinal Int_Ack
2. Primeiro dispositivo que tiver pedido de interrupção ativo, envia seu
endereço para CPU
3. Desabilita demais periféricos (propagando PO com 0)
7 / 28
Interrupção Paralela
•
Característica
– Vários periféricos podem solicitar
simultaneamente interrupções porém tem
codificador de prioridade
•
Organização do controlador de
interrupção
8 / 28
Interrupções no x86 (Intel)
1. Externas
– Periféricos
• Teclado
• Impressora
• Placa comunicação, …
– Ativação
• Através de pinos do µp
– INTR (interrupt request)
– NMI (interrupção não mascarável)
– Exemplo de não mascarável
• Falta de luz ou paridade em memória
2. Internas ao processador
– Também denominadas exceções
– Exemplo
• Divisão por 0
9 / 28
Interrupções no x86 (Intel)
3. Interrupções de software (traps)
• Não são verdadeiras interrupções  são chamadas por software
• Instrução típica
– INT xx
•
Exemplos
ASSEMBLY
mov AH, 09H
mov DX, offset ‘alo mamãe$’
int 21H
C
#include <dos.h>
void main( void )
{
union REGS pregs;
struct SREGS sregs;
char Message[20] = "alo mamãe";
pregs.h.ah = 0x09;
sregs.ds = FP_SEG( Message );
pregs.x.dx = FP_OFF( Message );
intdosx( &pregs, &pregs, &sregs );
}
10 / 28
Vetor de Interrupções no x86 (Intel)
• Mapa de memória
– Primeiro 1k de memória, sendo reservado 4 bytes por interrupção
• 256 endereços para interrupções
• Endereços apontam para função armazenada na BIOS
ou definida pelo programador
– Endereços podem ser modificados, permitindo utilizar outro
programa para tratar a interrupção
– BIOS Garante compatibilidade entre os diferentes computadores
– Apesar do hardware ser diferente, a BIOS se encarrega de realizar a
interface entre software e máquina
• Operação
– Quando computador é ligado, o IP é desviado para posição de
memória FFF0 (16 posições abaixo de 1M)
– Inicia a rotina da BIOS
– Em geral é efetuado o POST (Power-On Self Test), verificando-se
todo o hardware
11 / 28
Tabela das Interrupções
Endereço valor
Significado
Internas
0000:0000 00H
Divide by Zero Interrupt
0000:0004 01H
Single Step Interrupt
0000:000C 03H
Breakpoint
0000:0010 04H
Arithmetic Overflow Handler
Não mascarável
0000:0008 02H Non-Maskable Interrupt
Mascaráveis
0000:0028 0AH
VGA Retrace (AT Slave)
0000:002C 0BH
Serial Port 2
0000:0030 0CH
Serial Port 1
0000:0034 0DH
Hard Disk
0000:0038 0EH
Floppy disk
0000:003C 0FH
Parallel Port
0000:01C0 70H
Real Time Clock
0000:01C4 71H
LAN Adapter
0000:01C8 72H
Reserved
0000:01CC 73H
Reserved
0000:01D0 74H
Mouse
0000:01D4 75H
80287 NMI Error
0000:01D8 76H
Hard disk controller
0000:01DC 77H
Reserved
Int de HW
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
12 / 28
Procedimento do Tratamento de Interrupções
1.
Periférico faz requisição ao controlador de interrupção, através das linhas IRQ
–
2.
3.
4.
5.
6.
Se interrupção está habilitada, controlador enviará sinal ao processador
Controlador de interrupção repassa pedido de interrupção ao processador (INTR)
Processador envia confirmação de aceite da interrupção (INTA)
Controladora de interrupção repassa periférico
Periférico coloca seu endereço/dados no barramento
Endereço referencia posição de memória no vetor de interrupção (primeiro 1K de
memória)
–
Posição de memória aponta para endereço da rotina de tratamento de interrupção
13 / 28
Controlador de Interrupção (PIC)
•
Registradores
–
–
–
ISR: interrupção que está sendo atendida
IRR: periférico que está requerendo interrupção
IMR: máscara de interrupção
14 / 28
Cascateamento de dois PICs
15 / 28
Cascateamento de dois PICs
•
Acesso aos registradores
– Endereços do Master: 20H e 21H
– Endereços do Slave: A0H e A1H
•
Leitura dos registradores
– Na leitura de IRR e ISR primeiro é enviada uma palavra de controle.
Posteriormente, lê-se o estado da porta
– Rotina de tratamento de interrupção deve avisar PIC que interrupção
terminou. Se a interrupção pertence ao Slave, avisar os 2 PICs. EOI = end of
interruption
– Por default todas as interrupções estão habilitadas (iguais a zero). Pode-se
ler ou escrever IMR para habilitar ou não as interrupções
16 / 28
Como Utilizar Interrupções
•
TECLADO
–
Interceptar o teclado, por exemplo, para reconhecer hot-keys
#include <stdio.h>
#include <dos.h>
#define INTKEY 0x09
int cont;
void interrupt New_Key_Int();
/* interrupt prototype */
void interrupt (*Old_teclado)(); /* interrupt function pointer */
void interrupt New_Key_Int()
{
cont++;
Armazena endereço original
printf("Tecla %d\n", cont);
da rotina de tratamento de
Old_teclado();
interrupção de teclado
}
int main()
{
Ajusta novo endereço de
cont = 0;
rotina de tratamento de
Old_teclado =_dos_getvect(INTKEY);
_dos_setvect(INTKEY, New_Key_Int);
interrupção
for( ; cont < 10; )
; /* espera 10 teclas */
_dos_setvect(INTKEY, Old_teclado);
puts("OK");
return 1;
}
Recupera endereço armazenado
17 / 28
Como Utilizar Interrupções
•
TECLADO
–
Interceptar o control break
#include <stdio.h>
#include <dos.h>
void interrupt get_out();
void interrupt (*oldfunc)();
int looping = 1;
void main()
{
oldfunc = _dos_getvect(5);
_dos_setvect(5,get_out);
while (looping);
_dos_setvect(5,oldfunc);
}
void interrupt get_out()
{
looping = 0;
}
18 / 28
Mascaramento de Interrupções
#include <stdio.h>
#include <dos.h>
#define MASTER 0x20
#define SLAVE 0xA0
#define MASK 0x01
int main(void)
{
int iIRQ = 14, iPort;
iPort = ( iIRQ <= 7 ) ? MASTER : SLAVE ;
iPort += MASK;
/* select masking port */
iIRQ &= 0x0007;
printf("porta %d \n", inp( iPort ) );
outp( iPort, inp( iPort ) | ( 1 << iIRQ ) );
// pega o estado atual e seta o bit (iIRQs deslocamentos a esquerda)
}
19 / 28
Exercícios
1. Explique as principais diferenças entre E/S programada e E/S não
programada
2. Mostre o diagrama de um sistema de E/S por interrupção tipo Daisy-Chain.
Explique-o
3. Compare polling, interjeição e interrupção em nível de hardware. Fale sobre
vantagens e desvantagens
4. Faça a mesma comparação acima agora em nível de software. Mostre como
seriam rotinas para tratamento dos métodos. Considere que existem 3
periféricos para serem verificados
5. Como funciona o mecanismo de mascaramento de interrupções? O que
significa interrupção não mascarável? Dê um exemplo de aplicação
6. Como é realizado o mecanismo de tratamento de interrupção em um
microprocessador? Cite as principais etapas do processo, comparando com
o tratamento a atendimento de chamada à sub-rotina
20 / 28
Exercícios
7.
(ENADE 2005) Processadores atuais incluem mecanismos para o tratamento de
situações especiais, conhecidas como interrupções. Em uma interrupção, o fluxo
normal de instruções é interrompido para que a causa da interrupção seja tratada.
Com relação a esse assunto, assinale a opção correta:
a. Controladores de entrada e saída geram interrupções de forma síncrona à execução
do processador, para que nenhuma instrução fique incompleta devido à ocorrência da
interrupção
b. Quando uma interrupção ocorre, o próprio processador salva todo o seu contexto
atual, tais como registradores de dados e endereço e códigos de condição, para que
esse mesmo contexto possa ser restaurado pela rotina de atendimento da interrupção
c. O processador pode auto-interromper-se para tratar exceções de execução, tais como
um erro em uma operação aritmética, uma tentativa de execução de instrução ilegal ou
uma falha de página em memória virtual
d. Rotinas de tratamento de interrupção devem ser executadas com o mecanismo de
interrupção inibido, pois esse tipo de rotina não permite aninhamento
e. O uso de interrupção para realizar entrada ou saída de dados somente é eficiente
quando o periférico trata grandes quantidades de dados, como é o caso de discos
magnéticos e discos ópticos. Para periféricos com pouco volume de dados, como
teclados e mouses, o uso de interrupção é ineficiente
21 / 28
Exercícios
7.
Comentários sobre a questão (ENADE 2005):
a. Controladores de entrada e saída geram interrupções de forma síncrona à execução do
processador, para que nenhuma instrução fique incompleta devido à ocorrência da interrupção 
Resposta errada, pois não há sincronismo. Os sistemas (controlador e processador) são
essencialmente assíncronos
b. Quando uma interrupção ocorre, o próprio processador salva todo o seu contexto atual, tais como
registradores de dados e endereço e códigos de condição, para que esse mesmo contexto possa
ser restaurado pela rotina de atendimento da interrupção  Resposta dúbia. O processador
pode salvar o contexto, ou o contexto pode ser salvo em pilha, dependendo do tipo de mecanismo
implementado. A recuperação do contexto pode ser feita ao término do rotina de atendimento de
interrupção, com recuperação da pilha ou após retornar desta, de forma automática pelo próprio
processador
c. O processador pode auto-interromper-se para tratar exceções de execução, tais como um erro em
uma operação aritmética, uma tentativa de execução de instrução ilegal ou uma falha de página em
memória virtual  Resposta certa. Este mecanismo é implementado em quase a totalidade dos
processadores comerciais
d. Rotinas de tratamento de interrupção devem ser executadas com o mecanismo de interrupção
inibido, pois esse tipo de rotina não permite aninhamento  Resposta errada. O erro ocorre
principalmente devido a palavra devem. Dependendo da arquitetura do processador não é
permitido o aninhamento de interrupções. Este é o caso típico de tratamento de interrupções
rápidas que somente tem um banco de registradores espelho. Porém, muitos processadores
permitem aninhamento de ints
e. O uso de interrupção para realizar entrada ou saída de dados somente é eficiente quando o
periférico trata grandes quantidades de dados, como é o caso de discos magnéticos e discos
ópticos. Para periféricos com pouco volume de dados, como teclados e mouses, o uso de
interrupção é ineficiente  Resposta errada. O que pode ser considerado errada é dizer que int
é somente eficiente se tratar de transferência com grande quantidade de dados. Além do mais,
depende do que vem a ser a definição de eficiência. No contexto desta questão, a eficiência tem a
ver apenas com a velocidade de execução do programa. Aqui não são levadas em consideração
questões como código necessário, consumo de energia, etc...
22 / 28
Exercícios Extras
1. Mostre como é feito o tratamento de interrupções de hardware nos
computadores baseados em microprocessadores 80x86
2. Dado um programa que trata uma comunicação através de interrupção,
pede-se:
–
–
–
–
O que pode acontecer se o programa foi escrito sem análise de poder ser interrompido
em qualquer trecho?
Mostre como poderia ser impedida a interrupção de entrar em qualquer ponto do código
Qual o mecanismo adotado em hardware para que o procedimento acima seja
atendido?
Mostre como poderiam ser implementadas rotinas de leitura e escrita serial através de
interrupção que não necessite de trechos de código atômicos. A explicação deve
salientar os buffers e ponteiros
23 / 28
Exercícios Extras
3. Comparar qual modo de comunicação tem melhor resultado para o problema
descrito a seguir. A comparação deve elucidar problemas de complexidade
de elaboração do programa, tratamento e verificação de erros e tempo de
processamento
–
–
–
–
–
–
–
–
–
A execução do programa é efetuada em laços que requerem em média 2.100 ciclos,
não considerando trechos de código necessários para teste de polling ou interjeição
Existem 4 periféricos que devem ser avaliados
Considere que o teste de polling é efetuado duas vezes a cada laço de programa
Os testes para verificar se algum dispositivo deseja se comunicar, seja por polling ou
interjeição, consome 20 ciclos
As rotinas de execução do polling consomem 80 ciclos quando o teste de polling retorna
verdadeiro
A rotina de interjeição, para verificar qual dispositivo deseja se comunicar, consome
200 ciclos
O tratamento da rotina de interrupção consome para qualquer dispositivo 800 ciclos, em
média
Devido às características do programa são necessários 30 pontos atômicos no código.
Ou seja, devem ser inseridas funções que impossibilitem a entrada de interrupção em
30 pontos do programa
As rotinas que mantém o código atômico consomem 50 ciclos
4. Altere os dados do programa acima de forma a obter melhores resultados
para os dois outros métodos com relação ao tempo de processamento
24 / 28
Exercícios Extras
5. Dado o projeto de um sistema embarcado, cujo acesso do processador ao
dispositivo de entrada/saída seja controlado por interrupção. Considere que
o tratamento da rotina de interrupção consuma em média 100 instruções
para um processador com CPI média 1.5 e freqüência de operação 100 MHZ.
Para uma comunicação assíncrona P82 (paridade par, 8 bits de dados e dois
stop bit além do start bit), com 144.000 bps e uma UART com um registrador
de buffer e um de deslocamento, calcule:
–
–
–
–
Qual a taxa máxima de transmissão ideal?
Qual a taxa efetiva de transmissão?
Qual o tempo necessário para transmitir 100 Kbytes para cada caso acima?
Faça um esboço para ilustrar os instantes de tempo onde ocorre transmissão do dado,
a comunicação CPU com dispositivo de E/S, e o tempo em que o processador está em
atividades interrupção
25 / 28
Exercícios Extras
Resposta (5):
Acesso (interrupção)
Retorno da interrupção = 100 instruções
CPI média = 1,5
Freqüência = 100 MHz
Tempo da interrupção = 100 * 1.5 * 1/100MHz = 1,5 µs
Taxa = 144.000 bps (bits por segundo)
UART = 1 buffer + 1 shift register
Quantidade = 100 Kbytes (KB)
A) Taxa efetiva
83,33µs
1,5µs
(preenche o buffer)
B) Tempo
(100 B * 1024) / 12.000 Bps = 8,5 seg
C) Ganho
8,5 seg  100%
1024 seg  X
X = 120 vezes
26 / 28
Exercícios
6. (Igual ao exercício 5, mas com polling) Dado o projeto de um
sistema embarcado, cujo processador acessa um dispositivo de
entrada/saída por polling a uma taxa média de 1 acesso a cada
20 ms. Considerando uma comunicação assíncrona P82 (paridade
par, 8 bits de dados e dois stop bit além do start bit), com
144.000 bps e uma UART com um registrador de buffer e um de
deslocamento, calcule:
– Qual a taxa máxima de transmissão ideal (não deve ser considerado o tempo
de polling do processador)?
– Qual a taxa efetiva de transmissão?
– Qual o tempo necessário para transmitir 100 Kbytes para cada caso acima?
– Faça um esboço para ilustrar os instantes de tempo onde ocorre transmissão
do dado, a comunicação CPU com dispositivo de E/S, e o tempo em que o
processador está em atividades entre polling
27 / 28
Exercícios
Dados (8 bits)
RESPOSTA (6):
Acesso (polling) = 1/20 msDados (8 bits)
Comunicação = P82 
STT
P
STP STP
STT – Start Bit
P - Paridade
STP – Stop Bit
Taxa = 144.000 bps (bits por segundo)
UART = 1 buffer + 1 shift register
Quantidade = 100 Kbytes (KB)
A) Taxa máxima = 144.000 bps / 12 b = 12.000 Bps (bytes por segundo)
Tempo = (100 B * 1024) / 12.000 Bps = 8,5 seg...
...
B) Taxa efetiva
...
1/12.000
= 83,33µs
20 ms
Comunicação CPU dispositivo
de E/S (não fornecido)
C) Taxa efetiva = 2 B / 20 ms = 1 B / 10 ms = 100 B/seg (desconsiderando o tempo de
comunicação da CPU com dispositivos de E/S).
Tempo = (100 B * 1024) / 100 Bps = 1024 seg
28 / 28
Exercícios Extras
7. Calcule qual o limite máximo de velocidade serial para o acesso ao
dispositivo de E/S não leve a comunicação a ter momentos de ociosidade.
Faça isto tanto para o acesso com polling (exercício 6) como para o acesso
com interrupção (exercício 5)
RESPOSTA
A) Com acesso a polling
Tempo de polling = 20 ms
Número de bytes transmitido = 2
Velocidade máxima = 2 B / 20ms = 100 B/s
Pra protocolo N82
100 B/s  8 bits
X  12 bits
X = 150 b/s
B) Acesso com interrupção
Tempo de tratamento de interrupção = 1,5 µs
A cada interrupção insere um byte
Taxa = 1 B / 1,5 µs = 0,67 MB/s
0,67 MB/s  8 bits
X  12 bits
X = 1 Mb/s
Download

Modos de Transferencia (Interrupcao).