A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Oficina

6. O setor de boot

Sab

26

Mai

2007


14:48

(16 votos, média 4.75 de 5) 


Nível avançado MÓDULO 6 do SO Numaboa

Todo sistema operacional precisa ser acionado quando o computador é ligado ou reiniciado (ressetado). O hardware da máquina já vem preparado "de fábrica" para procurar informações em determinados lugares - os assim chamados setores de boot.

Antes de iniciar qualquer projeto de SO, sabendo de antemão que o setor de boot será o primeiro que a máquina procura, é preciso ter uma idéia clara do que é um setor de boot. Neste tutorial você encontra uma verdadeira radiografia do setor de boot de um disquete formatado pelo DOS. Parto do pressuposto que você tenha conhecimentos suficientes de Assembly para acompanhar o texto.

Se os seus conhecimentos de Assembly forem insuficientes, ainda assim vale a pena dar uma lida no texto. Imagine que o setor de boot seja uma sequência de bits localizados logo no início do disquete. Esta sequência de bits é dividida em algumas partes e cada uma delas contém determinados tipos de dados e informações.

Onde está o setor de boot

O setor de boot de um disquete está localizado no cilindro 0, cabeça 0, setor 1. Este setor é criado por um programa de formatação de disquetes, como o FORMAT do DOS. O setor de boot de uma partição FAT de um disco rígido tem um layout e função semelhantes. Uma partição FAT "bootável" se parece com um disquetão durante os estágios iniciais do processo de boot do sistema.

O processo de boot

Quando o computador é ligado ou reiniciado, a BIOS executa um teste conhecido como POST (Power On Self Test). O POST verifica toda a memória, testa todas as placas e o hardware é rastreado. É através do POST que o computador é informado do número e dos tipos de placas, de drives de disquete, de HDs, de portas seriais, paralelas e USBs, do monitor, do mouse, do teclado, etc.

Após o sistema completar o POST, a interrupção 19 (INT 19) é chamada. Normalmente a INT 19 tenta ler o setor de boot do primeiro drive de disquete. Se for encontrado um setor de boot no disquete, este é lido e transferido para a memória no endereço 0000:7C00 e a INT 19 salta para o endereço de memória 0000:7C00. Entretanto, se não for encontrado um setor de boot no primeiro drive, a INT 19 tenta fazer a leitura do MBR (Master Boot Record) do primeiro disco rígido. Se um MBR for encontrado, ele é lido e transferido para a localização de memória 0000:7C00 e a INT 19 salta para o endereço de memória 0000:7C00. O pequeno programa no MBR tentará localizar uma partição ativa ("bootável") na sua tabela de partições. Se uma partição "bootável" for encontrada, o setor de boot desta partição é lida e transferida para o endereço de memória 0000:7C00 e o programa do MBR salta para o endereço de memória 0000:7C00. Cada sistema operacional possui um formato de setor de boot próprio. O pequeno programa no setor de boot precisa localizar a porção inicial do programa carregador (loader) do kernel do sistema operacional (ou, talvez, o próprio kernel ou um "programa gerenciador de boot") e transferi-lo para a memória.

A INT 19 também é chamada quando as teclas Ctrl+Alt+Del são pressionadas simultaneamente. Na maioria dos sistemas, Ctrl+Alt+Del disparam uma versão reduzida do POST, que é executada antes da chamada à INT 19.

Dissecando o setor de boot

Para começar, observe logo abaixo o setor de boot de um disquete mostrado em hexadecimal e em ASCII. Os deslocamentos destacados em vermelho mostram o início das principais áreas:

  • O BPB (BIOS Parameter Block) começa no deslocamento (offset) 0.
  • O programa do setor de boot começa no deslocamento 3E.
  • As mensagens fornecidas pelo programa começam no deslocamento 19E.
  • O nomes dos arquivos ocultos do DOS começam no deslocamento 1E6.
  • A assinatura do setor de boot está no deslocamento 1FE.
OFFSET 0 1 2 3  4 5 6 7  8 9 A B  C D E F  *0123456789ABCDEF*
000000 eb3c904d 53444f53 352e3000 02010100 *...MSDOS5.0.....*
000010 02e00040 0bf00900 12000200 00000000 *...@............*
000020 00000000 0000295a 5418264e 4f204e41 *......)ZT..NO NA*
000030 4d452020 20204641 54313220 2020fa33 *ME    FAT12   .3*
000040 c08ed0bc 007c1607 bb780036 c5371e56 *.....|...x.6.7.V*
000050 1653bf3e 7cb90b00 fcf3a406 1fc645fe *.S..|.........E.*
000060 0f8b0e18 7c884df9 894702c7 073e7cfb *....|.M..G....|.*
000070 cd137279 33c03906 137c7408 8b0e137c *..ry3.9..|t....|*
000080 890e207c a0107cf7 26167c03 061c7c13 *.. |..|...|...|.*
000090 161e7c03 060e7c83 d200a350 7c891652 *..|...|....P|..R*
0000a0 7ca3497c 89164b7c b82000f7 26117c8b *|.I|..K|. ....|.*
0000b0 1e0b7c03 c348f7f3 0106497c 83164b7c *..|..H....I|..K|*
0000c0 00bb0005 8b16527c a1507ce8 9200721d *......R|.P|...r.*
0000d0 b001e8ac 0072168b fbb90b00 bee67df3 *.....r........}.*
0000e0 a6750a8d 7f20b90b 00f3a674 18be9e7d *.u... .....t...}*
0000f0 e85f0033 c0cd165e 1f8f048f 4402cd19 *._.3...^....D...*
000100 585858eb e88b471a 48488a1e 0d7c32ff *XXX...G.HH...|2.*
000110 f7e30306 497c1316 4b7cbb00 07b90300 *....I|..K|......*
000120 505251e8 3a0072d8 b001e854 00595a58 *PRQ.:.r....T.YZX*
000130 72bb0501 0083d200 031e0b7c e2e28a2e *r..........|....*
000140 157c8a16 247c8b1e 497ca14b 7cea0000 *.|..$|..I|.K|...*
000150 7000ac0a c07429b4 0ebb0700 cd10ebf2 *p....t).........*
000160 3b16187c 7319f736 187cfec2 88164f7c *;..|s..6.|....O|*
000170 33d2f736 1a7c8816 257ca34d 7cf8c3f9 *3..6.|..%|.M|...*
000180 c3b4028b 164d7cb1 06d2e60a 364f7c8b *.....M|.....6O|.*
000190 ca86e98a 16247c8a 36257ccd 13c30d0a *.....$|.6%|.....*
0001a0 4e6f6e2d 53797374 656d2064 69736b20 *Non-System disk *
0001b0 6f722064 69736b20 6572726f 720d0a52 *or disk error..R*
0001c0 65706c61 63652061 6e642070 72657373 *eplace and press*
0001d0 20616e79 206b6579 20776865 6e207265 * any key when re*
0001e0 6164790d 0a00494f 20202020 20205359 *ady...IO      SY*
0001f0 534d5344 4f532020 20535953 000055aa *SMSDOS   SYS..U.*

Informações adicionais