¿Dónde se almacena el gestor de arranque, en ROM, RAM u otro lugar?


30

De acuerdo con la entrada de wikipedia, un gestor de arranque es un pequeño programa almacenado en la ROM (una parte de la memoria principal (RAM), ¿no?) Que solo se puede leer y no borrar. Estoy un poco perplejo aquí. ¿Significa esto que cada RAM que compramos tiene un gestor de arranque instalado por defecto? Y también, leí un libro que dice que normalmente hay un área llamada MBR (Master Boot Record) en el disco duro que incluye un gestor de arranque ...

Entonces, ¿dónde se encuentra exactamente este gestor de arranque? ¿Los diferentes sistemas operativos almacenan su gestor de arranque en diferentes lugares?

Respuestas:


43

ROM es un chip separado de la RAM. No requiere energía para retener su contenido, y originalmente no podía modificarse de ninguna manera, sino que venía de fábrica. Más tarde, PROM o Memoria de solo lectura programable reemplazó la ROM verdadera. Estos chips se pusieron en blanco de fábrica y se pudieron escribir una vez usando un procedimiento especial que esencialmente quemó pedazos del chip causando que su estado cambiara. Esto fue reemplazado por EPROM, o memoria programable borrable. Estos chips tenían una pequeña ventana y, si iluminabas con luz ultravioleta, podrían borrarse, lo que permitiría programarlos nuevamente. Estos fueron reemplazados por EEPROM, o memoria programable borrable eléctricamente. Estos chips tienen un procedimiento de software especial para borrarlos y poder reprogramarlos.

La placa base tiene algún tipo de chip ROM que contiene el firmware, que en el lenguaje de la PC generalmente se llama BIOS o Sistema básico de entrada y salida, aunque en estos días se está reemplazando con el firmware EFI. Este es el software que la CPU comienza a ejecutar al encender. Todo el firmware realiza la inicialización del hardware, por lo general proporciona una salida de diagnóstico y proporciona una forma para que el usuario configure el hardware, luego localiza y carga el cargador de arranque, que a su vez localiza y carga el sistema operativo.

Con el BIOS de la PC, simplemente carga y ejecuta el primer sector del disco desde el que decide arrancar, que generalmente es el primer disco duro detectado. Por convención, el primer sector de un disco duro, llamado Master Boot Record, contiene una tabla de particiones de DOS que enumera las ubicaciones de las particiones en el disco y deja espacio para el cargador de arranque. Ubuntu usa el cargador de arranque GRUB, que coloca suficiente código en el MBR para cargar y ejecutar /boot/grub/core.img. Normalmente, se coloca una copia de este archivo en los sectores que siguen al MBR, pero antes de la primera partición, y eso es realmente lo que carga el MBR, ya que encontrar la ubicación /boot/grub/core.imges demasiado difícil de hacer correctamente en el espacio muy limitado disponible en el MBR .

La imagen principal de grub contiene el código de grub base, además de los módulos necesarios para acceder /boot/grubpara poder cargar módulos adicionales allí, y el archivo de configuración de grub que describe qué sistemas operativos se pueden iniciar y dónde se pueden encontrar.

El firmware EFI utilizado en Intel Macs y que está disponible como reemplazo del BIOS en las placas base de PC más recientes requiere una partición dedicada que contenga los archivos del cargador de arranque, y el firmware es lo suficientemente inteligente como para encontrar esos archivos y cargar uno en lugar de simplemente cargar y ejecutar lo que sea está en el primer sector del disco.


Aquí hay un párrafo extraído de Computer Science de Glenn Brookshear , una descripción generalA small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM) según él. La memoria principal está compuesta por dos partes, RAM y ROM. Solo quiero saber si el llamado gestor de arranque está instalado en la parte ROM de la memoria principal ... @Sergey
xczzhh

@xczzhh: sí, el BIOS se almacena en la ROM, que detecta el cargador de arranque presente en las particiones. Al instalar cualquier sistema operativo, crea un tipo de marca de entrada en el BIOS para detectar el CARGADOR DE ARRANQUE respectivo.
atenz

1
@xczzhh, no, el gestor de arranque está en el disco duro o en algún otro disco. Se instala junto con el sistema operativo. A menos que descargue e instale una actualización del fabricante de su placa base, la ROM nunca cambia.
psusi

EFI usa aplicaciones EFI en su lugar. Carga la aplicación EFI en la NVRAM
Suici Doga

@SuiciDoga, no, las aplicaciones EFI (que se limitan básicamente a unas pocas utilidades de actualización de firmware y cargadores de arranque) se almacenan en la partición del sistema EFI del disco duro. NVRAM es donde EFI almacena algunas variables de configuración, como el orden de arranque.
psusi

23

La ROM no está en la memoria principal:

ROM no es parte de la memoria principal. Es un chip separado, que está integrado la mayor parte del tiempo en un IC más grande. Más ejemplo, su PC puede constar de varias ROM. Esos están construidos en su placa madre.

En general :

  • Las ROM son muy pequeñas en tamaño de memoria. Esta memoria no es volátil, en el sentido, el programa almacenado en la ROM no se borra con la alimentación apagada.
  • Los ROM se utilizan para almacenar programas permanentes, que son muy esenciales para que su hardware funcione correctamente.
  • Un ejemplo típico de ROM es el chip BIOS. Donde se almacena el programa de arranque de muy bajo nivel y el hardware de inicialización

Usted mencionó eso, leyó un artículo en el que el autor dijo: "La ROM es parte de la memoria principal". Esto es confuso, porque típicamente Memoria principal se refiere a la memoria de tipos que son volátiles, como la RAM. Pero sí, si usa el término Memoria principal para todo el espacio de memoria de una PC, entonces la ROM es parte de ese espacio de memoria. Debe tener en cuenta que, generalmente, la memoria principal excluye la memoria de tipos como ROM .

Dónde se almacena el cargador de arranque:

El sistema moderno utiliza carga de arranque en dos etapas. En el primer paso, se carga un pequeño programa desde un sector (llamado sector de arranque más a menudo) del disco duro. Este pequeño programa a su vez carga un programa desde algún lugar del disco, que se llama gestor de arranque. Y finalmente el gestor de arranque carga el sistema operativo.

En términos del sistema Ubuntu, el proceso es el siguiente:

  1. Después de encender su PC, el BIOS (que está almacenado en la ROM) se ejecuta automáticamente e inicializa varias partes del hardware de la PC. Luego, busca un sector específico en el primer dispositivo de arranque definido (generalmente el disco duro). Este sector es el sector de arranque, que tiene un tamaño de 512 bytes.

  2. El programa en el sector de arranque se carga en la memoria (primera etapa). Este pequeño programa tiene información sobre qué programas debería cargar en la memoria a continuación y dónde se encuentra ese programa en el disco o dispositivo de arranque. Carga ese programa. En Ubuntu, lo es /boot/grub/core.img.

  3. En la segunda etapa, el OS-Loader, GRUB, carga Ubuntu cargando el kernel y el disco RAM inicial en la memoria y el control de transferencia al kernel. Luego, el kernel se ejecuta y carga todos los programas necesarios, como el administrador de visualización, Gui, etc.

Entonces, podemos decir claramente que el gestor de arranque no está almacenado en la ROM ni en la RAM, en realidad está almacenado en el disco duro (u otro dispositivo de arranque, como CDROM de arranque, unidades USB, etc.), precisamente hablando del primer sector de la disco duro, que tiene un tamaño de 512 bytes y que a menudo se denomina sector de arranque . Y este gestor de arranque carga el cargador del sistema operativo (en Ubuntu, es grub) que también reside en el disco duro (es decir, la /boot/grub/carpeta), y su tarea es cargar el sistema operativo (por ejemplo, Ubuntu).

Como prueba, retire el disco duro (y todos los demás dispositivos de arranque) e intente arrancar. Puede subir al paso de BIOS, pero después de ese paso, no puede arrancar nada. Lo más probable es que el BIOS diga " No se encontró ningún dispositivo de arranque " o " No se encontró ningún sistema operativo " o algo similar.

Espero que esta respuesta ayude.


Para obtener más información, puede visitar estos enlaces:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory

2
La ROM no ha sido más rápida que la RAM desde hace aproximadamente una década. De hecho, una de las primeras cosas que hace un BIOS moderno es copiarse en la RAM porque la RAM es mucho más rápida.
David Schwartz

1
@DavidSchwartz, ha pasado más de una década. Cada BIOS de PC que utilicé a mediados de los 90 tenía una opción para ocultar la BIOS en la velocidad.
psusi

@Anwar, el enlace a la memoria principal está muerto.
The Matt

15

Un procesador compatible con x86 siempre se inicia en el llamado modo "real", que es un modo de 16 bits con 1 megabyte de memoria direccionable disponible. Desde ese espacio de direcciones, 640K están disponibles para programas y las direcciones anteriores que se asignan a diferentes dispositivos.

Por ejemplo, las direcciones que comienzan desde 0xA000: 0x0000 se asignan a la RAM de video, por lo tanto, escribir datos allí realmente escribiría datos en la memoria del adaptador de video que muestra píxeles en la pantalla.

De manera similar, la ROM del BIOS comienza desde 0xF000: 0000, por lo que la CPU, cuando se enciende, simplemente comienza a ejecutar instrucciones una por una a partir de esa dirección predefinida. La ROM del BIOS contiene el programa inicial que comienza realizando una "autocomprobación de encendido" o POST. De Wikipedia:

El software del BIOS está integrado en la PC y es el primer código que ejecuta una PC cuando se enciende ('firmware de arranque'). Cuando se inicia la PC, el primer trabajo para el BIOS es la autocomprobación de encendido, que inicializa e identifica dispositivos del sistema como la CPU, RAM, tarjeta de video, teclado y mouse, disco duro, unidad de disco óptico y otro hardware Luego, el BIOS localiza el software del cargador de arranque en un dispositivo periférico (designado como 'dispositivo de arranque'), como un disco duro o un CD / DVD, y carga y ejecuta ese software, dándole el control de la PC. 2 Este proceso se conoce como arranque o arranque, que es la abreviatura de bootstrapping.

El firmware del BIOS es responsable de leer el primer sector del disco en la memoria y pasar el control a un pequeño programa que, nuevamente, se encuentra en una dirección específica allí. El gestor de arranque MBR puede comenzar a cargar el sistema operativo directamente (como fue el caso con MS-DOS) o cargar la "segunda etapa", que no se limita a los confines de un solo sector de disco.

Los cargadores de arranque que usan el enfoque de etapas múltiples pueden ser bastante complejos con una interfaz de texto o gráfica que permite al usuario seleccionar desde qué disco o partición cargar un sistema operativo.

Entonces, si, como sugiere Uri, le interesa saber si el gestor de arranque de Windows y GRUB pueden coexistir juntos, la respuesta es: el MBR real solo puede contener un gestor de arranque de primera etapa (vamos, todo el sector tiene solo 512 bytes) , pero la segunda etapa de un gestor de arranque puede "cargar en cadena" los sistemas operativos desde diferentes particiones. El gestor de arranque de Windows solo puede reconocer y cargar Windows, mientras que GRUB puede cargar Linux o pasar el control a otro gestor de arranque almacenado en un registro de arranque de volumen de una de las particiones, lo que permite arrancar Windows u otro sistema operativo. El último proceso se llama carga en cadena.

Cuando instale Ubuntu en una computadora que tenga Windows, GRUB se instalará en MBR y podrá iniciar Ubuntu y Windows.

Sin embargo, si Windows se instala después de Ubuntu, GRUB se reemplazará con el gestor de arranque de Windows y deberá reinstalar GRUB para poder iniciar Ubuntu nuevamente.


Supongo que quiere saber si el gestor de arranque de Windows y GRUB pueden coexistir juntos o no. Los discos UEFI y GPT no usan MBR, ¿cómo les afecta esto?
Uri Herrera

La ROM del BIOS se encuentra en el segmento F000: que está justo debajo de 1 MB. El 640k es de los segmentos debajo de A000 :, que están disponibles para el SO y los programas en modo real.
psusi

@psusi: tienes razón, reformulé esa parte
Sergey

Gracias por la respuesta. ¿Quiere decir que hay múltiples cargadores de arranque (uno dentro del BIOS y otro en MBR) involucrados para arrancar un sistema operativo? Es nuevo para mí ... :)
xczzhh

@xczzhh Bueno, ok, el código en BIOS no se llama "gestor de arranque", el que está almacenado en el disco sí. Actualicé mi respuesta para aclarar esto.
Sergey

4

El conflicto entre lo que usted dice acerca de que el gestor de arranque está en ROM y está en el MBR quizás se deba a que el gestor de arranque se utiliza para cualquier código que resuelva cómo hacer lo mínimo para cargar el código para hacer que la computadora haga algo útil, incluyendo cada estado en un arranque de múltiples etapas.

Entonces, el estado inicial es tener una computadora, que es un dispositivo programable, pero no sabe cómo cargar el software para ejecutarlo porque no tiene ningún software cargado. (Y, por lo tanto, arrancar desde tirar de sus botas ).

Históricamente, había algunas soluciones diferentes para este problema, pero en estos días comenzamos con algún código en ROM (probablemente estrictamente EEPROM), que es suficiente para que vea diferentes dispositivos y los pruebe a su vez hasta que encuentre uno que sea de arranque

(Esta es la razón por la cual muchos sistemas arrancarán desde un CD o DVD si coloca un disco instalador del sistema operativo en y desde el disco duro; de lo contrario, el BIOS [el código en la ROM, incluido el código del que estamos hablando y algunos otros - cosas de nivel que hacen que las cosas comiencen] está configurado para mirar primero la unidad de CD / DVD, luego en un disco duro si no encuentra nada, los tweakers a menudo lo configuran para ignorar la unidad de CD / DVD a menos que se solicite manualmente. no pierde el tiempo girando un disco no arrancable que quedó en la unidad).

Este código en la ROM a veces se denomina cargador de arranque .

Cuando sepa qué unidad mirar, mirará el MBR, que contiene información sobre las particiones primarias: ¿cómo podría mirar luego / o / boot o C: / (en un sistema Windows) si ni siquiera lo hizo? ¿sabe qué parte del disco era qué partición, no importa cómo se montó cada partición? - y algo de código con más instrucciones para ejecutar. (Por cierto, esto explica por qué algunos sistemas operativos, como Windows, solo se pueden instalar en una partición primaria, los detalles de esas particiones están en el MBR y esa es la única información de partición que ha leído su gestor de arranque, y no carga el EBR en aprenda sobre las particiones lógicas, en lo que respecta a esas particiones aún no existen).

Ese código ejecutable, también se llama un gestor de arranque . Cuando queremos distinguir entre esto y lo que viene después, se llama un cargador de arranque primario (porque a menos que estemos haciendo nuestro propio BIOS ignoramos el bit ROM como fuera de nuestro control).

Ese código será muy pequeño ya que solo tiene alrededor de 400 bytes para que entre, por lo que para hacer algo real, cargará más código, que puede ser más grande ya que no tiene que lidiar con esta restricción.

Este código también se conoce como gestor de arranque . Cuando nos importa distinguir entre esto y lo que vino antes, se llama un cargador de arranque secundario .

Ese código quizás podría ser la etapa final del proceso. Lo haría si solo tiene un sistema operativo, o si todos los sistemas operativos de su sistema usan cargadores de arranque compatibles (por ejemplo, dos instalaciones de Linux que usan GRUB, por lo que el GRUB que se actualizó por última vez puede ofrecer iniciar en cualquiera de ellos). presenta menús (si lo desea) se carga en un kernel y pasa el control sobre el sistema operativo.

En el caso de que tenga un sistema operativo que no sea compatible con ese gestor de arranque, puede cargarse en cadena. Por ejemplo, si tiene Windows y Linux en la misma máquina, la opción GRUB para cargar Windows, de hecho, cargará otro gestor de arranque que solo conoce las instalaciones de Windows y lo transferirá. Si bien esta fue una etapa terciaria en el proceso, todavía se llama un cargador de arranque secundario , porque no sabe ni le importa que haya otro cargador de arranque secundario ejecutándose antes. Este también sería el caso con una instalación de Linux que utiliza un tipo diferente de cargador de arranque secundario.

Principalmente cuando hablamos del gestor de arranque en términos de Linux, generalmente no nos referimos al código ROM (no es parte de Linux ni se cambia al instalar Linux). Cuando lo hacemos update-grub, estamos cambiando el cargador de arranque secundario, que normalmente está en / boot de una instalación en particular. Cuando lo hacemos, install-grublo estamos cambiando y también el cargador de arranque primario en el MBR para que tenga suficiente código para saber dónde está / boot (tal vez iniciando un RAID de software a medida que avanza) y lo cargará y ejecutará cuando se ejecute. .

Entonces, en resumen, usted era incorrecto cuando dijo que la ROM era parte de la memoria principal * porque está separada. (De hecho, la RAM se toma como antónimo de ROM) Estuviste en lo correcto al decir que había un gestor de arranque allí y en el MBR, porque son dos pasos del proceso y ambos a veces se llaman por ese nombre. Y la respuesta a "¿Los diferentes sistemas operativos almacenan su gestor de arranque en diferentes lugares?" es "en su mayoría", porque si los cargadores de arranque secundarios son incompatibles, ocultarán otros cargadores de arranque (si instala Windows después de instalar Linux) o cargarán en cadena al otro si así se solicita (si soluciona esa situación o instala Linux después de Windows), pero un sistema operativo puede compartir un cargador de arranque secundario si son compatibles (si instala Linux después de otro Linux que usa el mismo tipo de cargador de arranque secundario y puede ver el otro Linux [a veces RAID de software confunde las cosas y hace necesaria la carga en cadena).

* En los días en que uno utilizaría programáticamente ROM y RAM, esto era diferente. En un ZX Spectrum, por ejemplo, la ROM tendría 16 kB e incluiría un intérprete BÁSICO, además de proporcionarle el punto de partida para cargar algo en su 48 kB o 128 KB (paginado) o RAM (en cuyo caso, se está iniciando esencialmente en ese intérprete BASIC y luego usarlo para arrancar lo que estaba en la cinta), había un montón de funciones del intérprete BASIC que los programas en RAM podrían usar (¿por qué escribir una función trigonométrica cuando la computadora ya tiene una en una posición conocida? especialmente cuando solo tiene 48 KB para que se ejecute todo su propio código). Esta ROM también era visible de la misma manera que la RAM, solo en diferentes direcciones. En tal caso, la ROM era tan parte de la memoria principal como la RAM, pero no escribible.


0

Haga un ejemplo de trabajo mínimo y ejecútelo en un emulador para comprender esos conceptos:

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

Este es un "gestor de arranque" súper simple que realiza una sola hltinstrucción. Más información en: https://stackoverflow.com/a/32483545/895245

Luego puede ejecutarlo en hardware real con:

sudo dd if=main.img of=/dev/sdX

y conectando el USB a su computadora, y arrancando desde él.

Cuando haces esto, queda claro que el gestor de arranque es algo que vive en un disco de almacenamiento permanente como USB o discos duros.

Lo que vive en la ROM es el código que inicia el gestor de arranque para nosotros, llamado firmware (o menos precisamente BIOS).


0

En los viejos tiempos, el programa de arranque residía en una cinta de papel perforada similar a la utilizada por las máquinas de telégrafo o los medios de tarjetas perforadas ('ya no los veo a los dos). el proceso solía llamarse IPL, abreviatura de carga inicial del programa. A veces, si no hubiera disponible una cinta de papel o un lector de tarjetas, sería necesario ingresar el código binario de IPL directamente en el procesador mediante una consola en el panel frontal. ¡Uf!

Hoy en día, el código IPL reside en los pROM que, cuando se ejecutan a su vez, cargan y ejecutan los cargadores de arranque secundarios diseñados para cargar (arrancar) el sistema operativo deseado. el cargador secundario podría estar en cualquier medio en cualquier parte de la configuración conocida o direccionable por el código IPL.


-1

El cargador de arranque generalmente se encuentra en el primer sector del disco duro, generalmente llamado Registro de arranque maestro.

Aclamaciones

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.