Inicio Acabamos de pulsar el botón de encendido. ¿y que pasa?.. Se empieza a ejecutar un programa que está grabado internamente en nuestro PC. La maquina lo que hace es ir a una determinada posición de la memoria, y lo que está allí se lo da directamente al procesador para que empiece a ejecutarlo. Por tanto, nuestra "memoria" del PC, no está tan vacia como parece.... algo debe contener. Este algo es un programa que reside en un chip de memoria llamado BIOS ROM y que al encender el PC, ocupa un posición FIJA de memoria en cualquier PC. Siempre la misma. BIOS Es un programa y además es el único programa que conoce exactamente (o debe conocer) nuestro PC. Debemos pensar que realmente en el mundo, hay bastantes fabricantes de placas madre. Y muy pocos fabricantes de BIOS. Los fabricantes de BIOS (Award, AMI, Phoenix, etc) lo que tienen son unos bios semi-estandard (por ejemplo la versión 4.51 PG de Award) y lo que hacen, bajo pedido del fabricante de la placa madre, es adaptar "su" Standard de bios, a "esa" placa madre. La versión 4.51 PG de Award, se ejecuta en muchas maquinas totalmente diferentes, y resulta que la bios es totalmente diferente. Es especifica para "esa" placa madre. DISPOSITIVOS Vamos a definir los "dispositivos" como el resto del hardware independiente de la CPU y memoria con los que la CPU interactúa. El PC actual que conocemos, aunque parezca mentira, es basicamente el mismo que surgió en el año 82. Su arquitectura es la misma y lo único que ha ido evolucionando han sido los "periféricos" o dispositivos. Algunos de ellos, actualmente, se incorporan ya en la placa base (controladores de disco, disquete, puertos serie y paralelo, por poner un ejemplo). Y otra evolución evidente han sido las CPU, pero recordemos, que por suerte o por desgracia han tenido que mantener su compatibilidad descendente y por tanto, su juego básico de instrucciones es el del antiguo 8086. CPU ¿Como puede comunicarse la CPU con el resto de ¿Como puede comunicarse la CPU con el resto de dispositivos?. Realmente la CPU, solo tiene dos instrucciones llamadas IN y OUT para poner un byte (o maximo, 2 bytes) en un "puerto". Un "puerto" no es nada mas que una dirección de destino que tiene algún chip o dispositivo de la placa madre. Un puerto, se direcciona con 2 bytes, es decir existe un máximo de ???? puertos en un PC. ¿como podemos direccionar un dispositivo, al cual sabemos que por "hardware" tiene un determinado (o determinados) puertos. mediante la instruccion IN se puede poner datos en un puerto. La secuencia de datos que estamos poniendo para un determinado hardware, puede ser por ejemplo, una "peticion" de que ese hardware haga algo, o bien le estamos "escribiendo" datos, en vez de ordenes, etc.... Esto depende del dispositivo. Del hardware, en sí,... es decir del "manual" del fabricante de hardware (del manual "técnico"). Igualmente, mediante la instruccion OUT, podemos "leer" un dato que un dispositivo nos haya dejado en un puerto. ¿como nos enteramos que el dispositivo ya tiene un PIO dato preparado para que lo leamos? Hay tres posibilidades: 1) A lo "bruto". Empezamos enviamos una petición a un dispositivo (mediante la instrucción IN), y según el manual del fabricante, ahora ese dispositivo, nos va a responder en un puerto. Pues bien, empezamos a leer (mediante OUT), de ese puerto hasta que exista un dato. A lo loco!, OUT->no hay dato?->OUT->no hay dato?->OUT... Es decir nos metemos en un bucle, sin hacer nada más hasta encontrar el dato que nos dice el manual. Pero.... si por desgracia falla el dispositivo, o hemos programado mal la petición que realizamos con el IN, pues... nos hemos metido en un "bucle" infinito. La CPU nunca tendrá ese dato y además la secuencia programada no se puede interrumpir....... Horrible. Una mejora de esta solución, sería mirar únicamente cada cierto tiempo. Se puede hacer que se mire cada "tic" de reloj. Y ese "tic" de reloj interno lo podemos programar (existe también un circuito de "timer" para estas cosas). Hemos mejorado, pero reconozcamos que estamos perdiendo mucho tiempo en "ver" si el hardware nos responde. * Este es el modo PIO (Program Input Output) IRQ 2) Un poco más sofisticado. Alguien inventó las IRQ (Interrupt Request). Es más lógico: le pedimos algo al dispositivo, y nos dedicamos a hacer otras cosas. Cuando el dispositivo tenga el dato, simplemente que nos avise enviando una "interrupcion" (IRQ). Se llama así porque una interrupcion, interrumpe obligatoriamente lo que esté haciendo la CPU y la obliga a tomar alguna acción (en este caso por ejemplo, leer una vez del correspondiente puerto, porque tenemos la seguridad que ahora sí que hay dato). Estas interrupciones, pueden ser interrupciones hardware, o bien interrupciones software. * Este es el método IRQ. DMA 3) Imaginemos que tenemos un "chip" inteligente, y que somos capaces de decirle que una vez que tenga LOS datos (este chip admite programación a nivel de decirle cuantos queremos), nos los pase a una dirección de memoria prefijada sin necesidad de que la CPU trabaje para nada. Esta es la técnica DMA. Esta técnica aparentemente genial tiene un inconveniente (mejor dicho dos). Primero, cuando el chip va a pasar los datos a la memoria, o desde la memoria, para asegurarse que nadie los toca, lo que hace es "desconectar" a la CPU del bus. Y mientras está "desconectada" la CPU no hace nada. Sufre un bloqueo. Bueno,... esto no era tan importante en la primera arquitectura del PC, con CPUs a 4,77 MHz, y una DMA rapida (4 MHZ), este tipo de acceso simplificaba la programación y además era mas rápida que las técnicas IN, OUT (técnicas PIO). Pero por desgracia y para conservar la compatibilidad la velocidad de la DMA sigue siendo la velocidad primitiva (4 MHZ), y además por el mismo motivo, la DMA solo sabe hacer transferencias de 8 y 16 bits simultáneamente (cuando la memoria actual se dirección a en un bus de 32). Y ademas, por desgracia, mientras está haciendo la transferencia "interrumpe" a nuestro flamante PIV, que durante ese tiempo habría podido hacer cientos de miles de operaciones en multitarea. * Esta es la transferencia DMA. PREPARANDO LA CARGA DE UN SO llegados a este punto, suponemos que la bios ya ha inicializado todos los dispositivos de la maquina. Asignado las correspondientes IRQs y recursos a los dispositivos y ahora va a proceder a cargar el sistema operativo. Lo mas normal es que intente su carga desde un disquete primero. Si esta carga falla, lo intenta desde el primer disco duro. Hay que matizar ya que esto es configurable en la bios de la maquina. El parrafo anterior es la opcion por defecto de casi todas las bios. Es aconsejable desactivar el intento de carga desde disquete en la bios. Casi todas las bios, permiten cambiar la secuencia de arrancada de A,C (es el defecto) a C,A o bien C only. Las ventajas que tenemos con esto son: 1) Se iniciará la carga mas rápidamente ya que no irá a buscar a disquete. 2) No tenemos el riesgo de habernos dejado un disquete en la maquina con un virus del boot. Si lo tuviésemos e intentase arrancar desde el disquete aunque no lo consiguiese, ya nos habría infectado el disco duro. Para ver la carga desde disco duro, debemos conocer primero como está lógicamente particionado el disco. PARTICIONES EN UN DISCO DURO Por definicion un disco duro permite hasta 4 particiones. No puede tener más y la explicacion, proviene del diseño del sector de boot del disco duro. Este sector de boot, se le llama tambien MBR (Master Boot Record). Dicho sector que ocupa siempre la misma posicion fisica en todos los discos duros (cabeza cero, cilindro cero, sector 1), tiene un diseño fijo. Todos los sistemas operativos tienen un FDISK o similar, que "sabe" crear en vacio este sector y además lo hace automaticamente si el disco nuevo Todos los sistemas operativos, lo crean exactamente igual. El tamaño de un sector es únicamente 512 bytes. La estructura de dicho sector, es un mini-programa y una pequeña tabla de 4 elementos. Cada elemento de la tabla, tiene los datos de cabeza, cilindro, sector de donde empieza una partición, de donde termina, el tipo de particion (hay unos códigos para FAT 16, FAT 32, Linux, NTFS, primaria, secundaria etc...), y una marca de cuál es la partición "arrancable". El mini-programa de este sector, lo unico que sabe hacer es leer dicha tabla, buscar si existe una particion "arrancable" y si existiese, va a la posicion del cilindro, cabeza, sector de comienzo y allí carga en memoria el primer sector que encuentra y lo ejecuta. Este nuevo sector es precisamente el "boot" de la particion (no confundirlo con el MBR, o sector 2 "boot" del disco que hemos citado anteriormente). Este ultimo "boot", el responsable de crearlo es el "format". Y el responsable de la creacion de las particiones es el FDISK (en sistemas Microsoft) Entonces, retomando un poco el titulo de estos articulos, la bios lo que hace es cargar en memoria el MBR del disco duro (en la dirección 7C00 hexadecimal) y cede el control a dicho programa. Este se realoja en otra posicion de memoria, busca la particion "activa" o "rrancable" y carga en memoria su sector de "boot", tambien en la dirección 7C00 y le cede control. Una mirada más cercana al proceso de inicio Al encender una PC, el BIOS efectúa varias pruebas al hardware para asegurarse de que no existan problemas, y luego empieza realmente el proceso de inicio del sistema operativo. El BIOS selecciona una unidad de disco y lee su primer sector. Típicamente, la unidad de disco seleccionada es la unidad de disquetes (y funciona si existe un disquete insertado booteable), de no ser así selecciona el primer disco duro, si existe un disco en la computadora (de todas maneras el orden de selección de unidad de discos es configurable en la mayoría de las PC's). Al primer sector de un disco se le llama sector de arranque, en inglés boot sector o master boot sector (MBR o sector de arranque maestro). Si el disco contiene varias particiones, cada una de ellas tiene su propio sector de arranque (primer sector de cada partición). El sector de arranque (boot sector) contiene un pequeño programa lo suficientemente pequeño para que quepa en un único sector, cuya responsabilidad es leer el sistema operativo desde el disco, cargarlo en memoria y ponerlo en ejecución. Al arrancar desde un disco duro, el código contenido en el sector de arranque maestro (MBR o Master Boot Record), examina la tabla de particiones del disco duro (esta tabla también se almacena en el MBR), identifica la partición activa (aquella partición que ha sido designada como de inicio), lee el cargador contenido en el sector de arranque (boot sector) a una localización en memoria y lo ejecuta. Firmware Firmware o Programación en Firme, es un bloque de instrucciones de programa para propósitos específicos, grabado en una memoria tipo ROM, que establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo. Al estar integrado en la electrónica del dispositivo es en parte hardware, pero también es software, ya que proporciona lógica y se dispone en algún tipo de lenguaje de programación. Funcionalmente, el firmware es el intermediario (interfaz) entre las órdenes externas que recibe el dispositivo y su electrónica, ya que es el encargado de controlar a ésta última para ejecutar correctamente dichas órdenes externas(...) Encontramos Firmware en memorias ROM de los sistemas de diversos dispositivos periféricos, como en monitores de video, unidades de disco, impresoras, etc., pero también en los propios microprocesadores, chips de memoria principal y en general en cualquier circuito integrado. Muchos de los Firmwares almacenados en ROM están protegidos por Derechos de Autor. El programa BIOS de una computadora es un firmware cuyo propósito es activar una máquina desde su encendido y preparar el entorno para la instalación de un Sistema Operativo complejo, así como responder a otros eventos externos (botones de pulsación humana) y al intercambio de órdenes entre distintos componentes de la computadora. En un microprocesador el firmware es el que recibe las instrucciones de los programas y las ejecuta en la compleja circuitería del mismo, emitiendo órdenes a otros dispositivos del sistema. POST (Power-On Self Test) En el momento en que conectamos el equipo la CPU (Unidad Central de Proceso) comienza la carga de aquéllas instrucciones grabadas en la BIOS (Sistema Básico de Entrada/Salida). La BIOS, cierto tipo de firmware, contiene código dependiente del procesador que inicia el equipo sin importar el sistema que esté instalado. El primer juego de instrucciones de inicio es la POST, responsable de las funciones: 1. Llevar a cabo la comprobación inicial de hard, como determinar la cantidad de memoria presente. 2. Verificar que los dispositivos que son necesarios para iniciar el sistema operativo, como el disco duro, están presentes. 3. Recuperar los ajustes de configuración del sistema desde la CMOS, que se encuentra en la placa madre. La CMOS es una memoria complementaria no volatil (Complementary Metal Oxide Semiconductor). Su contenido permanece aún despues del apagado del equipo. Una configuración de hardware almacenada es por ejemplo el orden de inicio de dispositivos. Después de completar la POST, los adaptadores agregados que tienen su propio firmware (controladoras de disco o de vídeo) proceden a sus propios test. Si el inicio falla antes o durante la POST, el equipo sufre un fallo de hard. Normalmente la BIOS muestra en pantalla un mensaje de error que indica la naturaleza del fallo. Suele además efectuar cierto número de 'beep' dependiendo de que hard provoca el error, una lectura del manual de la placa madre nos dará dicha información. Y toda la que podremos necesitar si hay que sustituir algún elemento, si es posible.