Traps - IC

Propaganda
Organização Básica de
computadores e linguagem de
montagem
Prof. Edson Borin
2o Semestre de 2011
Exceções
Exceções
• Interrupções: eventos causados por dispositivos
externos ao processador.
–Ex: dispositivo de entrada e saída.
–Estes eventos podem ocorrer a qualquer momento.
• Exceções: eventos causados pelo próprio processador.
–Causados durante a execução de instruções.
–Somente sob certas circunstâncias!
•Ex: divisão por zero...
Exceções
• Exemplos de exceções:
–Divisão por zero
–Instrução inexistente
–Acesso a região de memória protegida
–Falta de página
• São eventos infrequentes: Exceções à regra!
• Não é interessante verificar se o valor do divisor é
zero toda vez que realizarmos uma divisão.
–Podemos supor que o divisor não é zero. Se for
(caso raro) o processador gera uma exceção!
Exceções
dw trata_div_zero
...
cmp r1, 0
jz trata_div_zero
div r2, r1
...
...
cmp r1, 0
jz trata_div_zero
div r2, r1
...
trata_div_zero:
...
trata_div_zero:
...
(a) Verificar o divisor antes.
(b) Usar o mecanismo de
Exceções.
Exceções
• O tratamento de uma exceção é similar ao tratamento
de uma interrupção.
–O processador salva o contexto
–Desvia a execução para o tratador da exceção
•Tipicamente, o endereço do tratador é
armazenado no vetor de interrupções.
–Após tratar a exceção, o tratador pode retornar ou
abortar o programa.
Traps
ou
Interrupções por
software
Traps / Interrupções por Software
• O sistema operacional tem vários papéis:
–Abstrair o funcionamento dos dispositivos de
entrada e saída.
–Proteger o sistema contra a execução de código
malicioso.
–Gerenciar o acesso aos dispositivos.
–Etc...
Traps / Interrupções por Software
• Ex: Abstrair o funcionamento dos dispositivos de
entrada e saída.
–Como escrever um dado em um arquivo no disco
rígido da Seagate, ou da Hitachi?
–E se o arquivo estiver em um pen-drive?
Traps / Interrupções por Software
• Ex: Abstrair o funcionamento dos dispositivos de
entrada e saída.
–Como escrever um dado em um arquivo no disco
rígido da Seagate, ou da Hitachi?
–E se o arquivo estiver em um pen-drive?
• O sistema operacional provê uma interface bem
definida para acessar arquivos e abstrai os detalhes de
acesso ao dispositivo.
–O driver do dispositivo cuida dos detalhes!
• O programa pode acessar o dispositivo diretamente?
Sem o auxílio do sistema operacional???
Traps / Interrupções por Software
• Ex: Proteger o sistema contra a execução de código
malicioso.
–O que acontece se um programa executar o seguinte
trecho de código:
1 trecho_malicioso:
2
cli
; desabilita interrupções
3 laco:
4
jmp laco
; laço infinito
Traps / Interrupções por Software
• Precisamos de um meio de:
–proteger o sistema de código malicioso!
–permitir que o programa do usuário chame o
sistema operacional para executar tarefas (E/S, etc...)
• Proteger o sistema de código malicioso:
–Restringir o código de usuário à execução de
instruções seguras. Não permitir a execução de in,
out, cli, sli, e outras.
• Para chamar o sistema operacional:
–Podemos usar call?
Traps / Interrupções por Software
• Vamos supor que nós restringimos o código do
usuário.
–Se nós chamarmos o SO com um call, o SO
conseguirá executar in, out, cli e outras instruções
protegidas?
Traps / Interrupções por Software
• Vamos supor que nós restringimos o código do
usuário.
–Se nós chamarmos o SO com um call, o SO
conseguirá executar in, out, cli e outras instruções
protegidas? Não
• Solução: 2 modos de execução
–Supervisor: todas as instruções estão disponíveis.
–Usuário: apenas instruções seguras estão disponíveis.
Traps / Interrupções por Software
• Como ir para o modo supervisor e chamar o SO ao
mesmo tempo?
–Traps, ou interrupções por Software
• Uma interrupção por Software invoca uma função
registrada no vetor de interrupções!
–Ajuda a garantir que apenas o SO executará no
modo superusuário
• Faíska:
–Instrução: sys
Traps / Interrupções por Software
• Processador começa (boot) no modo supervisor.
• O kernel do SO inicializa os vetores de interrupções,
mapas de memória, etc.
• SO prepara uma pilha de mentira
–Registrador de estado da pilha tem modo usuário
(Bit S=0)
–Endereço de retorno na pilha tem início do
programa a ser executado.
–IRET
Traps / Interrupções por Software
• O programa está executando
–Se o programa precisa chamar o sistema
operacional, executa uma interrupção por Software
•sys 10h
–O processador gera uma interrupção, chamando o
tratador cadastrado no vetor de interrupções.
•Neste momento o processador entra no modo
supervisor.
–O tratador do SO realiza a operação e retorna com
IRET, trazendo a execução de volta para a aplicação
no modo usuári
TrapsChamada
/ Interrupções
por Software
ao Sistema
; *************************************!
; Chamada ao sistema operacional: write!
; *************************************!
; Descrição!
;
Chamada ao sistema operacional para escrever uma cadeia de bytes!
;
em um dispositivo de E/S!
;!
; Tipo da interrupção usada: 12h!
;!
; Parâmetros de entrada!
;
r0 com número do dispositivo !
;
r1 com endereço do início da cadeia de bytes!
;
r2 com comprimento, em bytes, da cadeia!
;!
; Retorno!
;
r0 com zero se não houve erro!
;
r1 com número que descreve o erro ocorrido!
Exemplo
• Escreva uma função que usa a chamada ao
sistema WRITE para escrever na tela uma cadeia
de caracteres terminada por ‘\0’ (convenção C).
EscreveCadeia
Exemplo
; Constantes!
WRITE equ 12h
TELA equ 1
; tipo de chamada ao sistema!
; descritor do dispositivo tela!
**************!
EscreveCadeia:!
**************!
mov
r1,r0
; r1 fica com endereço inicial da cadeia!
set
r2,-1
; inicialmente vamos calcular o número de!
!
!!
; caracteres da cadeia, e armazear em r2!
conta:!
add
r2,1
; conta mais um caractere!
ldb
r3,(r0)
; novo caractere!
add
r0,1
; já avança apontador!
cmp
r3,0! !
; procura final da cadeia!
jnz
conta
; continua se não terminou !
set
r0,TELA
; r1 e r2 já estão corretos!
sys
WRITE
; executa chamada ao sistema!
ret
; indicador de erro é ignorado!
; e retorna!
Download