top of page

O Processo de Boot (x86)

  • Joseph Dias
  • 30 de out. de 2017
  • 6 min de leitura

O processo de inicialização de um Sistema Operacional (boot) é o conjunto de etapas executadas pelo BIOS (basic input/output system), necessárias para que o sistema operacional possa ser executado corretamente na máquina.

Entre o momento em que pressionamos o botão de energia do computador e o momento em que vemos o logo do sistema operacional, um conjunto de ações precisam ser executadas para permitir que o sistema operacional execute de forma correta na máquina (computador). Essas ações são basicamente para configurar e obter informações acerca dos dispositivos instalados, memoria, etc.


Cada máquina possui uma configuração diferente (conjunto formado pelo processador, memoria, placa de vídeo, etc) e sempre que inicializamos a mesma, o BIOS precisa reconhecer cada componente, configurar os mesmos e obter informações necessárias ao sistema operacional. Dentre essas configurações está a inicialização do controlador de memoria, dispositivos PCI, entre outros.


Vamos tomar como exemplo um upgrade de memoria realizado na máquina. Sempre que a máquina é inicializada e o BIOS executa a configuração dos diversos dispositivos, aloca espaços da memoria física para que os mesmos possam funcionar. Como exemplo podemos citar o espaço de configuração PCI e as tabelas ACPI. O endereço no qual esses espaços de memoria são reservados para cada dispositivo é definido pelo BIOS de acordo com a quantidade de memoria instalada na máquina. Assim, quando fazemos uma alteração em qualquer componente (como um upgrade de memoria), o BIOS precisa ajustar tudo novamente e passar para o sistema operacional como tudo está organizado.


Basic Input/Output System ( BIOS)


O BIOS, ou Sistema Básico de Entra e Saída, é o nome dado a um pequeno software existente em um chip contido na Motherboard, responsável pelo processo de inicialização da mesma. O chip no qual o BIOS está contido atualmente nada mais é que uma memoria flash (do tipo não volátil e que pode ser regravado, ao contrário da memoria ROM existente nos modelos antigos ).


Etapas de Inicialização


Como citado anteriormente, nenhum dispositivo está configurado no momento da inicialização, incluindo o controlador de memoria, no qual faz a comunicação entre o processador, dispositivos e os módulos de memoria instalados. Desse modo, nem mesmo a memoria RAM pode ser utilizada até que seja configurada. Então como o BIOS é executado?


No momento em que o processador é energizado pela primeira vez (ou é feito um hard reset), busca a primeira instrução no endereço F000:FFF0h, no formato segmento:offset ou FFFF0h linear, neste endereço existe uma instrução de salto incondicional (jmp), que faz um salto para o endereço de inicialização do BIOS. O controlador de memoria, que está situado no chipset "Ponte Norte" ou no próprio processador (dependendo da microarquitetura) é pré-configurado para buscar as instruções na memoria flash, onde está localizado o firmware. Isso é feito mapeando a memoria flash no barramento de memoria, fazendo o processador "acreditar" que está buscando instruções da memoria principal, quando na verdade está obtendo da memoria flash. Assim, o BIOS pode ser executado sem a necessidade de estar na memoria RAM, onde qualquer dado variável utilizado pelo mesmo é armazenado na memoria cache do processador, que serve de memoria temporária até que a memorial principal possa ser utilizada.


Logo após saltar para o endereço de inicialização do BIOS, o mesmo da inicio ao Power-on self-test (POST) que nada mais é do que uma sequência de testes realizados para verificar a integridade do próprio BIOS, processador, identificar e inicializar os módulos de memoria, os dispositivos PCI, os discos, periféricos (teclado e mouse) e reportar um erro caso algum apresente funcionamento anormal, ou dar continuidade a inicialização do sistema operacional. Além de todos esses testes o BIOS também inicializa o vetor de interrupção e todas as rotinas utilizadas pelo sistema operacional. Tais como a int 10h, utilizada para configurar o vídeo, a int 13h utilizada para acessar os discos, etc.


Após verificar que está tudo funcionando corretamente, o BIOS inicia a busca por um disco para carregar o Sistema Operacional. A sequência de dispositivos no qual o mesmo tenta executar o Sistema Operacional depende da configuração contida na CMOS, que é um chip de memoria volátil, ou seja, precisa ser alimentado constantemente para reter os dados (a alimentação é proveniente da bateria existente na motherboard). A CMOS armazena os dados referentes a sequência de boot (de acordo com os discos instalados e a configuração feita pelo usuário) a data e hora, configuração dos módulos de memoria (como frequência e latência), a utilização ou não de determinados dispositivos como o Controlador Ethernet onboard, etc.


Boot em Discos


Caso o primeiro dispositivo de boot seja um disco rígido, ou disco removível (como um disquete ou PenDrive), o BIOS faz a leitura do primeiro setor do disco. Um setor de um disco é a menor unidade de memoria que pode ser lida ou escrita (nos disquetes e discos rígidos menores que 500GB um setor possui 512 bytes, esse modo de dividir a memoria dos discos é também chamado de particionamento físico e não pode ser alterado pelo usuário). O primeiro setor dos discos também é conhecido como Master Boot Record (MBR), ou Registro de Inicialização Mestre. O MBR é carregado pelo BIOS no endereço de memoria 0000h:7c00h e possui três partes importantes: a área de código Bootstrap; a tabela de partições e a assinatura de Boot.


Master Boot Record - MBR

O código Bootstrap é responsável por dar continuidade a inicialização do Sistema Operacional. A tabela de partições contém informações sobre as partições existentes no disco e identifica em qual o Sistema Operacional está localizado. A assinatura de Boot é um conjunto de dois bytes com os valores 55h e AAh. A assinatura de Boot é utilizada pelo BIOS para identificar se o setor carregado na memoria é um setor de inicialização válido, ou seja, se após carregar o setor na memoria, o mesmo não conter a devida assinatura, o BIOS entende como sendo um setor inválido e passa para o próximo dispositivo de acordo com a sequência de dispositivos configurados na CMOS.


Caso a assinatura de Boot esteja presente, o BIOS passa então a execução para o Bootstrap, fazendo um salto para o endereço 0000h:7c00h, onde foi carreago os primeiros 512 bytes do disco correpondente ao setor de boot ( MBR ).


O Bootstrap como já citado, é um pequeno pedaço de código com tamanho máximo de 446 bytes que fica localizado logo no incio do MBR. Após receber o controle do processador, o mesmo se move para uma posição de memoria diferente daquela na qual ele foi carregado (isso é feito para dar lugar a outro setor que será carregado por ele) e executa uma busca na tabela de partições tentando encontrar uma partição ativa para dar continuidade ao carregamento do Sistema Operacional. Como pode ser observado, um MBR clássico somente contém quatro entradas para partições, o que significa que só podemos criar quatro partições no disco, denominadas partições primárias. Uma partição nada mais é do que um espaço de memoria do disco localizado em um lugar arbitrário com localização e tamanho definido na hora de sua criação. Cada partição pode conter um sistema de arquivos diferente ( NTFS, HPFS, Ext, etc).


Caso o Bootstrap não localize uma partição ativa, o mesmo exibe uma mensagem informando que o Sistema Operacional não foi encontrado, caso contrário, o mesmo tenta carregar o setor de boot da partição, chamado de Volume Boot Record (VBR) no endereço 0000h:7c00h. O setor de boot da partição assim como o MBR também possui 512 bytes e a assinatura de boot, entretanto, a sua estrutura é ligeiramente diferente. O Bootstrap também verifica a assinatura de boot para se certificar de que o VBR é um setor válido.

Volume Boot Record - VBR

Para os sistemas de arquivos FAT12, FAT16, FAT32, HPFS, NTFS, o VBR contém uma estrutura chamada BIOS Parameter Block (BPB), na qual está localizado informações sobre o sistema de arquivos. Logo após a BPB temos o Bootstrap do VBR. O Bootstrap a partir daqui passa a ser o responsável por carregar o bootloader. O Bootstrap do VBR varia de acordo com o sistema de arquivos usado para formatar a partição e do sistema operacional instalado. O bootloader então passa a ser responsável por carregar o sistema operacional.


Para bootloaders como o GRUB, o MBR contém o código para carregar o bootloader diretamente, sem a necessidade de carregar o VBR, isso acontece porque o bootloader faz uma busca em todas as partições e lista todos os sistemas operacionais instalados, caso haja mais de uma partição ativa, ao contrário do código padrão do MBR que somente é capaz de identificar uma partição e carregar um único sistema operacional.

 
 
 

Comments


Posts Destacados
Posts Recentes
Procure por Tags

© 2017 por Joseph Dias.

bottom of page