8.1.2c El Sector de Arranque
§1 Sector de arranque
De todos los sectores de una unidad de disco, el primero de la primera cabeza del primer cilincro (CHS 0,0,1), tiene una importancia y significado especial. Es el sitio al que se dirige la BIOS cuando busca si existe en el sistema un dispositivo cargable ( 4.3). Por esta razón se denomina sector de arranque MBR ("Master boot record") o bloque maestro de carga ("Master boot block"). Sus 512 bytes contienen tres bloques con información sobre la arquitectura física y lógica del disco: el Código maestro de carga ; la Tabla de particiones , y la Firma .
Nota: Debido a que los disquetes no pueden contener particiones, son una excepción a esta regla y su primer sector, denominado sector de carga del volumen, tiene una estructura ligeramente distinta (ver sector de carga 8.1.2c2).
§2 Código maestro de carga MBC
Si el disco es "bootable", los primeros 446 bytes del MBR (sector de arranque), están ocupados por un pequeño trozo de código denominado código maestro de carga MBC ("Master Boot Code") o cargador inicial (bootstrap loader), que es cargado por la BIOS para comenzar el proceso de carga. El bootstrap loader repasa la tabla maestra de particiones (ver a continuación) buscando una partición activa. En caso de encontrarla, busca su sector inicial ( 8.1.2c2), carga su código en memoria, y le transfiere el control. Dicho código es ya capaz de cargar y ejecutar cualquier otro programa situado en cualquier partición del disco. Que a su vez inicializará directamente el SO, o tal vez una utilidad conocida como gestor de arranque, que permite elegir entre distintas alternativas.
Como vemos, es un proceso en cadena: el bootstrap loader es cargado en memoria por un programa situado en la BIOS, y a su vez es capaz de continuar la carga del Sistema Operativo.
§2 Tabla maestra de particiones MPT
A continuación del MBC, se sitúa la tabla maestra de particiones MPT ("Master Partition Table"). Está constituida por cuatro trozos de 16 bytes (4 entradas) que contienen información sobre las particiones definidas en la unidad.
Nota: las particiones a que nos referimos son las denominadas particiones primarias o volúmenes [2]. Hay que recordar que solo hay sitio para cuatro, por lo que un disco duro solo puede contener cuatro particiones primarias. Cualquier otra que pueda establecerse, se denomina partición secundaria o volumen lógico y debe estar contenida en alguna de las primarias.
Los desplazamientos de cada una de las 4 entradas son respectivamente 1BEh (446); 1CEh (462); 1DEh (478) y 1EEh (494). Cada entrada contiene la siguiente información [3] (T = tamaño del campo en bytes):
T | Descripción | ||||||||||||||||||||||||||||||||
1 | Estado de la partición (00h = Inactiva; 80h = Activa) | ||||||||||||||||||||||||||||||||
1 | Principio de la partición (cabeza). | ||||||||||||||||||||||||||||||||
2 |
Principio de la partición (Cilindro/Sector en forma codificada). La codificación, bastante enrevesada. Se justifica porque en el momento de su diseño, la conservación de espacio era una preocupación fundamental en el mundo informático (la misma que condujo al famoso episodio del Y2K) y porque existen dos datos empaquetados en una palabra de 16 bits, que a su vez están en forma invertida; "Back-words" o "Little endian" ( E2.2.6a). De los 16 bits disponibles, 6 se reservan para el sector y 10 para el cilindro. Lo que conduce a un máximo de 64 = 26 sectores, y 1024 = 210 cilindros. El esquema de distribución de bits es el siguiente:
Estos valores, junto a las 256 = 28 posibilidades par las cabezas señaladas en el byte anterior, originarían posteriormente numerosos inconvenientes a la hora de manejar discos muy grandes (6.2). | ||||||||||||||||||||||||||||||||
1 | Tipo de partición ID.
Contiene detalles sobre el formato de la partición. Por ejemplo, si es FAT-12, FAT-16 o FAT-32; si será
accedida utilizando direccionamiento CHS tradicional; ECHS, o LBA
( 6.2).
Nota: MS-DOS solo puede acceder a las particiones o volúmenes señalados en negrita. | ||||||||||||||||||||||||||||||||
1 | Final de la partición (cabeza). | ||||||||||||||||||||||||||||||||
2 | Final de la partición (Cilindro/Sector en forma codificada). | ||||||||||||||||||||||||||||||||
4 | Número de sectores entre el MBR y el primer sector de la partición. | ||||||||||||||||||||||||||||||||
4 | Número de sectores en la partición. |
Para que un disco "maestro" (cuyo MBR pueda ser accedido por el proceso de carga de la BIOS) sea "bootable", se precisa que alguna de las entradas de la tabla contenga un 80h en el bit de estado, señalando cual es partición activa. Recuerde que esta indicación es necesaria incluso si solo existe una partición y que en caso de haber varias, solo una puede estar activa!.
§3 Firma del sector de carga
Los dos últimos bytes del sector de arranque (MBR) contienen dos caracteres (55h, AAh). que son denominados firma del sector de carga ("Boot record signature")
§4 Ejemplo
A continuación se muestra el volcado ASCII del sector de arranque MBR de un disco, utilizando la utilidad debug del DOS ( DEBUG).
Se trata de una unidad C...
177C:0100 EB 58 90
4D 53 57 49 4E-34 2E 31 00 02 08 20 00
.X.MSWIN4.1... . |
§5 Resumen
Una vez realizado el formateo físico de la unidad ( 8.1.2), la MPT es creada mediante un programa especial; fdisk.exe en los Sistemas DOS/Windows y /sbin/fdisk en Linux ( 8.1.2c3), que se encarga de realizar las "particiones" del disco. En cambio, el código del bootstrap loader es instalado en su caso por el programa de instalación del Sistema Operativo.
Un disco pude no ser "bootable" por carecer de cargador
inicial en su MBR, o la señal "activa" en alguna de sus particiones. Pero para ser utilizable debe contener al
menos una partición, y por consiguiente una entrada en su MPT.
En el primer caso, la BIOS es incapaz de continuar el proceso de carga, resultando un mensaje de error del tipo:
"No Boot device available
o quizás en las BIOS antiguas:
"NO ROM BASIC - System Halted
.
Sin embargo, una vez cargado el SO, si su MBR contiene una entrada en su MPT, el volumen
correspondiente podrá ser utilizado sin ningún problema como área de almacenamiento.
Nota: La razón de este último mensaje es que los primitivos PCs IBM tenían un BASIC pregrabado en la ROM de la BIOS, de forma que si no podía encontrarse un dispositivo de donde cargar el sistema, la BIOS exhibía este mensaje de error del BASIC.
[2] En algunos Sistemas las particiones son denominadas "Disk slices" y las entradas en la tabla, etiquetas de disco ("disklabels").
[3] Los parámetros de más de un byte están almacenados en forma de palabras invertidas ("Back-words") o "Little endian" ( E2.2.6a), y como es usual, los desplazamientos empiezan por cero desde el comienzo del sector. El primer byte tiene desplazamiento cero. El último 511 (1FFh).