La diferencia entre la función de inicio y el proceso de inicio

  

Como el identificador de kernel de la función de inicio () y el identificador de proceso del proceso de inicio son ambos 1, se denominan inicio, por lo que la función de inicio () y el proceso de inicio son fáciles de generar. No esta claro

La principal diferencia:

1, la función init () es parte del código del kernel, se ejecuta en modo kernel y es parte del código ejecutable independiente.

2, el proceso de inicio en el sistema operativo Linux
es un proceso especial, es el primer proceso de usuario iniciado y ejecutado por el kernel, por lo que no se está ejecutando en el estado del kernel En su lugar, se ejecuta en modo de usuario. Su código no forma parte del núcleo en sí, pero se almacena en la imagen del ejecutable en el disco duro, no es diferente de otros procesos de usuario.

Proceso No. 0 - > Kernel Thread No. 1 -> > Kernel Process No. 1 - > init Process (Proceso de usuario No. 1)

Process No. 0: Este es el sistema Un proceso que se forma automáticamente en el momento del arranque es en realidad el propio kernel. Es el antecesor de todos los procesos que luego se producen en el sistema. Cuando el sistema del kernel completa su propia inicialización, el propio kernel llama a la función kernel_thread (), que crea el primer subproceso del kernel utilizando la llamada al sistema int 0x80.

Nº 1 subproceso del kernel: el llamado subproceso del kernel, en el sistema Linux se refiere al proceso sin espacio de almacenamiento virtual, el subproceso del kernel puede usar directamente el espacio de direcciones físicas, ejecutándose en el estado del kernel. Después de que vuelve la llamada de sistema de interrupción suave, los procesos padre e hijo se determinan comparando los valores de los registros ESP y ESI. Si el valor del registro ESP es igual al valor del registro ESI, el sistema considera que es el proceso principal, el núcleo mismo, que es el número de proceso 0. De lo contrario, es el primer hilo del kernel creado por el kernel. Así que este hilo es el hilo número 1.

Proceso del kernel No. 1: Si es el subproceso del kernel No. 1, el programa controla la subrutina para ejecutar directamente la función init (). Luego, el hilo No. 1 evolucionará hacia el proceso del kernel No. 1.

proceso de inicio: la función init () llama a execve () para cargar el programa ejecutable init () desde el archivo /etc /inittab y lo ejecuta. A partir de ese momento, el proceso del kernel de la función init () evoluciona hacia el proceso init. . En otras palabras, el proceso init es generado por la función init (). El fork () no se usa en esta evolución, por lo que el identificador de proceso del proceso init sigue siendo el identificador 1 del número de proceso de kernel 1. Al ver esto, de repente recordé que en el sistema de archivos raíz incrustado, también ejecuté primero el subproceso de inicio del núcleo. El subproceso ejecutará el script ./linuxrc. Al final de ./linuxrc: execve /sbin /init, vaya a ejecutar el usuario. El proceso de inicio del espacio, que ejecutará el script inittab (si existe).

Copyright © Conocimiento de Windows All Rights Reserved