Cómo se inicia el servidor


Iniciar un servidor es una secuencia larga y compleja de acciones, que depende del componente de hardware, la configuración y el software utilizado. Muchos, incluso administradores de sistemas experimentados y calificados, tienen una mala idea de lo que sucede exactamente cuando se inicia el servidor, por lo que decidimos analizar este proceso en detalle.

Para no desmontar todos los casos posibles, consideraremos la carga en las siguientes condiciones:

  • Procesador Intel de 64 bits;
  • Modo de arranque heredado
  • Particionamiento de disco MBR;
  • cargador de arranque GRUB2.

Despierta y canta


La activación del servidor se inicia de varias maneras, entre las cuales presionar el botón de Encendido es la más común, pero no la única. Otra opción es mediante un comando a través de la red ( Wake-on-LAN ) o mediante comandos desde dispositivos externos ( Wake-on-PCIe , Wake-on-Keyboard , Wake-on-Mouse ). Los comandos se ejecutan solo si los parámetros correspondientes están habilitados en la Utilidad de configuración del BIOS , de lo que hablaremos más adelante.

Un dispositivo separado es el módulo BMC, que proporciona capacidades avanzadas de administración del servidor. Lea más sobre esta tecnología en nuestro blog .

Los métodos anteriores son inteligentes y requieren el envío de un comando especialmente formado en los buses de datos. Una forma más simple: enciéndalo cuando se suministre energía a la fuente de alimentación. En la configuración del BIOS, este parámetro se llama Pérdida de energía de CA y toma uno de tres estados:

  • Apagado : el servidor permanecerá apagado.
  • Encendido : el servidor se encenderá.
  • Último estado : el servidor se encenderá solo si se encendió en el momento de la pérdida de energía.

El uso de estos métodos igualmente lleva a enviar al procesador una señal de reinicio y al inicio del procedimiento de inicio.

Descargar el primer programa


El primer paso para iniciar el servidor es encender la fuente de alimentación y configurar la señal de reinicio para el procesador. Si hay una señal de reinicio , el generador de frecuencia del procesador no funciona y los registros del procesador se reinician a los valores establecidos por el fabricante del procesador.

Cuando se inicia en la fuente de alimentación, se producen transitorios, por lo que el voltaje de salida puede estar fuera de los límites permitidos, lo que afectará negativamente al procesador en funcionamiento. Por lo tanto, la señal de reinicio no se elimina hasta que la potencia entrante esté completamente estabilizada.

Después de estabilizar el voltaje, la fuente de alimentación establece la señal Power Good . Esta señal significa que la placa base puede iniciar todos los componentes del servidor. A continuación, el chipset asigna al espacio de direcciones todos los dispositivos conectados, incluida la ROM (memoria de solo lectura) con el código del Sistema básico de entrada / salida (BIOS). A continuación, se elimina la señal de reinicio y se inicia el generador de frecuencia del procesador.

BIOS: un sistema que proporciona una API para trabajar con equipos y dispositivos conectados. Uno de los objetivos importantes del BIOS es inicializar y probar el hardware al inicio.


Independientemente de la cantidad de procesadores del sistema, cuando se inicia el servidor, solo se activa un núcleo de un procesador y los núcleos restantes permanecen en modo de suspensión. El núcleo despertado se denota mediante el procesador Bootstrap (BSP, en lo sucesivo denominado el procesador). Una vez que desaparece la señal de reinicio , los registros del procesador se llenan de tal manera que el procesador funciona en un modo especial de 32 bits llamado Modo de procesador inicial .

Modo de procesador inicial : un modo operativo en el que un procesador de 64 bits solo se obtiene después de un reinicio. En este modo, el procesador es capaz de ejecutar instrucciones de 32 bits y el espacio de direcciones es de 4 GiB.

Una vez que desaparece la señal de reinicio , el contador de comandos del procesador apunta a la dirección 0xFFFFFFF0 , que se denomina Vector de reinicio . En esta dirección se encuentra el primer comando que el procesador decodifica y ejecuta.
Colocar la primera instrucción al final del espacio de direcciones tiene justificación histórica. Al desarrollar el procesador Intel 8086, al comienzo del espacio de direcciones había un vector de interrupción, seguido de RAM, cuya cantidad podría ser cualquiera. Para evitar intersecciones con RAM, la dirección del primer comando se tomó al final del espacio de direcciones.

Más tarde, con la llegada de Intel 80286, el vector de interrupción podría moverse a cualquier lugar. Sin embargo, incluso los procesadores modernos se ejecutan en modo de compatibilidad con 8086 y el vector de interrupción en 0x0.
Al acceder a la dirección 0xFFFFFFF0, el procesador recibe el primer comando de la ROM. En el modo Legacy, este comando es un salto de longitud o Far Jump en un segmento de memoria con un código de BIOS. Después de completar el primer salto largo, el procesador ingresa al modo real de 16 bits y procede a ejecutar el código del BIOS.

Modo real: modo de compatibilidad con procesadores obsoletos de 16 bits. En este modo, solo los comandos de 16 bits están disponibles y el espacio de direcciones, que se denomina "memoria inferior", contiene solo 1 MiB.

Como se señaló anteriormente, el código ejecutable del BIOS se almacena en un dispositivo externo, cuyo trabajo no es muy rápido, por lo que lo primero que hace el BIOS es inicializar la RAM y copiar su propio código desde la ROM. El BIOS conserva la compatibilidad con procesadores obsoletos; por lo tanto, realiza todas las acciones en modo de 16 bits.

Prueba automática de encendido


La prueba automática de encendido (POST) es un paso clave en el BIOS. POST se abrevia y completa. La POST completa verifica todos los controladores disponibles y prueba toda la RAM disponible, lo que puede llevar mucho tiempo.

La POST abreviada acelera el proceso de arranque e incluye el conjunto mínimo de acciones necesarias:

  • verificar la integridad de los programas de BIOS en ROM utilizando el mecanismo de verificación de suma de verificación;
  • detección e inicialización de los principales controladores, buses del sistema y dispositivos conectados;
  • determinar el tamaño de la RAM y probar el primer segmento (64 kilobytes);
  • transferencia de control al gestor de arranque.

Al pasar la POST, el servidor utiliza varias formas de reflejar información sobre el paso de las pruebas. Las formas más comunes:

  • mostrar el identificador de prueba, el código POST en la pantalla o usar indicadores de siete segmentos en la placa base;
  • indicación sonora;
  • alarma de luz con una combinación de LED.


La forma más informativa de obtener información sobre posibles fallos es mostrar el código POST actual. Al completar con éxito las pruebas, los códigos se reemplazan rápidamente entre sí, pero en caso de mal funcionamiento, la POST se detiene y puede ver el identificador de la prueba fallida. Los fabricantes de placas base siempre adjuntan una decodificación, lo que significa un código particular.


En las placas base modernas hay una indicación LED que le permite identificar un componente defectuoso. Si el servidor se inicia correctamente, puede escuchar un pitido que indica que la POST fue exitosa. Por la duración y el número de señales de sonido, también es posible determinar un componente fallido.


En algunos casos, cuando se requiere la máxima precisión para el diagnóstico, puede recurrir al uso de un dispositivo externo llamado tarjeta POST. Las placas base envían información sobre las pruebas POST en los buses de datos, y una tarjeta POST procesa esta información y la muestra utilizando los indicadores disponibles.

Utilidad de configuración del BIOS


El BIOS tiene un menú de configuración especial llamado Utilidad de configuración del BIOS . Puede ingresarlo presionando una tecla especial mientras pasa POST. La mayoría de las veces, las claves para ingresar al BIOS son Del y F2 , sin embargo, cuando se carga, siempre se indica qué clave abrirá la configuración del BIOS.


La utilidad de configuración del BIOS proporciona una interfaz para la configuración, que solo requiere un teclado para comunicarse. La utilidad de configuración del BIOS proporciona información sobre el hardware instalado y le permite cambiar los parámetros de funcionamiento de la placa base y el equipo conectado.

Los posibles nombres y opciones de este o aquel parámetro dependen de muchos factores, entre los cuales:

  • Versión del BIOS
  • modelo de placa base;
  • modelo del equipo instalado en la placa base.

Entre los parámetros estamos interesados ​​en Boot Priority . La prioridad de arranque establece el orden en que el BIOS sondea los dispositivos para encontrar el área de arranque en ellos. Tan pronto como el BIOS encuentra el área de arranque, el control se transfiere al gestor de arranque y comienza el siguiente paso.


Cargador de SO


Después de pasar la POST, el BIOS busca el área de arranque y sondea los dispositivos en el orden especificado. En el modo Legacy , el área de arranque en el disco se llama Master Boot Record (MBR). MBR es una estructura especial ubicada en los primeros 512 bytes del disco. Estos 512 bytes contienen los siguientes datos:

  • código de la primera etapa del gestor de arranque : de 0 a 445 bytes;
  • tabla de particiones : de 446 a 509 bytes;
  • El número mágico es 0xAA55 , de 510 a 511 bytes.

Si no hay un número mágico 0xAA55 , se considera que no se encontró el registro MBR en este disco y el BIOS procede a sondear el siguiente disco.

Cuando el BIOS encuentra el registro MBR, lo copia del disco a la RAM en la dirección 0x7C00 y salta a esta dirección. Después del salto, comienza la primera etapa ( Etapa 1 ) del gestor de arranque. Debido al tamaño limitado, el propósito de la primera etapa es cargar el código de la segunda etapa ( Etapa 2 ) en la memoria y transferirle el control.

El código de la etapa 2 se almacena inmediatamente después de la estructura MBR y hasta el comienzo de la primera partición del disco. Históricamente, esta brecha contiene 31 KB de memoria, y en los sistemas modernos alcanza 1 MB. Sin embargo, para mantener la compatibilidad, el tamaño de la segunda etapa no supera los 31 KB.

La segunda etapa prepara el entorno para lanzar la tercera etapa:

  • Carga los controladores necesarios del sistema de archivos
  • encuentra el código de la tercera etapa en el sistema de archivos;
  • carga el código en la RAM y le transfiere el control.

Las tareas de la etapa 3 se reducen a una configuración mínima del entorno y el gestor de arranque:

  • transfiera el procesador al modo protegido ;
  • Descargar extensiones GRUB2 instaladas
  • encuentre la Etapa 4 en el sistema de archivos y dele el control.

Modo protegido: modo de compatibilidad con procesadores x86. En este modo, el procesador es capaz de ejecutar instrucciones de 32 bits y el espacio de direcciones se expande a 4 GiB. Han aparecido innovaciones significativas en el modo protegido, por ejemplo:


La cuarta etapa ( Etapa 4 ) ya se está ejecutando en modo de 32 bits, si es necesario, se carga desde el disco de expansión de la GUI, "analiza" el archivo grub.cfg y muestra el menú de selección del sistema operativo familiar.


Núcleo del sistema operativo


GRUB2 sigue la especificación de arranque múltiple para cargar el ejecutable del núcleo. El gestor de arranque comprueba el número mágico 0x1BADB002 al comienzo del núcleo y comprueba la suma de comprobación para asegurarse de que el núcleo sea compatible con la especificación. Después de una verificación exitosa, el núcleo puede cargarse en la RAM y transferirse a él.

Según la misma especificación, el gestor de arranque proporciona al núcleo información del sistema, como por ejemplo:

  • modo de procesador actual;
  • cantidad de RAM detectada;
  • tipo de salida de video (texto o píxel);
  • resolución de pantalla

A pesar de que el gestor de arranque utilizó controladores del sistema de archivos y, posiblemente, extensiones para la interfaz gráfica, el núcleo de arranque no recibirá todas estas cosas maravillosas. En primer lugar, después de obtener el control, el núcleo "revela" todo el potencial del servidor y pone el procesador en modo largo .

Modo largo : el modo principal de los procesadores de 64 bits. En este modo, el procesador puede ejecutar instrucciones de 64 bits y utilizar registros de propósito general de 64 bits. El espacio de direcciones tiene 16 BEI. El modo largo abolió la organización de memoria segmentada inherente a la arquitectura de 32 bits.

A pesar del enorme espacio de direcciones para direccionar la memoria física, solo se utilizan 48 bits de los 64 posibles, lo que reduce la cantidad máxima de RAM a 256 TiB, que es 65.536 veces menos que el espacio de direcciones. En el futuro previsible, se planea expandir el direccionamiento físico a 57 bits.

Después de cambiar al Modo largo, el núcleo realiza el conjunto mínimo de acciones necesarias para la operación:

  • Configura la memoria de paginación
  • carga los controladores e inicializa el equipo utilizado;
  • Configura la memoria y los planificadores de procesos.
  • encuentra e inicia init.

Es importante que antes de configurar el planificador de procesos, el servidor trabajara en un solo núcleo, que se llamaba BSP. La configuración del planificador activa el resto del kernel llamado Application Processor (AP). Los núcleos no tienen una conexión directa entre sí, y su comunicación se realiza a través de controladores de interrupción locales llamados Controlador de interrupción programable avanzado local (LAPIC).

El núcleo del sistema operativo se inicia en el BSP, que durante la inicialización recibió información sobre los procesadores disponibles en el sistema utilizando las tablas ACPI. BSP, utilizando su propio LAPIC, envía una secuencia de interrupciones " Init - StartUp - StartUp " para activar todos los AP. Después de comenzar, los procesadores de aplicaciones también deben inicializarse y transferirse al Modo largo, pero ahora este proceso es más rápido, ya que este trabajo ya lo ha realizado el procesador principal.

Después de que todos los AP se inicializan, el planificador de procesos inicia un proceso de servicio llamado " inacción " o inactivo . Como su nombre lo indica, este proceso no hace nada y ocupa el procesador cuando no hay otros procesos.

Cuando todo está configurado y listo para funcionar, el núcleo del sistema operativo inicia el primer proceso en el espacio del usuario: Init . Eso, a su vez, inicia el resto de los procesos en el espacio del usuario. Después de que comienza el proceso de inicio, el kernel pasa al modo de espera y está inactivo hasta que las tareas aparezcan en el espacio del kernel.

Después de iniciar todos los procesos, el servidor se vuelve disponible a través de la red y en la consola puede ver el mensaje de Inicio de sesión en la pantalla.

Conclusión


A primera vista, un inicio de servidor simple y rápido y cargar el sistema operativo es, de hecho, un proceso complejo y confuso con muchos matices. El paso de este proceso es una pequeña evolución que desarrolla la potencia de procesamiento del procesador desde los procesadores antiguos de 16 bits hasta los modernos "monstruos" de 64 bits.

¿Y qué piensas, cuando aparezcan los procesadores de 128 bits, habrá un modo de compatibilidad con los de 16 bits?

Source: https://habr.com/ru/post/471756/


All Articles