El BIOS

Nota: Hemos utilizado el masculino y no el femenino porque nos referirnos al “Sistema” (el BIOS), no a la memoria física en que está grabado (la BIOS).

1.- Resumen

BIOS es acrónimo de “Basic Input Output System“; literalmente: Sistema Básico de Entradas/Salidas. Se refiere a una pieza de software muy específico grabada en una memoria no volátil que está presente en todos los PC’s y compatibles. Aunque naturalmente existen antecedentes, en su forma actual es una invención del equipo de IBM encargado de diseñar el primer PC, y representa uno de los ejemplos más emblemáticos de firmware.

2.- Tipos de BIOS

Normalmente este software viene grabado en un chip de memoria no volátil de solo lectura ROM (Read Only Memory), situado en la placa base, de ahí el nombre ROM BIOS. Esto garantiza que no se perderá al apagar el Sistema y que no dependerá para su actuación de la existencia o buen funcionamiento de ningún disco, por lo que estará siempre disponible (esto es importante porque, como veremos a continuación, posibilita el arranque inicial del equipo sin necesitar de ningún recurso externo).
Desde los primeros días de vida del PC, el ROM-BIOS dio problemas en los equipos existentes, dado que los avances técnicos eran constantes, lo que suponía aumentar las capacidades de disco y de los dispositivos conectados a los equipos. Esto exigía nuevas BIOSes, con lo que había que cambiar la placa base, o cuando mínimo, en los modelos posteriores, cambiar el integrado que contenía la ROM BIOS[2]. Para resolver el problema se comenzó a utilizar memorias regrabables tipo EPROM (“Erasable programmable read-only memory”) y EEPROM (“Electrically erasable programmable read-only memory”).
En la actualidad se utiliza un tipo de memoria no volátil “flash” (Flash BIOS) que puede ser regrabada sin utilizar ningún dispositivo de borrado o grabación especial, lo que permite actualizarla muy cómodamente. Por lo general solo es necesario “bajarse” de Internet la versión adecuada (normalmente del sitio del fabricante de la placa base) y seguir las instrucciones que acompañan al programa[7].
Debido a que el BIOS es usado constantemente en el funcionamiento normal del PC, y que la memoria RAM es de acceso más rápido que la ROM, muchos fabricantes disponen que el contenido de la ROM BIOS sea copiado a memoria RAM como parte del proceso de arranque inicial. Esto se conoce como “Shadowing” y tiene el efecto de acelerar el rendimiento del sistema. La versión de la BIOS cargada en RAM se denomina shadow BIOS. Naturalmente esto exige un realineamiento de los vectores de interrupción, de forma que apunten a las nuevas posiciones en RAM.
Los BIOS mas modernos son los denominados PnP BIOS o PnP-aware BIOS, lo que significa que están previstos para manejar el estándar PnP “Plug and Play” de Microsoft (enchufar y usar). Una tecnología que permite a un equipo identificar cualquier dispositivo hardware que se conecte y signarle los recursos necesarios sin que existan conflictos con el resto. Antes de esta tecnología la adición de nuevos dispositivos constituía un auténtico quebradero de cabeza, dada la escasez de recursos que previeron los diseñadores del PC (por ejemplo los consabidos conflictos de interrupciones IRQ’s [1] y de direcciones de puertos).
Nota: En los primeros sistemas era un chip DIP (“Dual In-line package”) cuya designación empezaba por “27″ seguido de dos o tres números indicativos de los Kilobits de capacidad. Por ejemplo, 2764 es una ROM de 8 KB.

3.- Funciones del BIOS

El sistema BIOS de un PC estándar desempeña en realidad cuatro funciones independientes:
  • Proceso de carga inicial del software .
  • Programa de inventario y comprobación del hardware .
  • Inicialización de determinados dispositivos hardware, carga de cierto software básico e inicio del Sistema Operativo .
  • Servicios de soporte software para determinados dispositivos hardware del sistema .

3.1.- La carga inicial del Software

Hemos indicado que un hardware 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, permitanme un poco de historia. Igual que en la actualidad, a las computadoras 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 las computadoras 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 lenguaje máquina. 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 por ejemplo DOS, Windows o Linux se compone de una serie de pasos que se inician cuando se conecta o reinicia la computadora. El proceso comienza siempre en la BIOS, y salvando algunas pequeñas variaciones que puede haber en función de cada fabricante de hardware y de la propia BIOS, el desarrollo paso a paso de esta secuencia es el siguiente:
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, genera una señal Power Good en uno de los cables que va de la fuente de alimentación a la placa base; 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. Esta señal consiste en que una patilla del procesador es puesta a masa (esta patilla está conectada a una línea del BUS del PC). 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.
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). 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 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.
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 [8] ). 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 (las 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 archivos!!), 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 ). 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.

3.2.- Inventario de recursos y comprobación del hardware

La primera parte del programa de la BIOS inicia un proceso de comprobación del hardware denominado POST (Power-On Self Test), en caso de existir errores graves, el programa se detiene emitiendo una serie de pitidos (eventualmente algún mensaje en pantalla) que codifican el tipo de error encontrado [4]; el desarrollo exacto depende del fabricante, pero generalmente la secuencia de comprobaciones se resume como sigue:
  • Chequéo de registros del procesador
  • Setéo del temporizador 8253/8254 ( H2) para refresco de RAM.
  • Setéo del acceso directo a memoria, DMA, para refresco de laRAM en el canal 0.
  • Verificar que el refresco es operativo (los primeros PC’s usaban RAM dinámica).
  • Verificar la memoria RAM baja (0/16-64 KB).
  • Cargar los vectores de interrupción y asignarles espacio en la zona de memoria baja .
  • Inicializar los dispositivos de video y teclado.
  • Determinar el tamaño de la RAM adicional y comprobar su funcionamiento (el recuento que se ve en pantalla). Si llegado a este punto existiera algún error en la memoria se mostraría un mensaje de error (el dispositivo de video ya está operativo).
  • Inicializar los puertos COM (comunicaciones serie), LPT (comunicaciones paralelo) y de juegos
  • Inicializar, en su caso, el sistema de disquete.
  • Inicializar el sistema de disco.
  • Explorar el área de usuario de la ROM.
  • Llamar el interruptor de bootstrap.
La comprobación del dispositivo de video incluye cargar y ejecuta la parte de BIOS incluida en el adaptador de video. La mayoría de las adaptadoras modernas muestran en pantalla información sobre sí mismas; es por esta razón por la que, a veces, lo primero que se ve en pantalla es información sobre la propia controladora de video antes que ningún mensaje de la BIOS del sistema.
Nota: Si se trata de un reinicio en caliente (“Hot boot“), que puede conseguirse con la combinación [Ctrl]+[Alt]+[Sup], la fase de comprobación POST se omite, y el proceso de carga sigue desde el siguiente punto. A continuación del POST, la BIOS recorre la memoria en busca de la posible existencia de otros programas en ROM para ver si alguno tiene BIOSes [3], lo que ocurre por ejemplo, con los controladores de disco duro IDE/ATA, cuyas BIOS se encuentran en la dirección C8000h (819.200); otros elementos que suelen contar con sus propias BIOSes son las tarjetas de red y las controladoras SCSI[9]. Estos módulos, y cualquier otro que sea encontrado, es cargado y ejecutado.
A continuación, el BIOS muestra su pantalla inicial (generalmente con los créditos del fabricante número de versión y fecha).
Como hemos visto, el BIOS realiza una especie de inventario del sistema y algunas bios0015s para verificar que su funcionamiento es correcto. En los PCs originales la especificación del hardware disponible se efectuaba mediante interruptores (“Jumpers”) situados en la placa-base. A partir de los ATs se dispone de una memoria permanente, accesible para el usuario (ROM del Sistema), donde está inventariado el hardware básico y su tipo [5]. La tendencia actual es el estándar PnP . Si la BIOS lo soporta, es capaz por sí misma de detectar y configurar los dispositivos conectados, asignándoles los recursos necesarios y mostrando un mensaje en pantalla por cada uno instalado.
Las BIOS modernas, basándose en el tipo de memoria detectada, pueden establecer automáticamente su velocidad. Algunas pueden detectar automáticamente los parámetros del tipo de disco duro y su forma de acceso. Finalmente, la BIOS muestra en pantalla un resumen de la configuración del sistema.

3.3.- Inicialización

Parte de la tarea del POST se refiere a la preparación del hardware disponible (periféricos). Muchos de estos elementos precisan de la inicialización de registros, carga de parámetros y determinadas señales para ponerlos en orden de funcionamiento. No olvidar que algunos de ellos, son controladores programables, y parte del trabajo de la BIOS es justamente este, programarlos.
La inicialización implica también cargar en la memoria RAM ciertas tablas y programas muy básicos, imprescindibles para el manejo de muy bajo nivel del hardware. Por ejemplo, la carga en memoria baja de los vectores de interrupción, de forma que cuando ocurra una interrupción se sepa donde encontrar la rutina adecuada.
Nota: En los PCs estándar se pueden manejar un total de 256 interrupciones distintas, y cada una requiere un programa de control especial. Este programa se sitúa en memoria RAM o en la ROM-BIOS, pero en cualquier caso, en los primeros 1024 octetos (1 KB) de la memoria RAM (direcciones 0h a 400h) se carga una tabla, denominada de vectores de interrupción, cada una de cuyas entradas es un puntero que señala la dirección de memoria donde comienza el programa de control correspondiente a esa interrupción.
La inicialización implica también el área de memoria de datos de la ROM-BIOS, situada en la zona de direcciones 00400h a 004FFh (256 Bytes). Estas direcciones son frecuentemente señaladas como 0040:0000-0040:00FF.
Nota: Puesto que los programas contenidos en la BIOS requieren cierta área de trabajo donde almacenar variables y datos, se asignaron para este propósito 256 Bytes en la zona de memoria situada inmediatamente por encima de la tabla de vectores de interrupción. En este área se maneja información muy diversa, por ejemplo las últimas pulsaciones de teclas, capacidad de memoria encontrada, los ciclos de reloj pasados desde media noche (hora del sistema), el número de líneas y columnas que caben en la pantalla, o la lista de los dispositivos detectados en la secuencia POST.
3.3.1.- Carga del Sistema
Una vez terminadas las verificaciones previas, la BIOS inicia un recorrido en busca un dispositivo donde encontrar un programa que pueda continuar el proceso con la carga del Sistema Operativo. Este recorrido se denomina secuencia de carga (“Boot sequence“) y su orden puede ser establecido mediante un programa auxiliar ( set-up de la BIOS) que es accesible mediante la pulsación de ciertas teclas durante el POST . Una vez fijada, la secuencia de carga es almacenada en la memoria de datos de la BIOS , de forma que puede ser recordada y utilizada la próxima vez que se reinicia el sistema.
En los sistemas primitivos la secuencia de carga era fija, empezando en el disquete A: y siguiendo en el disco C:. Esta sigue siendo aún la secuencia normal, pero las BIOS actuales pueden alterar este orden y establecer dispositivos alternativos, CD-ROM o LAN, como puntos de inicio para la carga del Sistema. En realidad lo que la BIOS busca en los dispositivos es un registro de carga (“Boot record“), que en los discos y disquetes es el primer sector que se lee, y que contiene una dirección donde saltar para cargar el principio del SO. En caso de no encontrarse ningún dispositivo cargable (o aunque exista una partición cargable, pero no ha sido declarado activa), se genera un mensaje de error que puede ser el clásico: “No boot device available”, “NO ROM BASIC – System Halted”. Si las cosas funcionan correctamente y alguno de los dispositivos tiene un registro de carga, se inicia la carga del Sistema Operativo propiamente dicho.
La descripción detallada del proceso que sigue sería objeto de otro capítulo, pero podemos resumir que una vez en contrado el cargador del Sistema Operativo, este toma el control del proceso que hasta entonces había sido dirigido por la BIOS. Generalmente el Sistema realiza un nuevo inventario de memoria y de los dispositivos disponibles y procede a cargar los controladores de dispositivos adecuados para su manejo. Por ejemplo, impresoras, ratón y teclado. Como última operación se invoca la shell del sistema (generalmente una interfaz gráfica) que permite al usuario controlar el propio Sistema y de los programas de aplicación.

3.4.- El sistema básico de entradas salidas

Aparte de los procesos de verificación y carga descritos anteriormente, la característica fundamental del BIOS, que además justifica su nombre de “Sistema Básico de Entrada Salida“, es que en este firmware se encuentran las instrucciones necesarias para acceder a determinados servicios básicos del hardware (dispositivos de Entrada/Salida), entre los que se encuentran el teclado, la pantalla, los puertos serie y los controladores de disco. Estos trozos de código son accedidos a través de las direcciones contenidas en la tabla de vectores de interrupción. De forma que cualquier software que se cargue en la computadora puede saber en que dirección
buscar para encontrar los servicios correspondientes.
En realidad esta es la parte más original y trascendente del diseño del PC y lo que ha posibilitado la existencia de “Clónicos”; lo que hace que un conjunto de piezas hardware sean un PC; es también lo que hace que cualquier programa para tecnología Intel-PC corra en un PC con independencia de como sean realmente las interioridades de su hardware. Desde este punto de vista, la BIOS representa un elemento unificador común a todos los PCs; todas estas máquinas presentan al exterior una misma interfaz (determinada por el BIOS). La filosofía de diseño que utilizaron los diseñadores de IBM fue, en palabras de Peter Norton [6]:
“Deje que el BIOS lo haga, no se enrede con el control directo”.
Cuando un programa necesita determinados recursos del hardware (lo que en último término viene a ser una entrada/salida), la BIOS representa una forma unificada de hacerlo, se pide a la BIOS el “servicio” de una forma estandarizada, de ahí el nombre: Sistema básico de Entradas/Salidas.
En este sentido, el sistema de Entradas/Salidas del PC es un dispositivo virtual; se le interroga de una forma estándar y él se encarga de los detalles sucios del hardware. Cuando se extiende este concepto, incluyendo no solo el sistema básico de E/S sino al procesador, se llega de forma natural a la máquina virtual de Java.
Aunque existen diversas versiones y fabricantes (la propia historia de la BIOS es muy interesante), su comportamiento externo está estandarizado.
La BIOS es en realidad una caja negra, no importa como lo hace internamente, lo importante es que al preguntarle de una forma
estandarizada produce el resultado deseado (aquí se llaman “Servicios”).
Se han introducido pocos o ningún cambio básico desde su aparición con el primer PC, todas las mejoras del software se han aplicado a un nivel superior a esta capa básica, lo que ha hecho posible entre otras cosas cambiar a de Sistema Operativo DOS, Windows o Linux (por ejemplo) sin necesidad de cambiar las BIOSes.
En la página adjunta se incluye una somera descripción de estos “Servicios” ( Servicios-BIOS).

4.- Webografía

Bios Central
Cantidad de información relativa a la BIOS, incluyendo códigos de error POST de muchos fabricantes, mapa de memoria de la CMOS
RAM, etc. Inicio.
[1] “Interupt Request” (IRQ). Petición de interrupción que hace un programa al Sistema como paso previo a solicitar de él algún servicio.
[2] En realidad no han existido cambios básicos, solo añadidos para soportar nuevos dispositivos hardware, por ejemplo nuevos discos, con mas capacidad que los iniciales, lo que se traduce en que la BIOS tiene que identificar discos con un número de cilindros y sectores impensables en los PCs iniciales.
[3] Como el lector puede haberse figurado, muchos dispositivos hardware incluyen cierto firmware interno relativo a sus propias E/S, así que es corriente referirse a este firmware como “sus propias BIOSes”. La BIOS del Sistema o ROM BIOS es la integrada en la placa-base (“Mother board”). Para poder integrar la información de las BIOSes particulares junto con la de la ROM BIOS, los diseñadores del IBM PC establecieron los mecanismos adecuados para que desde esta última puedan buscarse y reconocerse ampliaciones situadas en cualquier dispositivo conectado en un zócalo de la placa-base.
[4] Se adoptó el sistema de aviso mediante pitidos (“Beeps”), altos bajos, cortos y largos, porque en estos tempranos momentos de inicio del sistema no existe ningún dispositivo de salida utilizable, por ejemplo pantalla. A este respecto hay que indicar que la cantidad y calidad de los test de diagnóstico iniciales varía entre los diversos fabricantes, sin que haya un estándar claro al respecto.
[5] La propia BIOS dispone de un programa para mantener este “Inventario”, el denominado “Setup”. Generalmente puede accederse a él pulsando las teclas [Del] o
[Esc] en los momentos iniciales de arranque.
[6] Peter Norton “The Peter Norton Programer’s guide to the IBM PC” Microsoft Press 1.985.
[7] El reverso de la medida ha sido la nueva posibilidad de que programas especialmente diseñados (“Malware”) puedan igualmente destruir o cambiar el contenido de la BIOS, lo que deja al equipo inutilizable.
[8] 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 2 16 == 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)
[9] SCSI (“Small Computer System Interface”). Un tipo de controladora que se inserta en una ranura de la placa base de la que sale un bus (cable plano), en el que se pueden conectar hasta 8 dispositivos (siempre que la longitud no supere 3 m). La controladora envía órdenes a los dispositivos conectados al bus y recibe los datos. Por su parte, los dispositivos SCSI que pueden conectarse en el bus, discos u otros, periféricos (scaners, etc.), integran en ellos mismos la electrónica necesaria que los independiza de la controladora y la abstrae de las características del dispositivo. Existen variantes: SCSI, SCSI-1, SCSI-2, SCSI-3, Fast-SCSI, Wide-SCSI, Ultra-2 SCSI, Fiber Channel SCSI … Este interfaz es el que se considera mas profesional y de mayor rendimiento, por lo que se utiliza en equipos de altas prestaciones, puede alcanzar velocidades de 100 MB/s.

Comentarios

Entradas populares