Registro de inicialização do volume
Um registro de inicialização do volume (VBR, do inglês volume boot record) (também conhecido como setor de inicialização do volume, registro de inicialização da partição ou setor de inicialização da partição) é um tipo de setor de inicialização introduzido pelo IBM Personal Computer. Ele pode ser encontrado em um dispositivo de armazenamento de dados particionado, como um disco rígido, ou em um dispositivo não particionado, como um disquete, e contém código de máquina para a inicialização de programas de computador (geralmente, mas não necessariamente, sistemas operacionais) armazenados em outras partes do dispositivo. Em dispositivos de armazenamento não particionados, ele é o primeiro setor do dispositivo. Em dispositivos particionados, ele é o primeiro setor de uma partição individual no dispositivo, sendo o primeiro setor de todo o dispositivo um Master Boot Record (MBR) que contém a tabela de partição.
O código nos registros de inicialização do volume é invocado diretamente pelo firmware da máquina ou indiretamente por um código no registro de inicialização mestre ou por um gerenciador de inicialização. O código no MBR e no VBR é, em essência, carregado da mesma maneira.
A invocação de um VBR por meio de um gerenciador de inicialização é conhecida como carregamento em cadeia (chain loading). Alguns sistemas de dupla inicialização, como o NTLDR (o carregador de inicialização para todas as versões dos sistemas operacionais derivados do Windows NT da Microsoft até e incluindo o Windows XP e Windows Server 2003), fazem cópias do código de inicialização que os sistemas operacionais individuais instalam no VBR de uma única partição e as armazenam em arquivos de disco, carregando o conteúdo do VBR relevante a partir do arquivo após o carregador de inicialização perguntar ao usuário qual sistema operacional inicializar. No Windows Vista, Windows Server 2008 e versões mais recentes, o NTLDR foi substituído; em vez disso, a funcionalidade do carregador de inicialização é fornecida por dois novos componentes: WINLOAD.EXE e o Gerenciador de Inicialização do Windows.
Em sistemas de arquivos como FAT12 (exceto no DOS 1.x), FAT16, FAT32, HPFS e NTFS, o VBR também contém um Bloco de Parâmetros do BIOS (BPB) que especifica a localização e o layout das principais estruturas de dados no disco para o sistema de arquivos. (Uma discussão detalhada sobre o layout do setor dos VBRs FAT, as várias versões do BPB FAT e suas entradas pode ser encontrada no artigo sobre FAT).
Detalhes técnicos
[editar | editar código]Assinatura
[editar | editar código]A presença de um carregador de inicialização Compatível com IBM PC para CPUs x86 no setor de inicialização é, por convenção, indicada por uma sequência hexadecimal de dois bytes chamada assinatura do setor de inicialização (55h no deslocamento fixo +1FEh e AAh em +1FFh) para tamanhos de setor de 512 bytes ou mais.[nb 1] Para setores de 512 bytes, a assinatura do setor de inicialização também marca o fim do setor. VBRs em setores menores e maiores também podem exibir assinaturas no final do tamanho real do setor, no entanto, a semântica aqui descrita aplica-se apenas à assinatura de 16 bits em +1FEh.
Esta assinatura indica a presença de pelo menos um carregador de inicialização fictício (dummy) que é seguro para ser executado, mesmo que não seja capaz de carregar de fato um sistema operacional. Ela não indica a presença de um (ou mesmo de um determinado) sistema de arquivos ou sistema operacional, embora algumas versões antigas do DOS anteriores à 3.3 dependessem dela em seu processo para detectar mídias formatadas em FAT (versões mais novas não o fazem). O código de inicialização para outras plataformas ou CPUs não deve usar esta assinatura, pois isso pode levar a um travamento quando o BIOS passar a execução para o setor de inicialização assumindo que ele contém código executável válido. Isto implica que mídias FAT12/FAT16 para serem usadas também por versões muito antigas do DOS devem manter a assinatura mesmo que não contenham um sistema operacional ou se destinem a ser inicializáveis apenas em outras plataformas; consequentemente, elas também devem conter pelo menos um carregador compatível com x86 (fictício) (para comparação, veja exemplos de FAT no Atari ST e com MSX-DOS). No entanto, algumas mídias para outras plataformas contêm erroneamente a assinatura mesmo sem um carregador fictício compatível com x86, tornando a verificação não 100% confiável na prática.
A assinatura é testada pela maioria das BIOS de sistema desde (pelo menos) o IBM PC/AT (mas não pelo IBM PC original e algumas outras máquinas). Mais do que isso, ela também é verificada pela maioria dos carregadores de inicialização MBR antes de passar o controle para o setor de inicialização. Algumas BIOS (como a do IBM PC/AT) realizam a verificação apenas para discos rígidos / unidades removíveis, enquanto para disquetes e superdisquetes basta começar com um byte maior ou igual a 06h e as primeiras nove palavras não conterem o mesmo valor para que o setor de inicialização seja aceito como válido, evitando assim o teste explícito de 55h, AAh em disquetes. Como os setores de inicialização antigos (ou seja, mídias muito antigas do CP/M-86 e do DOS) às vezes não apresentam essa assinatura, apesar do fato de poderem ser inicializados com sucesso, a verificação pode ser desativada em alguns ambientes. Isso também reflete o fato de que disquetes podem ser formatados para usar tamanhos de setor menores que 512 bytes.
Se o código do BIOS ou do MBR não detectar um setor de inicialização válido e, portanto, não puder passar a execução para o código do setor de inicialização, ele tentará o próximo dispositivo de inicialização da lista. Se todos falharem, ele normalmente exibirá uma mensagem de erro e invocará a INT 18h.[1] Isso iniciará um software residente opcional em ROM (ROM BASIC), tentará uma inicialização remota via rede, reiniciará o sistema via INT 19h após a confirmação do usuário ou fará com que o sistema interrompa o processo de inicialização até a próxima reinicialização física.[1]
Do deslocamento decimal 72 a 79, um PBR do NTFS contém o número de série do ID de volume UUID da partição.
Invocação
[editar | editar código]O código de inicialização no VBR pode assumir que o BIOS configurou suas estruturas de dados e interrupções e inicializou o hardware. O código não deve assumir mais do que 32 KB de memória presentes para uma operação segura;[1] se precisar de mais memória, deve consultar a INT 12h para isso, já que outro código de pré-inicialização (como, por exemplo, sobreposições de extensão do BIOS, sistemas de criptografia ou carregadores de inicialização remota) também pode estar presente em outro lugar da memória (e normalmente se esconderia do setor de inicialização reduzindo a memória relatada pela INT 12h de acordo, para que não seja sobrescrito pelas ações do MBR e do VBR). A Especificação de Inicialização do BIOS permite 64 KB de memória e recomenda explicitamente de 0000h:7C00h a 0000h:FFFFh como espaço de memória para MBR e/ou VBR.[2][1] O código de inicialização não deve assumir CPUs melhores que as originais Intel 8088 ou 8086 (usadas no PC original) e não deve fazer suposições em relação ao estado exato do hardware, ao sistema de interrupções (as interrupções podem estar ativadas ou desativadas) ou à localização e tamanho da pilha (stack). Embora o BIOS original da IBM inicialize os registradores de CPU DS, ES e SS para o segmento 0000h e mantenha a pilha inicial em SS:SP = 0000h:0400h, esta não é uma condição na qual se possa confiar, pois nem todas as BIOS e códigos MBR seguem essa convenção. Registradores não mencionados abaixo devem ser tratados como não inicializados. O acesso direto ao hardware normalmente não é permitido. Embora a Tabela de Parâmetros de Disco (DPT/FDPB) normalmente já esteja configurada em 0000h:0078h na memória, o VBR deve mover (e possivelmente corrigir) a DPT apontada pelo vetor INT 1Eh para este local (a INT 1Eh não é uma interrupção, mas um ponteiro distante para a DPT).
Algumas condições podem ser flexibilizadas em ambientes controlados; por exemplo, alguns carregadores de inicialização atuais assumem ter até 128 KB de memória para trabalhar em operação normal (sem solicitar mais), e alguns carregadores de inicialização que usam acesso LBA assumem pelo menos uma CPU Intel 80188 ou 80186.
O VBR é carregado na posição de memória 0000h:7C00h[1] e com os seguintes registradores de CPU configurados quando o carregador de inicialização anterior (isto é, normalmente o BIOS ou MBR, mas possivelmente outro carregador de inicialização) passa a execução para ele saltando para 0000h:7C00h no modo real da CPU.
Algumas BIOS da Compaq usam erroneamente 07C0h:0000h em seu lugar. Embora isso seja resolvido para o mesmo local na memória do modo real, não é o padrão e deve ser evitado, pois o código VBR que assume certos valores de registrador ou que não foi escrito para ser relocável pode não funcionar de outra forma.
- DL = unidade de inicialização (disquetes / superdisquetes:
00h= primeiro,01h= segundo, ...,7Eh; discos rígidos / unidades removíveis:80h= primeiro,81h= segundo, ...,FEh; os valores7FheFFhsão reservados para ROM / unidades remotas e não devem ser usados em disco).[3] O DL é suportado pelas BIOS da IBM, bem como pela maioria das outras BIOS. A BIOS do Toshiba T1000 é conhecida por não suportar isso corretamente, e algumas BIOS antigas do Wyse 286 usam valores DL maiores ou iguais a 2 para discos rígidos. Desktops USB configurados como superdisquetes normalmente recebem uma atribuição de DL =00hou01h, no entanto, algumas BIOS raras apresentam erroneamente pen drives configurados como unidades removíveis como DL =01htambém, em vez de usar DL =80h. Tradicionalmente, apenas os valores00hand80heram passados pelo BIOS durante a inicialização, e muitos setores de inicialização eram programados de forma rígida para funcionar com valores fixos de qualquer maneira. A Plug and Play BIOS Specification e a BIOS Boot Specification (BBS) permitem que outros dispositivos também se tornem inicializáveis.[2][4] Esta última também recomenda que os códigos MBR e VBR usem o DL em vez de padrões internos fixados de fábrica.[2] (Nota: Os VBRs do MS-DOS/PC DOS e OS/2 ignoram o valor DL fornecido e, em vez disso, recuperam o valor armazenado no deslocamento+19hno Bloco de Parâmetros do BIOS Estendido (EBPB) ou no deslocamento do setor+1FDhnas versões do DOS 3.2 a 3.31. Algumas versões do DR-DOS usam o DL a partir da 7.02. Os VBRs do DR-DOS 7.07 usam o DL por padrão e ignoram o valor do BPB, mas o comandoSYS /O[:nnn]pode ser usado para invocar o comportamento antigo de usar o valor do BPB ou até mesmo forçar uma unidade de inicialização específicannna ser armazenada ali.[3] Em volumes FAT32, o FreeDOS também tira vantagem do valor DL, enquanto em volumes FAT12/FAT16 só o faz se o valor do BPB estiver definido comoFFh.) - DH bit 5 = 0: dispositivo suportado através da INT 13h; caso contrário: não importa (deve ser zero). O DH é suportado por algumas BIOS da IBM. Alguns códigos MBR e VBR preservam o valor de DH.
Sistemas com suporte a BIOS Plug-and-Play ou BBS fornecerão um ponteiro para os dados PnP além do DL:[2][4]
- DL = unidade de inicialização (veja acima)
- ES:DI = aponta para a estrutura de verificação de instalação "
$PnP"
Esta informação permite ao carregador de inicialização (no MBR ou VBR) interagir ativamente com o BIOS ou com uma sobreposição PnP / BBS residente na memória para configurar a ordem de boot, etc., no entanto, esta informação é ignorada pela maioria dos MBRs e VBRs padrão. O ideal é que o ES:DI seja transmitido, mas os sistemas operacionais compatíveis com PnP normalmente também possuem métodos alternativos para recuperar o ponto de entrada do BIOS PnP mais tarde de modo que a maioria dos sistemas operacionais não depende disso. A informação em ES:DI pode ser usada como uma dica — de acordo com a especificação do BIOS PnP, a estrutura de verificação de instalação "$PnP" pode ser encontrada procurando por uma assinatura da string ASCII $PnP na memória do sistema começando de F0000h a FFFFFh em cada limite de 16 bytes.
Com mídias particionadas, quando o VBR é lançado pelo MBR (o outro carregador de inicialização) em vez do BIOS, muitas implementações passam informações adicionais para o VBR além de apenas o DL (e às vezes o DH e o ES:DI também):
- DS:SI = aponta para a entrada da tabela de partição MBR de 16 bytes (no MBR realocado) correspondente ao VBR ativado. O PC-MOS 5.1 depende disso para inicializar se nenhuma partição na tabela de partição estiver marcada como inicializável. Em conjunto com o LOADER, os setores de inicialização do Multiuser DOS e do REAL/32 usam isso para localizar o setor de inicialização da partição ativa (o outro carregador de inicialização como o IBMBIO.LDR em uma posição fixa no disco) se o arquivo de inicialização (LOADER.SYS) não puder ser encontrado. O PTS-DOS 6.5 e o S/DOS 1.0 usam isso em conjunto com o recurso de Partição Ativa Avançada (AAP). Além do suporte para LOADER e AAPs, o DR-DOS 7.07 pode usar isso para determinar o método de acesso INT 13h necessário ao usar seu código VBR duplo CHS/LBA. O código MBR do OS/2, MS-DOS (anterior ao 7.0), PC DOS (até o 7.10) e Windows NT (até cerca de 2007) por acaso também fornece essa mesma interface, embora esses sistemas não façam uso dela. O MBR instalado pelo Windows NT 6.0 (e superior) usa outros registradores e, portanto, não é mais compatível com essas extensões. Embora algumas extensões dependam apenas da própria entrada da tabela de partição de 16 bytes, outras extensões podem exigir que toda a tabela de partição de 4 (ou 5 entradas) também esteja presente.
No DR-DOS 7.07 uma interface estendida pode ser usada opcionalmente pelo MBR e em conjunto com o LOADER:
- AX = assinatura mágica indicando a presença desta extensão (
0EDCh) - DL = unidade de inicialização (veja acima)
- DS:SI = aponta para a entrada da tabela de partição MBR de 16 bytes usada (veja acima)
- ES:BX = início do setor de inicialização ou imagem especial do setor "
NEWLDR" (normalmente 7C00h) - CX = reservado
Em conjunto com as tabelas de partição GUID (GPT), uma proposta de MBR Híbrido da Enhanced Disk Drive Specification (EDD) 4 recomenda outra extensão para a interface MBR para VBR:[5]
- EAX =
54504721h("!GPT") - DL = unidade de inicialização (veja acima)
- ES:DI = aponta para a estrutura de verificação de instalação "
$PnP" (veja acima) - DS:SI = aponta para uma estrutura de transferência do MBR Híbrido, que consiste em uma entrada fictícia de tabela de partição MBR de 16 bytes (com todos os bits definidos, exceto o sinalizador de boot no deslocamento
+0he o tipo de partição no deslocamento+4h) seguida por dados adicionais. Isso é parcialmente compatível com a extensão DS:SI mais antiga discutida acima, se apenas a entrada de partição de 16 bytes, e não toda a tabela de partição, for exigida por essas extensões mais antigas.
Ver também
[editar | editar código]Nota
[editar | editar código]- ↑ A assinatura no deslocamento
+1FEhnos setores de inicialização é55h AAh, ou seja,55hno deslocamento+1FEheAAhno deslocamento+1FFh. Como a representação little-endian deve ser assumida no contexto de máquinas compatíveis com IBM PC, isso pode ser escrito como uma palavra de 16 bitsAA55hem programas para processadores x86 (observe a ordem invertida), ao passo que teria que ser escrito como55AAhem programas para outras arquiteturas de CPU que usam uma representação big-endian. Como isso foi misturado inúmeras vezes em livros e até mesmo em documentos de referência originais da Microsoft, este artigo usa a representação baseada em deslocamento de bytes no disco para evitar qualquer possível interpretação errônea.
Referências
[editar | editar código]- 1 2 3 4 5 Paul, Matthias R. (2 de outubro de 1997). «Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT and BOOT.TXT - A short description of how OpenDOS is booted». Consultado em 29 de março de 2009. Arquivado do original em 4 de outubro de 2003
- 1 2 3 4 Compaq Computer Corporation; Phoenix Technologies Ltd.; Intel Corporation (11 de janeiro de 1996). BIOS Boot Specification 1.01 (PDF). Col: 1.01. [S.l.: s.n.] Arquivado do original (PDF) em 14 de abril de 2016
- 1 2 Paul, Matthias R. (14 de agosto de 2017). «The continuing saga of Windows 3.1 in enhanced mode on OmniBook 300». MoHPC - the Museum of HP Calculators. Consultado em 1 de maio de 2018. Cópia arquivada em 1 de maio de 2018.
[…] SYS […] /O[:nnn] Override IPL reported boot drive unit (n=0..126, 128..254). […] Preparing target disk... Choosing FAT12 CHS Boot Sector (requires IPL to report boot unit). Treating target as diskette or superfloppy medium (boot drive unit 0). Writing new Boot Sector... […]
- 1 2 Compaq Computer Corporation; Phoenix Technologies Ltd.; Intel Corporation (5 de maio de 1994). Plug and Play BIOS Specification 1.0A (PDF). Col: 1.0A. [S.l.: s.n.] Arquivado do original (PDF) em 2 de fevereiro de 2018
- ↑ Elliott, Robert (4 de janeiro de 2010). «EDD-4 Hybrid MBR boot code annex» (PDF). Hewlett-Packard, T13 Technical Committee. e09127r3. Consultado em 1 de maio de 2018. Cópia arquivada (PDF) em 1 de maio de 2018