4.1 El BIOS: Carga inicial
§1 El principio
Hemos indicado que el hardware de un PC sin Sistema Operativo es como un ser humano en coma profundo; incapaz de realizar ninguna actividad útil. Pero entonces surge la pregunta: ¿Como se carga el software después que se ha conectado el suministro de energía, si no existe ningún programa capaz de hacer nada?.
Antes de explicar como resolvieron el problema los diseñadores del PC, permitidme un poco de historia. Igual que en la actualidad, a los ordenadores de hace unas décadas, una vez conectados había que cargarles el software. Como después de conectada, en la máquina no había ningún programa, había que introducirlo manualmente a través de la consola. En esos tiempos los ordenadores tenían una consola o panel frontal lleno de lucecitas e interruptores con los que manualmente se podían realizar determinadas operaciones; básicamente se reducían a poder reiniciar (resetear) los registros, examinar el contenido de cualquier posición de memoria, y colocar en ella cualquier dato o instrucción en binario. De esta forma se cargaba manualmente un pequeñísimo trozo de código, el "bootstrap", que una vez arrancado era capaz de dirigirse a un dispositivo. Por ejemplo, un lector de cinta perforada, en la que se iniciaba la carga de un programa más avanzado; el cargador binario ("Binary loader") que ya era capaz de aceptar algunas órdenes de consola y cargar a su vez cualquier otro software.
En los PCs y compatibles actuales, el proceso de carga de un sistema operativo, DOS, Windows, Linux o cualquier otro, se compone de una serie de pasos que se inician cuando se conecta o reinicia el ordenador. El desarrollo paso a paso de esta secuencia es el siguiente:
§2 Conexión
Cuando se da tensión a la fuente de alimentación, transcurre un cierto tiempo hasta que desaparecen los transitorios de
conexión y se genera una tensión estable y adecuada para alimentar el
sistema. Una vez que la alimentación se estabiliza, se genera una señal Power
Good en uno de los cables que va de la fuente de alimentación a la
placa base (
H2);
esta señal es recibida en el juego de chips instalado en la referida placa, y
a su vez generan una señal de reinicio (reset) al procesador.
La señal reset consiste en que una patilla del procesador es
puesta a masa y después de un cierto tiempo (muy corto) recobra su tensión
inicial (esta patilla está conectada a una línea del BUS del PC
H2). La finalidad de este proceso es evitar
que el procesador arranque prematuramente, cuando las tensiones de
alimentación no son todavía correctas, lo que podría producir daños en el
hardware. Es el mismo sistema que se utiliza para un reinicio en
caliente, cuando pulsa en el botón marcado "Reset" en el frontal de
su PC. Este botón pone a masa la línea del bus conectada a la patilla reset de procesador.
![]() |
Nota: Precisamente debido a este mecanismo, en algunos casos de fuentes de alimentación defectuosas, se originan súbitos e imprevistos reseteos del sistema cuando la tensión baja demasiado y luego se restablece a valores correctos.
§3 Bootstrap
El procesador arranca cuando se retira la señal de reset,
pero no existe en su memoria ninguna instrucción o dato, por lo que no puede
hacer absolutamente nada. Para salvar el obstáculo, los fabricantes
incluyen en la circuitería de la placa base una especie de instinto.
Podríamos establecer un símil diciendo que es análogo al que hace que las
tortugas corran hacia el agua cuando salen del huevo en la playa, solo que en
este caso el sistema se dirige a una dirección fija de memoria FFFF0h
(F000:FFF0 en forma segmentada
H5.1).
Esta dirección, situada muy cerca del final de la memoria del sistema en los
primeros PCs, es el punto de inicio de la BIOS. Se eligió esta dirección para poder variar el tamaño del
programa en la ROM BIOS sin crear problemas de compatibilidad (ver nota
),
puesto que existen solo 16 bytes desde este punto y el final de la memoria
DOS (
H5.1)
que está en la posición FFFFFh (F000:FFFFh). En realidad este punto de
inicio contiene una instrucción de salto (jump) que indica al procesador
donde tiene que dirigirse para encontrar el punto donde comienza realmente el programa de carga (bootstrap) de la BIOS.
La figura 1 muestra un esquema de la distribución de memoria (la escala vertical no guarda proporción)
Nota histórica: En los primeros diseños del PC, la ROM BIOS ocupaba solo 40 KB. En esa época, el rango de direcciones de memoria que podía manejarse era 00000-FFFFFh; un máximo de 1.048.576 Bytes (1 MB) [1]. Es usual suponer que este Megabyte está compuesto por 16 segmentos de 64 KB. Sin embargo, los ingenieros de IBM estimaron que debían reservar determinadas zonas para usos específicos del Sistema, para lo que reservaron 6 segmentos, de modo que para memoria de usuario (aplicaciones) quedaron solo 10, los famosos 640 KB del DOS (en realidad 655.360 Bytes), que en la época parecían más que suficientes para los programas y el propio Sistema Operativo. Tenga en cuenta que el IBM-PC original carecía de disco duro; un disquete de 5 1/4" de 160 KB (que podía contener un máximo de 64 ficheros!!), era opcional.
Los 10 segmentos correspondientes a memoria de usuario se establecieron en la zona baja (los primeros 1280 Bytes
estaban ya asignados a la tabla de vectores de interrupción y otros datos del
sistema ( 4.3).
A continuación estaban los 6 bloques reservados; la BIOS empieza en las
dirección F0000h de este espacio reservado, con lo que hasta el punto
de inicio (FFFF0h) anteriormente descrito, quedaban 65.520 Bytes;
espacio más que suficiente para que se alojara una BIOS de solo 40 KB, y sin
peligro de que su crecimiento llegara a invadir la posición del punto de inicio.
[1] El límite superior de la memoria
que podía manejarse estaba dictada por el procesador utilizado. Los 16
bits de los registros del 8088 permitían acceder directamente a 216
== 65.536 posiciones (en el rango 0000-FFFFh), pero utilizando una técnica de direccionamiento
segmentado, se podían acceder a 16 "segmentos"
de 65.536 Bytes cada uno, con lo que el total de memoria disponible se alargó
entre 0h y FFFFFh (trataremos esto con más detalle en el capítulo
dedicado a la RAM H5.1).