Logo Hostnet Logo SBP Logo Hostnet Logo SBP
Busca

Retornar para: Colunas - Como Funciona

Sítio do Piropo

B. Piropo

< Coluna Como Funciona >
< (publicada no site "PromoInfo") >
Volte

24/10/2005

< Como funciona o “Boot” >

IV – A Carga do Sistema

A coluna anterior desta série terminou expondo a contradição básica do procedimento de inicialização dos computadores, aquela que deu origem ao mistério do boot: se quem carrega os programas é o sistema operacional e o sistema operacional é um programa, então quem carrega o sistema operacional?

Vamos destrinchar o aparente mistério.

Algumas rotinas do sistema operacional, mais especificamente aquelas que tratam do acesso direto ao hardware, não podem ser genéricas, ou seja, não podem ser utilizadas em qualquer computador. Como há diferenças no hardware dependendo do fabricante, do modelo e tipo do microprocessador e dos circuitos auxiliares ("chipset"), essas diferenças devem ser levadas em conta, já que trata-se justamente das rotinas de acesso a este hardware. Por isso uma parte das rotinas que integram o sistema operacional é específica de cada máquina e, também por isso, é desenvolvida pelo fabricante da máquina, não pelo desenvolvedor do sistema operacional. Esta parte é integrada ao hardware. O restante do sistema operacional fica gravado no disco rígido e é somente ele que é carregado para a memória durante o boot, ou procedimento de inicialização. A partir daí as duas partes passam a funcionar harmonicamente, como um conjunto único. É claro que tudo isso é feito obedecendo a padrões rígidos e regras estritas, de modo que a integração entre ambas as partes se dê de forma perfeita e transparente para o usuário seja qual for o fabricante e tipo de máquina.

As rotinas que são fornecidas juntamente com o hardware fazem parte do subsistema de entrada e saída, justamente aquele que mais depende das características peculiares de cada máquina. E esse conjunto de rotinas é conhecido por "sistema básico de entrada e saída", em inglês "Basic Input/Output System". Na verdade, é mais conhecido mesmo por suas iniciais: o BIOS (e não "a BIOS como é comum se ouvir; afinal trata-se de um sistema, não de "uma sistema"). Para nós o que interessa é que há uma parte das rotinas do BIOS que é fornecida junto com a placa-mãe.

Mas como se pode fornecer rotinas, ou seja, trechos de um programa, junto com uma placa de circuitos?

Simples: gravando-as em um circuito integrado (ou "chip") de memória não volátil.

E memória se volatiliza?

Bem, no sentido físico do termo, geralmente aplicado a líquidos como o éter que, quando expostos ao ar à temperatura ambiente se transformam imediatamente em gás (ou "evaporam"), não. Mas se você lembra das colunas anteriores, quando descrevemos a memória do tipo RAM (onde são "carregados" os programas) dissemos que as células que compõem cada posição de memória podem ser constituídas por microscópicos capacitores, que assumiriam os estados "carregado" e "descarregado" para representar, respectivamente, os bits "um" e "zero". Ora, um capacitor descarregado jamais muda seu estado exceto se a ele for aplicada uma carga elétrica. No entanto, infelizmente, o mesmo não ocorre com um capacitor carregado: caso eu interrompa o fornecimento de energia ao circuito ao qual ele se integra, sua carga se desvanecerá como se "evaporasse". Portanto, sem alimentação elétrica um capacitor descarregado mantém seu valor "zero" indefinidamente, mas um capacitor carregado perde sua carga mesmo que não seja perturbado. Isso significa que memórias constituídas por capacitores "esquecem" seu conteúdo quando a alimentação é desligada. É esse tipo de memória que classificamos como "volátil". Uma memória volátil é portanto aquela que perde seu conteúdo quando o computador é desligado. E, por razões econômicas e práticas, a memória principal de nossos computadores é constituída predominantemente por memória tipo RAM, um tipo de memória volátil.

Mas há outros tipos de "chips" de memória. Muitos outros. Desde as antigas memórias ROM (Read Only Memory, ou memória apenas de leitura) que não somente mantêm os dados quando o micro é desligado como impede que eles sejam modificados mesmo com o micro ligado (e são conhecidas como "memória permanente", já que seu conteúdo jamais pode ser alterado) até diversos tipos de memória que mantêm os dados quando se interrompe a alimentação elétrica (portanto são "não voláteis") mas permitem que eles sejam alterados em determinadas condições quando os circuitos estão ligados (e portanto são "não permanentes"). Um bom exemplo deste último tipo são as memórias "Flash", usadas entre outras finalidades para fabricar os "cartões de memória" das câmaras digitais e os chamados "pen drives", esses módulos de memória que são ligados às portas USB dos computadores e que estão pouco a pouco substituindo os disquetes para transportar informações.São chips de memória não volátil (pois mantêm as informações mesmo quando não estão conectados às câmaras ou aos computadores) e não permanente (pois permitem alterar seu conteúdo). Mas, para o fim em que estamos interessados, qualquer chip de memória não volátil serve, seja ele permanente (como os antigos chips de memória ROM) seja não permanente (como os novos chips de memória "Flash").

Pois bem: desde os primeiros computadores pessoais, a parte das rotinas do BIOS fornecida junto com as placas-mãe vêm gravadas em chips de memória não volátil. Os micros mais antigos usavam os velhos chips de memória ROM ou PROM, que por serem do tipo permanente, quando se havia que fazer uma atualização de BIOS (sim, na medida que evoluem os sistemas operacionais, as rotinas do BIOS precisam acompanhar a evolução) exigiam a troca do próprio chip. Depois, passaram a usar os chips de memórias não permanentes tipo EPROM ou EEPROM, que podiam ser alteradas mas dava um trabalho medonho, já que isso tinha que ser feito em máquinas especiais. Hoje em dia toda placa-mãe moderna usa para esse fim chips de memória tipo "Flash", que pode ser alterada facilmente no próprio computador, facilitando enormemente o procedimento de atualização de BIOS. Mas, como eu disse, não importa o tipo. Importa que sejam chips de memória não volátil, ou seja, que mantêm seus dados mesmo quando o micro é desligado. Veja, na Figura 1, alguns dos circuitos integrados usados para gravar as rotinas do BIOS (Imagem obtida da Burn Technology Limited em < desculpe, esta página foi removida da internet >).

Chips usados para o BIOS

Figura 1: Chips usados para o BIOS

Mas será que a CPU, ou o microprocessador, consegue ter acesso a essas memórias não voláteis?

Bem, do ponto de vista do microprocessador, memória é memória seja qual for seu tipo físico. A ele interessam apenas as características lógicas, ou seja, a capacidade (número de células, ou de "bits" que pode armazenar) e o endereço. A única diferença, naturalmente, é que a CPU não consegue gravar um dado em uma posição de memória que está localizada em um chip de memória permanente (já que para gravar é necessário alterar seu conteúdo). Mas para ler, conhecido o endereço, tanto faz o tipo de chip e suas características físicas: posto o endereço no REM e sinalizado que se trata de uma leitura de memória, os circuitos controladores da memória vão até o chip, seja ele de que tipo for, e copiam o conteúdo da posição correspondente àquele endereço no RDM. E temos conversado (se isso aí lhe pareceu complicado, releia a segunda coluna desta série, a que fala sobre o "ciclo de busca e execução" que tudo ficará claro).

Note que, depois de ligado aos circuitos da placa-mãe, as posições de memória contidas no chip de memória não volátil podem assumir quaisquer endereços que o fabricante desejar lhes atribuir. É claro que esses mesmos endereços não poderão ser ocupados por posições de memória RAM (duas posições de memória não podem compartilhar o mesmo endereço por razões óbvias). Mas a partir do momento que endereços lhes são atribuídos, essas posições passam imediatamente a

fazer parte da memória principal, ou MP.

O fato de haver na placa-mãe de nossos computadores um chip de memória não volátil que pode ser integrado à MP, ao qual o processador pode ter acesso e ler o conteúdo de suas posições de memória é de importância primordial. Pois é ele que permite resolver o mistério do boot.

Pense: se temos na placa-mãe um chip de memória não volátil no qual gravamos algumas das rotinas do BIOS, aquelas que são específicas da placa, podemos gravar nele quaisquer outras informações. Inclusive, naturalmente, instruções de um programa.

E se podemos fazer com que o microprocessador leia esses endereços de memória, podemos executar esse programa, instrução a instrução, obedecendo ao ciclo de busca e execução.

Portanto, o chip que contém o BIOS conterá também um programa que é executado assim que o micro é ligado (e agora você está começando a desvendar o mistério do "boot"). Esse programa chama-se "bootstrap". O velho "cordão das botinas" citado lá na primeira coluna da série. É verdade que o que há de mais importante no chip são as rotinas do BIOS, que serão utilizadas toda a vez que uma operação de entrada ou saída for realizada, enquanto o bootstrap só é executado imediatamente após o micro ser ligado. Por isso o chip que o contém é conhecido como "BIOS" ou "ROM BIOS". Mas o bootstrap também está lá. Resta apenas um problema: como "apontar" o ponteiro de instruções para a posição de memória que guarda a primeira instrução do bootstrap. Porque depois de executada a primeira, o próprio ciclo de busca e execução se encarregará de executar as demais. Em outras palavras: no exato momento em que o computador é ligado, como fazer com que ele tenha em seu PI (o registrador denominado Ponteiro de Instruções) o endereço onde está situada a primeira instrução desse programa? E que endereço é esse?

Começando pelo fim: esse endereço é obrigatoriamente o maior endereço de memória que o micro pode alcançar. Em outras palavras: assim que recebe energia elétrica, o PI tem todos as suas células preenchidas com o valor "um" (o que o faz, obrigatoriamente, "apontar" para o topo do horizonte de memória). O chip que contém o BIOS (e o bootstrap, que será automaticamente executado assim que o computador é ligado) ocupa, então, os endereços mais elevados da memória.

Nesse endereço há, evidentemente, uma instrução. Essa instrução é transportada para o RI, registrador de instruções, e imediatamente executada (se você não sabe porque, leia novamente a segunda coluna desta série, "Ciclo de busca e execução"). Como não há nenhum endereço acima daquele (portanto de nada valeria incrementar o ponteiro de instruções), esta instrução é obrigatoriamente um "Jump", um salto para um determinado endereço de uma outra posição de memória também contida no chip do BIOS e que guarda a primeira instrução do programa "bootstrap".

Mas o que faz este programa?

Entrar em detalhes seria cansativo e exigiria demasiado conhecimento técnico. E nossa intenção aqui é meramente explicar em linhas gerais o procedimento de inicialização. Então, vamos abordar os passos da forma mais genérica possível.

Começando pela simplificação extrema: o "bootstrap" é um programa gravado em um chip de memória não volátil que testa o funcionamento do computador, localiza os arquivos do sistema operacional e os carrega na memória.

Isso, naturalmente, resolve o mistério do boot: um programa só pode ser carregado por outro programa. O sistema operacional é um programa cujos arquivos estão em disco. Quem o carrega na memória é outro programa, o bootstrap, cuja função é apenas esta: testar o micro e carregar o sistema operacional. Como o bootstrap está gravado em um chip de memória não volátil cujas posições de memória ocupam endereços da MP, ele pode ser executado imediatamente após o micro ser ligado, posto que ele já está carregado na memória e não precisa que ninguém o carregue.

Se isso era tudo o que você queria saber, mistério resolvido e pode parar por aqui. Se você está interessado em conhecer um pouco mais sobre o procedimento de inicialização, leia mais um pouquinho, que já estamos quase terminando.

O início do programa "bootstrap" corresponde a uma varredura da memória para ver se encontra em outras posições de memória rotinas a serem incorporadas ao BIOS. Essas rotinas chamam-se "extensões do BIOS" e em geral vêm gravadas em outros chips de memória não volátil presentes nas placas controladoras dos dispositivos periféricos que exigem que suas rotinas de acesso sejam incorporadas ao BIOS. Quando encontradas, são incorporadas ao BIOS.

Depois disso o bootstrap inicia um procedimento denominado POST, ou Power On Self Test, que pode ser livremente traduzido para "autoteste de partida".

O POST é um procedimento interessante. Imagine que você seja um robô. E que tenha sido desligado por algum tempo e depois religado. Qual seria sua primeira providência? Provavelmente verificar se não lhe falta nenhum pedaço, se nada foi retirado de seu corpo enquanto estava desligado: conta os dedos das mãos e dos pés, falange por falange, para verificar se não falta nenhuma, depois os pés e as mãos propriamente ditas, os braços e pernas, a cabeça, os olhos, ouvidos, boca e assim por diante, "pedaço" por "pedaço", para verificar se estão em seus lugares e funcionando perfeitamente. Pois é basicamente isso que faz o micro enquanto roda o POST: testa memória (e mostra o resultado na tela), microprocessador, placas controladoras, todos os periféricos (e então você vê acender-se os "leds" – ou "luzinhas" – dos discos rígidos, drives de disquetes e CD, teclado) e assim por diante. O POST testa a presença e o funcionamento de cada um deles. Por que isso é feito cada vez que o micro é ligado? Ora, muito simples: porque o usuário pode ter removido ou acrescentado algum periférico enquanto a máquina estava desligada e ela precisa verificar se isso ocorreu para se configurar de acordo.

Repare que nada disso tem a ver com o sistema operacional ou com o BIOS. Trata-se meramente de um programa de inicialização e teste de componentes que usa o mesmo chip que armazena as rotinas do BIOS meramente por conveniência. O sistema operacional ainda está dormente em seu dispositivo de armazenamento, seja o disco rígido (na maior parte das vezes), seja um CD, DVD ou até mesmo disquete.

Para carregá-lo, após executar o POST, o "bootstrap" precisa saber onde encontrá-lo. E consulta uma tabela que fica em um chip de memória não volátil e não permanente com os dados principais de configuração da máquina. Esta tabela é ajustada por um programa denominado "setup" ("configuração") e é geralmente chamada pelo nome deste programa, ou seja, "setup". Então o programa "bootstrap" consulta o setup para saber em qual dispositivo deve procurar os arquivos do disco rígido.

Nesta coluna, para simplificar as coisas, vamos partir do princípio que o setup tenha informado ao bootstrap que ele deve carregar o sistema operacional a partir do "drive C:", a primeira partição do primeiro disco rígido (que é justamente o que acontece na imensa maioria dos casos). Sendo assim, o bootstrap acessa a placa controladora dos discos rígidos e lê o conteúdo de um setor chamado "MBR", ou "Master Boot Record".

O MBR não é, como muita gente pensa, o "setor de boot" ou "setor de inicialização". É o "Setor Mestre de Boot", o que não é a mesma coisa. Ele contém apenas informações sobre o disco rígido físico. Nele estão gravados o tipo do disco, seu número de faces, trilhas por face e setores por trilha e, o mais importante: a tabela de partição.

Particionamento é o nome do procedimento pelo qual se pode dividir um disco rígido físico em trechos, ou "partições", que se comportam como discos rígidos independentes. Cada partição é um disco rígido lógico. Um disco rígido físico pode conter diversas partições (ou ser subdividido em diversos discos lógicos). As informações sobre o tipo e tamanho de cada partição, onde cada uma começa e onde cada uma acaba no disco rígido físico estão contidas no final do MBR, em um trecho denominado, naturalmente, "tabela de partições" ("partition table"). Que é lida pelo bootstrap para descobrir onde está o primeiro setor da partição "ativa", aquela que contém o sistema operacional (no caso, o disco lógico denominado "drive C:"). É este primeiro setor da partição "ativa" que se chama setor de boot. O programa bootstrap lê este setor, o carrega na memória, aponta o Ponteiro de Instruções para seu início e sai de cena. A partir deste ponto será executado o programa contido no setor de boot.

Este programa foi gravado no setor de boot pelo sistema operacional quando foi instalado na máquina. É um programa pequeno, já que cabe inteiro nos 512 bytes de um setor. Mas ele não precisa ser grande. Sua função é simples: localizar no disco e carregar na memória o primeiro arquivo do sistema operacional. Tarefa para ele muito fácil já que foi gravado exatamente pelo sistema operacional para fazer justamente isso, portanto sabe onde encontrar o arquivo.

Esse primeiro arquivo então, ao ser carregado, executa algumas tarefas administrativas, verifica a configuração da máquina, carrega os drivers (rotinas que são acrescentadas ao sistema operacional para gerenciar determinados dispositivos), carrega os demais arquivos do sistema operacional, instala a interface gráfica e entrega a máquina para o usuário, com o sistema operacional devidamente carregado e pronto para o uso.

Ah, e ia me esquecendo: se o sistema operacional for o Windows, também toca aquela musiquinha chata.

É isso aí. Mistério resolvido.

Mais simples do que parecia, pois não?

PS: esta não foi apenas a última coluna desta série, foi também a última das minhas colunas no sítio do PromoINFO, que está prestes a ser reformulado. Aos responsáveis pelo PromoINFO, meus sinceros agradecimentos pela oportunidade de trabalharmos juntos. Uma experiência que espero tenha sido para eles tão prazerosa quanto foi para mim. Aos leitores, sobretudo aqueles que chegaram até aqui, meu profundo e admirado obrigado pela paciência. Se o conjunto de colunas agradou, visite o Sítio do Piropo, em < https://www.bpiropo.com,br >. Lá você encontrará outras bobagens do mesmo quilate escritas por mim e poderemos continuar a manter contato.

Até lá.