Proceso de inicio del sistema Linux y procesos 0 y 1

Cuando se trata del proceso de Linux No. 0 y el proceso No. 1, implica el inicio del sistema Linux. Comenzaremos con el proceso de inicio de Linux.

1. El proceso general de inicio de Linux.

  • Cuando el sistema se inicia o reinicia por primera vez, el procesador ejecutará el código desde una ubicación conocida. Correspondiente a una computadora personal, este lugar es el BIOS almacenado en la memoria de la placa base.

  • Cuando se descubre un dispositivo de arranque, el gestor de arranque de primera etapa se carga en la RAM y se ejecuta. Esta parte del programa de inicio se encuentra en la imagen MBR de 512 bytes (el MBR se discutirá más adelante) y su función es cargar el programa de inicio de la segunda etapa.

  • Cuando el gestor de arranque de segunda etapa se carga en la RAM y se ejecuta, se mostrará la pantalla de inicio y Linux y el disco inicial opcional (sistema de archivos temporal) se cargan en la memoria. Una vez cargada la imagen, el control pasa del gestor de arranque de segunda etapa a la imagen del kernel.

  • La imagen del kernel se autoextrae e inicializa. En este paso, el programa de arranque de la segunda etapa verificará el hardware del sistema, enumerará los dispositivos de hardware, montará el dispositivo principal y cargará los módulos del kernel necesarios.

  • Cuando se completan, el primer programa en el espacio de usuario (init) comienza a ejecutarse, iniciando así la inicialización del sistema de nivel superior.

Insertar descripción de la imagen aquí

Lo anterior es como un caparazón del proceso de inicio de Linux, a continuación, comenzaremos a explorar los detalles del proceso de inicio con mayor profundidad.

2. Inicio del sistema

Primero, la composición del BIOS es:

  • Código de autoprueba de encendido
  • Ejecutar servicio

Linux 0xffff0comienza desde el BIOS de la dirección. El primer paso es la autoprueba de encendido. El trabajo de la autoprueba de encendido es verificar el hardware. El segundo paso es enumerar e inicializar los dispositivos locales.

Después de la POST, el código POST se borra de la memoria y el servicio en ejecución se conserva y sigue siendo válido para el sistema operativo de destino.

Para iniciar un sistema operativo, el tiempo de ejecución del BIOS CMOSbusca dispositivos activos y de inicio (que pueden ser disquetes, CD-ROM, particiones de disco duro, dispositivos de red o unidades flash USB) en el orden definido por la configuración.

Linux generalmente arranca desde el disco duro cuyo MBR contiene el programa de arranque principal. MBR es un sector de 512 bytes ubicado en el primer sector del disco duro (pista 0, columna 1, sector). Una vez cargado el MBR en la RAM, el BIOS lo controla.

3. El programa de arranque de la primera etapa.

El gestor de arranque principal reside en una imagen MBR de 512 bytes.
Una imagen MBR consta de una pequeña tabla de particiones y código.

Los primeros 446 bytes son el código del gestor de arranque principal, incluido el código de ejecución y la información de error.

Los siguientes 64 bytes son una tabla de particiones que contiene cuatro registros de partición de 16 bytes.

Los dos últimos bytes del MBR definen un número mágico (0xaa55). Este número mágico se utiliza para verificar y comprobar el MBR.

Insertar descripción de la imagen aquí

El programa de arranque principal busca y carga principalmente el programa de arranque de segunda etapa. Busca una partición activa a través de la tabla de particiones. Después de encontrar una tabla de particiones activa, escanea las particiones restantes para determinar que no están activas. Cuando se determinan, el registro de inicio de la partición activa se carga desde el dispositivo a la RAM y se ejecuta.

4. El programa de arranque de la segunda etapa.

El programa de arranque de segunda etapa en realidad se llama más apropiadamente programa de arranque del kernel . Porque su tarea es cargar el kernel de Linux y el disco inicial opcional.

A medida que se carga la segunda etapa, CRUB mostrará una lista de kernels disponibles (definidos en /etc/grub.cony enlaces simbólicos /etc/grub/menu.lsta y ) a pedido. /etc/grub.confPuede seleccionar un kernel y mejorarlo con parámetros de kernel adicionales.

Después de cargar el programa de arranque de la segunda etapa en la memoria, consultará el sistema de archivos y cargará la imagen del kernel predeterminada y la imagen initrd en la memoria. Cuando todas las imágenes estén listas, saltará a la imagen del núcleo desde la segunda etapa.

5. Etapa del núcleo

La fase del kernel comienza cuando la imagen del kernel se carga en la memoria y el control se toma del gestor de arranque de la segunda etapa. La imagen del kernel no es un kernel ejecutable, sino una imagen del kernel comprimida.

Hay una pequeña rutina de programa al principio de la imagen del kernel, que realiza una pequeña cantidad de configuraciones de hardware, luego autoextrae la imagen del kernel y la coloca en la memoria de alto nivel. Luego, la rutina llamará al kernel para iniciar el arranque del kernel.

6 proceso de inicio

El proceso de inicio es lo que a menudo llamamos el proceso número uno.

El sistema permite que un proceso cree un nuevo proceso, y el nuevo proceso es un proceso hijo. El proceso hijo también puede crear un nuevo proceso hijo para formar un modelo de estructura de árbol de procesos. Todos los procesos de todo el sistema Linux también se encuentran en una estructura de árbol. El sistema construye automáticamente la raíz del árbol, que es el proceso número 0 ejecutado en modo kernel y es el antepasado de todos los procesos. El proceso No. 0 crea el proceso No. 1 (estado del kernel), que es responsable de realizar parte del trabajo de inicialización del kernel y la configuración del sistema, y ​​crea varios subprocesos del kernel para la administración de caché y memoria principal virtual . Posteriormente, el proceso No. 1 llama y execve()ejecuta el programa ejecutable init, y evoluciona al proceso No. 1 en modo usuario, es decir, el proceso init. Completa /etc/initabel trabajo de inicio del sistema de acuerdo con los requisitos del archivo de configuración y crea varios procesos de registro de terminal getty numerados No. 1, No. 2...

Cada proceso getty establece su número de identificación de grupo de procesos y monitorea la línea de interfaz configurada en el terminal del sistema. Cuando se detecta una señal de conexión desde el terminal, el proceso getty ejecutará el inicio de sesión del programa de registro a través de la función execve(). En este momento, el usuario puede ingresar el nombre de registro y la contraseña para ingresar al proceso de inicio de sesión. Si tiene éxito, el inicio de sesión El programa ejecutará el shell a través de la función execve(). , el proceso del shell recibe el pid del proceso getty y reemplaza el proceso getty original. Luego, el caparazón genera directa o indirectamente otros procesos.

El proceso anterior se puede describir como: 0号进程->1号内核进程->1号用户进程(init进程)->getty进程->shell进程, como se muestra en la siguiente figura:

Insertar descripción de la imagen aquí

Documentación de referencia

1. https://www.likecs.com/show-205059185.html

2. https://www.cnblogs.com/wanghetao/archive/2012/03/29/2422723.html

Supongo que te gusta

Origin blog.csdn.net/yuelai_217/article/details/130327715
Recomendado
Clasificación