• Nenhum resultado encontrado

10- AulaIHS-Modo Protegido-Interrupcao EInstrucoes

N/A
N/A
Protected

Academic year: 2021

Share "10- AulaIHS-Modo Protegido-Interrupcao EInstrucoes"

Copied!
33
0
0

Texto

(1)

Interface Hardware-Software

Modo Protegido de Operação de

Processadores x86 – Interrupções e

Instruções

(2)

Interrupções e Exceções em Modo Protegido

 O suporte e o mecanismo de tratamento de interrupções e exceções é diferente em relação ao modo real

Registradores específicos Descritores

Tabelas de descritores de interrupções

 Contudo a quantidade de vetores de interrupção continua a mesma

– 256 vetores (0 – 255)

 Com o modo protegido, alguns números de vetores são consagrados a tipos de exceção/interrupção relacionados a proteção

- 13 – General Protection Fault - 14 – Page Fault

(3)
(4)

Tipos de Exceção

Fault geralmente pode ser corrigida e permite que o

programa seja reiniciado sem perda de continuidade

- Endereço de retorno para o fault handler(CS e EIP) é

instrução que gerou o fault em vez da instrução que segue

- Exemplo: page fault

Trap é gerada logo em seguida a instrução que a causou e

permite que o programa continue

- Endereço de retorno do trap handler é a instrução seguinte àquela que gerou a trap

- Exemplo: Overflow

Abort não aponta o local preciso da instrução que causou

a exceção e nem permite o reinicio do programa

(5)

Suporte a Interrupções/Exceções

 Transferência de controle para as rotinas de tratamento (handlers) é feita através de interrupt gates e trap gates

Descritores destes tipos de gates ficam na IDT (Interrupt

Descriptor Table)

(6)

IDT

 Possui três tipos de descritores:

- Interrupt Gates - Trap Gates - Task Gates

 No caso do handler estar em outra tarefa(task), um task gate é utilizado

 Cada descritor tem 8 bytes

(7)

IDTR

 O registrador IDTR tem 48 bits e guarda o endereço base de 32 bits e o limite de 16 bits da IDT

 Contudo a IDT só deve ter no máximo 256 entradas de 8 bytes, portanto só seriam necessários 11 bits para o limite

 O IDTR é carregado com o endereço base e o limite, geralmente no ato de inicialização do SO

- Instrução LIDT carrega o IDTR

(8)
(9)
(10)

Interrupt Gate x Trap Gate

 A diferença entre um interrupt gate e um trap gate é a forma que o processador trata a flag IF no registrador EFLAGS

 Interrupt Gate

- Processador coloca IF (Interrupt Flag) para 0 para impedir

que outras interrupções de HW (mascaráveis) interrompam o handler

- Quando é feito um IRET, o processador restaura a flag  Trap Gate

(11)

Tratando Interrrupções/Exceções

 Se o índice para o handler apontar para um descritor do tipo interrupt ou trap gate, o processador trata a

interrupção/exceção de forma semelhante a um CALL para um call gate

 Se o índice para o handler apontar para um descritor do tipo task gate, o processador faz um task switch para a

tarefa do handler de forma similar a um CALL para um task gate

(12)
(13)
(14)

Troca de Pilha Durante Tratamento da Interrupção

 Quando o handler é localizado em um nível de privilégio maior (numericamente menor), ocorre uma troca de pilha

 Não é possível a transferência de execução para um handler com nível de privilégio menor (numericamente maior)

(15)
(16)

Instruções Privilegiadas

 Existem instruções que só podem ser executadas em nível de privilégio zero

 Tipicamente são instruções que manipulam registradores e estruturas de dados que dão suporte à proteção

- Registradores de controle (CR0-CR4)

- Registradores de tabela de descritores (GDTR,LDTR,IDTR) - Tabela de descritores

(17)

Exemplos de Instruções Privilegiadas

Instrução Descrição Exemplo

LGDT src Carrega endereço base e limite(src) de GDT no registrador

GDTR

lgdt [0x10000]

LSL dst,src Carrega no registrador dst, o limite do segmento dado pelo seletor em

src

mov ebx, cs lsl edx,[ebx]

LIDT src Carrega endereço base e limite (src)de IDT no registrador IDTR

lidt [0x100]

MOV regs de controle,src

Carrega o que está em src em um registrador de controle

mov eax,cr0 or al,1

mov cr0,eax

ARPL dst,src Ajusta (iguala) o RPL do seletor em dst ao RPL do seletor em src

pop dx pop bp

(18)

Exemplo do ARPL

(19)

Passando de Modo Real para Modo Protegido

 O boot começa em modo real e depois ocorre a mudança para modo protegido

- Multi-stage Boot loader

- Permite o carregamento e execução do kernel de 32 bits

 Algumas etapas são imperativas para esta mudança:

- Criação e inicialização da GDT - Criação e inicialização da IDT

- Carregamento de registradores de tabelas com os endereços

base das tabelas

- Inibição de interrupções externas

- Alterar registrador de controle para rodar em modo protegido - Inicialização dos registradores de segmentos com seletores

(20)

Criando e Inicializando o GDT

gdt_data:

dd 0 ; null descriptor dd 0

; gdt code: ; code descriptor dw 0FFFFh ; limit low dw 0 ; base low db 0 ; base middle db 10011010b ; access db 11001111b ; granularity db 0 ; base high

; gdt data: ; data descriptor dw 0FFFFh ; limit low dw 0 ; base low db 0 ; base middle db 10010010b ; access db 11001111b ; granularity db 0 ; base high end_of_gdt: toc:

dw end_of_gdt - gdt_data - 1 ; limit (Size of GDT) dd gdt_data ; base of GDT

Descritor 0

Descritor 1

(21)

Procedimento para Carregar Registrador GDTR

InstallGDT:

cli ; clear interrupts pusha ; save registers

lgdt [toc] ; load GDT into GDTR sti ; enable interrupts

popa ; restore registers ret

(22)

Mudança para Modo Protegido e Inicialização dos

Registradores de Segmentos

call InstallGDT cli

mov eax, cr0 ; setar bit 0 (PE) para 1 or eax, 1 mov cr0, eax jmp 08h:Stage3 ... Stage3: mov ax, 10h mov ds, ax mov ss, ax mov es, ax

mov esp, 90000h ; pilha começa no endereço 90000h

Instalando o GDT

Desabilitando interrupções

Mudando Modo da CPU para Protegido

Colocando o seletor 08h no CS

Colocando o seletor 10h no

(23)

Entendendo os Valores dos Seletores

(1)

 Por que ?

00000000000001000

Seletor para Descritor 1

(24)

Entendendo os Valores dos Seletores

(2)

 Por que ?

00000000000010000

Seletor para Descritor 2

mov ax,10h mov ds, ax

(25)

Modo Protegido: O Que Muda para o

Programador?

 Algumas instruções novas são disponíveis para o programador

- Instruções privilegiadas, instruções que dão suporte a escrita

de SO (ou parte) como SGDT (salvar o registrador gdtr em uma posição de memória) e SIDT, e outras de uso geral tal como SYSENTER (32 bits) e SYSCALL (64 bits)

Em vez de se utilizar interrupções da BIOS, utiliza-se

chamadas de sistema que podem ser feitas através:

- Interrupções do SO - Instruções específicas

(26)

Utilizando Interrupção 80H do Linux

 Ao se utilizar esta interrupção do Linux, deve-se especificar qual é o serviço que se deseja utilizar

- Especifica-se colocando o número do serviço no registrador

EAX

- Parâmetros do serviço devem ser colocados em EBX,ECX e

(27)

Alguns Serviços da Interrupção 80H do Linux

%eax Name %ebx %ecx %edx 1 sys_exit int - -

2 sys_fork struct pt_regs

- -

3 sys_read unsigned int char * size_t

4 sys_write unsigned int const char * size_t

5 sys_open const char * int int 6 sys_close unsigned int - -

(28)

Hello World Usando INT 80H

section .data

message: db ‘Hello, World!,0 msgLen: equ $-message

section .text

global _start _start:

mov eax, 4 ; system call 4 é escrita

mov ebx, 1 ; deve-se colocar 1 para stdout mov ecx, message ; end da string para saida mov edx, msgLen ; quantidade de bytes int 80h ; chama SO para fazer a escrita mov eax, 1 ; system call 1 é sair

xor ebx, ebx ; exit code é 0

(29)

Lendo e Escrevendo uma String com INT 80H

section .data

msgUsr db ‘Entre com numero: '

tamMsgUsr equ $-msgUsr ; O tamanho da mensagem dispMsg db ‘Voce entrou com: '

tamDispMsg equ $-dispMsg section .bss ;Dados não inicializados num resb 5 section .text global _start _start: mov eax, 4 mov ebx, 1

mov ecx, msgUsr mov edx, tamMsgUsr int 80h

Escreve mensagem no display, pedindo para entrar com

(30)

mov eax, 3 mov ebx, 0 mov ecx,num

mov edx, 5 ;5 bytes (numerico, 1 para o sinal) int 80h

mov eax, 4 mov ebx, 1

mov ecx, dispMsg mov edx, tamDispMsg int 80h

Lendo e Escrevendo uma String com INT 80H

(cont…)

Lendo o número Imprimindo mensagem “Voce entrou com:”

(31)

mov eax, 4 mov ebx, 1 mov ecx, num mov edx, 5 int 80h mov eax, 1 mov ebx, 0 int 80h

Lendo e Escrevendo uma String com INT 80H

(cont…)

Imprimindo o número que usuário entrou Saindo do programa

(32)

Utilizando SYSCALL

 A instrução SYSCALL é utilizada para processadores de 64 bits

- Permite acessar mais rapidamente códigos que rodam em

nível de privilégio 0

 Ao se utilizar esta instrução, deve-se especificar qual é o serviço que se deseja utilizar (depende do SO utilizado)

- Especifica-se colocando o número do serviço no registrador

RAX

- Parâmetros do serviço devem ser colocados em

(33)

Hello World Usando SYSCALL em Linux

section .data

message: db ‘Hello, World!,0 msgLen: equ $-message

section .text

global _start _start:

mov rax, 1 ; system call 1 é escrita

mov rdi, 1 ; deve-se colocar 1 para stdout mov rsi, message ; end da string para saida mov rdx, 13 ; quantidade de bytes

syscall ;chama SO para fazer a escrita

mov rax, 60 ; system call 60 é sair mov rdi, 0 ; exit code é 0

syscall ; chama SO para sair

SYSCALL funciona para

Referências

Documentos relacionados

Os resultados deste estudo mostram que entre os grupos pesquisados de diferentes faixas etárias não há diferenças nos envoltórios lineares normalizados das três porções do

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

que utilizaram, ou não, irrigação de pastagens (P>0,05), no entanto, observou-se maior valor para as propriedades que não utilizam irrigação, pois naquelas que

Depois de se cultivar as variedades de soja Santa Rosa e UFV-1 em solução nutritiva "completa" e com deficiência de B, Cu e Zn, de se analisar as suas folhas e de

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

Dessa forma, os níveis de pressão sonora equivalente dos gabinetes dos professores, para o período diurno, para a condição de medição – portas e janelas abertas e equipamentos

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Na sequência da análise de risco efetuada pode-se concluir que existem riscos de contaminação muito reduzidos quer no âmbito, quer em perigosidade para o