Template modo real

Disponível somente no TrabalhosFeitos
  • Páginas : 8 (1875 palavras )
  • Download(s) : 0
  • Publicado : 7 de janeiro de 2013
Ler documento completo
Amostra do texto
Projeto 1 - Bootloader
IF677 - Infra-Estrutura de Software Centro de Informática - UFPE
Autor: Thyago Porpino (tnp)

Objetivos
● ● ● Desmistificar o processo de inicialização de um computador. Entender como um Sistema Operacional vem a ser executado. Introduzir programação em assembly.

Programação no Modo Real
O IBM PC original utilizava uma CPU Intel 8088 com um único modo de operação,modo esse que é mantido até hoje nos processadores, tudo para não quebrar a compatibilidade com os softwares da época. Esse modo de operação, originário no 8086, é conhecido como modo real (16 bits), e contrasta com o modo protegido (32 ou 64 bits) que é usado por sistemas operacionais atuais. Todos os descendentes do IBM PC original realizam o boot no modo real, e é normalmente, trabalho dobootloader entrar no modo protegido e transferir controle para o kernel. Em um ambiente sem um SO, como é o caso do ambiente encontrado por um bootloader, é necessário utilizar-se de serviços da BIOS para realizar as mais variadas funções (e.g. acessar o disco, imprimir na tela, etc).

Segmentação no Modo Real
O processador 8086 foi projetado para suportar um espaço de endereçamento de 20 bits, istoé, é capaz de endereçar 2^20 bits (1 MB). Já que o 8086 é formado por registradores de 16 bits, todos os acessos de memória suportam apenas operandos de 16 bits. Para acessar todo o espaço de endereçamento (1 MB), em tese são necessários registradores de 20 bits, porém o 8086 só possuía registradores de 16 bits, então a técnica de segmentação foi utilizada, que combinava 2 registradores de 16bits para que fosse possível o endereçamento de 1 MB de memória. No modo real, os registradores de segmento contêm um endereço base de um segmento, e são usados para achar o endereço linear (físico) na memória, da seguinte forma:

(segment reg.)*16 + offset = linear address OBS: Lembrando que multiplicar por 16 (decimal) é a mesma coisa que fazer 4 shifts para a esquerda, ou 1 shift (emhexadecimal) Exemplos: 0x07c0 * 16 + 0x0 = 0x7c00 0x0 * 16 + 0x7c00 = 0x7c00

Como uma alternativa de se especificar o endereço linear, alguns textos se referem aos endereços de memória no modo real usando a notação segment:offset. Por exemplo, o endereço linear (0x179b8) pode ser escrito como o par segment:offset 1234:5678. Como 12 bits da base do segmento e do endereço de offset se sobrepõe, é possívelrepresentar qualquer endereço linear (< 1 MB) no modo real através de mais de uma combinação segment:offset (e.g. 3000:1337 e 3123:0107 representam o endereço linear 0x31337).

Layout da memória física
O espaço de endereçamento do PC é dividido entre 2 regiões principais. A primeira região está abaixo de 1MB e corresponde à todo o espaço de endereçamento de 20 bits do IBM PC original e pode sertotalmente endereçada no modo real. A segunda região, é a memória acima dos primeiros 1 MB e é conhecida como high (ou extended) memory, e que só pode ser endereçada completamente no modo protegido. Já que a lower memory corresponde à todo o espaço de endereçamento do IBM PC original, ela própria é dividida em subregiões. Historicamente, os primeiros 640KB da lower memory eram usados pelo SO(e.g. DOS), e por programas do usuário (se o modo real estiver sendo usado). Em contraste, os últimos 384KB da lower memory era usados para vídeo, I/O mapeado em memória, e a ROM (read-

only memory) da BIOS.

Interrupções no Modo Real
Em programação de sistemas, ao se utilizar algum serviço de baixo nível,

como leitura e escrita de arquivo, é sempre necessário se comunicar com o SO, poisele é o único código com permissão de acessar diretamente o hardware (disco). Para isso, se faz uso de chamadas de sistema, que nada mais são do que a interface que o SO oferece aos programas de usuário. Mesmo quando se utiliza uma biblioteca como a libc (biblioteca padrão de C), e se chama funções como fopen (leitura de arquivo), na verdade se está implicitamente fazendo uma chamada de sistema...
tracking img