¿Por qué se necesitan CMOS y BIOS en una computadora?

‘Necesidad’ es un poco exagerado. En el nivel más bajo, una CPU (la mayoría de las modernas, en cualquier caso) que salga del reinicio comenzará a ejecutar código en alguna dirección que es una propiedad inmutable de la CPU en particular. Para que el sistema pueda hacer algo repetible, debe haber algún código asignado en esa dirección. Los diseñadores de la PC de IBM optaron por utilizar una PROM (o EEPROM) para asignar a ese espacio de direcciones, y llamaron al código que contiene un ‘BIOS’, posiblemente basado en el mismo nombre utilizado por una generación anterior de computadoras que ejecutan el CP / M OS. Como había relativamente pocas tecnologías de memoria alternativas en ese momento, la elección era sensata para la época. El código que eligieron incluir proporcionó algunos servicios y propósitos diferentes. Proporcionó un conjunto documentado de servicios del sistema que podrían utilizarse de manera uniforme para acceder al hardware de la computadora y sus periféricos. Cualquier programa podría invocarlos y liberaría al desarrollador del programa de codificar los detalles de bajo nivel para acceder a los recursos de hardware del sistema. También proporciona algunos fragmentos de datos binarios estándar, como la tabla de búsqueda de caracteres de la memoria de video. Proporcionó una verificación general del estado del sistema que se ejecutó automáticamente en el momento del arranque. Finalmente, proporciona la primera capa de arranque para cargar una capa de código progresivamente más capaz en la RAM; esencialmente la primera capa de un cargador de arranque. Tenga en cuenta que todo este código debe estar allí automáticamente incluso después de una pérdida de energía; No es volátil. En las arquitecturas de CPU modernas, se almacena en una memoria no volátil que también se puede escribir; memoria flash. Otras arquitecturas de hardware pueden incluir la parte de arranque del código del sistema en la memoria que está programada permanentemente en la matriz de la CPU, o la memoria flash puede estar estrechamente unida a la CPU de otras maneras. Los sistemas muy antiguos proporcionaban una forma para que un humano programara el código de la dirección de arranque mediante un sistema de conmutadores. No importa cómo lo corte, la CPU ejecutará código en una dirección conocida una vez que se libere la lógica de reinicio, por lo que será mejor que haya un código útil allí. Esa es la respuesta a la ‘necesidad’ de un BIOS.

El BIOS no contiene secciones de memoria que se puedan escribir individualmente, por lo que no hay forma de almacenar cosas que no sean completamente estáticas, como información sobre la configuración de un sistema en particular. Con el fin de preservar los datos algo volátiles en los ciclos de energía, se proporcionó una pequeña sección de memoria que consume muy poca energía. La memoria CMOS era una tecnología nueva en el día, y la memoria estática creada usando la tecnología CMOS podría estar respaldada por batería para proporcionar la memoria de lectura / escritura suficiente para almacenar información vital del sistema, como geometrías de disco, información sobre hardware instalado, etc. Además , el chip que implementó la RAM CMOS respaldada por batería también contenía un reloj de hora del día, para que el sistema pudiera restaurar una configuración de fecha y hora adecuada después del arranque. Hoy en día, los sistemas operativos usan cosas como el Protocolo de tiempo de red para adquirir y sincronizar la información de hora y fecha de los servidores de tiempo maestro, pero el reloj CMOS es anterior a la disponibilidad de dicho protocolo. Las arquitecturas que no son de PC pueden o no proporcionar una funcionalidad similar, naturalmente dependiendo del caso de uso, los costos, etc.

Básicamente es para manejar los componentes de hardware en otras palabras, verificar todo el sistema si están funcionando bien (verificaciones de integridad), es el evento de muy bajo nivel después de presionar el botón de encendido de la computadora. Es posible que necesite saber lo que se llama “secuencia de arranque

Aquí está la secuencia de arranque de Linux:

1.BIOS

  • BIOS significa Sistema básico de entrada / salida
  • Realiza algunas verificaciones de integridad del sistema
  • Busca, carga y ejecuta el programa del cargador de arranque.
  • Busca el cargador de arranque en disquete, CD-ROM o disco duro. Puede presionar una tecla (generalmente F12 de F2, pero depende de su sistema) durante el inicio del BIOS para cambiar la secuencia de arranque.
  • Una vez que el programa del cargador de arranque es detectado y cargado en la memoria, el BIOS le da el control.
  • Entonces, en términos simples, el BIOS carga y ejecuta el cargador de arranque MBR.

2.MBR

  • MBR significa Master Boot Record.
  • Se encuentra en el primer sector del disco de arranque. Típicamente / dev / hda o / dev / sda
  • MBR tiene menos de 512 bytes de tamaño. Esto tiene tres componentes 1) información del cargador de arranque primario en el primer 446 bytes 2) información de la tabla de partición en los siguientes 64 bytes 3) verificación de validación mbr en los últimos 2 bytes.
  • Contiene información sobre GRUB (o LILO en sistemas antiguos).
  • Entonces, en términos simples, MBR carga y ejecuta el gestor de arranque GRUB.

3.GRUB

  • GRUB significa Grand Unified Bootloader.
  • Si tiene múltiples imágenes de kernel instaladas en su sistema, puede elegir cuál ejecutar.
  • GRUB muestra una pantalla de bienvenida, espera unos segundos, si no ingresa nada, carga la imagen predeterminada del núcleo como se especifica en el archivo de configuración de grub.
  • GRUB tiene el conocimiento del sistema de archivos (el antiguo cargador de Linux LILO no entendía el sistema de archivos).
  • El archivo de configuración de Grub es /boot/grub/grub.conf (/etc/grub.conf es un enlace a esto). El siguiente es un ejemplo de grub.conf de CentOS.

# boot = / dev / sda
predeterminado = 0
tiempo de espera = 5
splashimage = (hd0,0) /boot/grub/splash.xpm.gz
menú oculto
título CentOS (2.6.18-194.el5PAE)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root = LABEL = /
initrd /boot/initrd-2.6.18-194.el5PAE.img

Como observa en la información anterior, contiene el núcleo y la imagen initrd.

Entonces, en términos simples, GRUB simplemente carga y ejecuta Kernel e imágenes initrd.

4.Kernel

  • Monta el sistema de archivos raíz como se especifica en “root =” en grub.conf
  • Kernel ejecuta el programa / sbin / init
  • Dado que init fue el primer programa ejecutado por Linux Kernel, tiene el ID de proceso (PID) de 1. Haga un ‘ps -ef | grep init ‘y verifique el pid.
  • initrd significa Disco RAM inicial.
  • El núcleo usa initrd como sistema de archivos raíz temporal hasta que se inicia el núcleo y se monta el sistema de archivos raíz real. También contiene los controladores necesarios compilados en su interior, lo que le ayuda a acceder a las particiones del disco duro y a otro hardware.

5.Iniciar

  • Mira el archivo / etc / inittab para decidir el nivel de ejecución de Linux.
  • Los siguientes son los niveles de ejecución disponibles 0 – detener 1 – Modo de usuario único 2 – Multiusuario, sin NFS 3 – Modo multiusuario completo 4 – sin usar 5 – X11 6 – reiniciar
  • Init identifica el nivel de inicio predeterminado de / etc / inittab y lo usa para cargar todos los programas apropiados.
  • Ejecute ‘grep initdefault / etc / inittab’ en su sistema para identificar el nivel de ejecución predeterminado
  • Si desea meterse en problemas, puede establecer el nivel de ejecución predeterminado en 0 o 6. Como sabe lo que significa 0 y 6, probablemente no lo haga.
  • Por lo general, establecería el nivel de ejecución predeterminado en 3 o 5.

6. Programas de nivel

  • Cuando el sistema Linux se está iniciando, es posible que vea varios servicios comenzando. Por ejemplo, podría decir “iniciando sendmail …. OKAY”. Esos son los programas de nivel de ejecución, ejecutados desde el directorio de nivel de ejecución según lo definido por su nivel de ejecución.
  • Dependiendo de su configuración predeterminada de nivel de inicio, el sistema ejecutará los programas desde uno de los siguientes directorios. Ejecutar nivel 0 – /etc/rc.d/rc0.d/ Ejecutar nivel 1 – /etc/rc.d/rc1.d/ Ejecutar nivel 2 – /etc/rc.d/rc2.d/ Ejecutar nivel 3 – / etc / rc.d / rc3.d / Ejecutar nivel 4 – /etc/rc.d/rc4.d/ Ejecutar nivel 5 – /etc/rc.d/rc5.d/ Ejecutar nivel 6 – /etc/rc.d /rc6.d/
  • Tenga en cuenta que también hay enlaces simbólicos disponibles para este directorio en / etc directamente. Entonces, /etc/rc0.d está vinculado a /etc/rc.d/rc0.d.
  • En los directorios /etc/rc.d/rc*.d/, vería programas que comienzan con S y K.
  • Los programas que comienzan con S se usan durante el inicio. S para inicio.
  • Los programas que comienzan con K se usan durante el apagado. K para matar.
  • Hay números justo al lado de S y K en los nombres de los programas. Esos son el número de secuencia en el que los programas deben iniciarse o eliminarse.
  • Por ejemplo, S12syslog es iniciar el demonio syslog, que tiene el número de secuencia de 12. S80sendmail es iniciar el demonio sendmail, que tiene el número de secuencia de 80. Entonces, el programa syslog se iniciará antes de sendmail.

Ahí tienes. Eso es lo que sucede durante el proceso de arranque de Linux.

Fuente: Secuencia de arranque de Linux

En esencia, la respuesta es probablemente sobre capas de abstracción y flexibilidad. El firmware (código en la memoria no volátil) permite que una computadora se use con una variedad de discos y sistemas operativos al proporcionar un puente predecible entre los dos. BIOS fue el nombre dado a este firmware en la PC IBM original.

He usado una computadora sin firmware (Ferranti FM-1600B). Tenía interruptores en el panel frontal que le permitían ingresar un programa en binario a la RAM. Cuando inició la computadora, creo que comenzaría a ejecutar instrucciones en la dirección 0. Por lo general, el arranque se realizó leyendo en un pequeño programa en cinta de papel, que pudo leer un programa más complejo en cinta de papel, que luego podía leer un cinta magnética. Afortunadamente, la RAM que utilizaba era un núcleo magnético y no volátil, por lo que los programas sobrevivirían al apagarse. Menciono esto solo para señalar que en realidad no se necesita un BIOS, es una conveniencia.

En una computadora moderna, el equivalente a la dirección 0 está en el firmware (BIOS). Cuando inicia la computadora, comienza a ejecutar instrucciones desde el firmware en la memoria no volátil (que a diferencia de CMOS RAM, retiene los datos con la alimentación apagada). Estas instrucciones proporcionan un sistema rudimentario que puede comunicarse con periféricos estándar (teclado, monitor, interfaz de red) y permite al usuario configurar el sistema (por ejemplo, elegir qué arrancar a continuación). Luego, el BIOS busca un sistema operativo (o más bien, instrucciones ejecutables de algún tipo) en varios lugares, como un sector de arranque del disco duro, CD, memoria USB o dirección TFTP en una red. En la PC original, según recuerdo, el BIOS realmente proporcionó el código para que el sistema operativo se conecte a los periféricos (teclado, etc.), pero en los sistemas operativos modernos el firmware se omite una vez que el sistema se inicia y no participa más en el funcionamiento de la computadora.

Muchas personas usan los términos BIOS (sistema básico de entrada / salida) y CMOS (semiconductor de óxido metálico complementario) para referirse a lo mismo. Aunque están relacionados, son componentes distintos y separados de una computadora. El BIOS es el programa que inicia una computadora y el CMOS es donde el BIOS almacena la fecha, la hora y los detalles de configuración del sistema que necesita para iniciar la computadora.

El BIOS es un pequeño programa que controla la computadora desde el momento en que se enciende hasta el momento en que el sistema operativo se hace cargo. El BIOS es firmware, lo que significa que no puede almacenar datos variables.

CMOS es un tipo de tecnología de memoria, pero la mayoría de las personas usan el término para referirse al chip que almacena datos variables para el inicio. El BIOS de una computadora inicializará y controlará componentes como los controladores de disquete y disco duro y el reloj de hardware de la computadora, pero los parámetros específicos para el inicio y la inicialización de componentes se almacenan en el CMOS.