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!