Proceso de inicio de Windows
Proceso de inicio de Windows
lt ordergt;
Creo que muchas personas se han encontrado con eso después de instalar algo. , Reinicie Windows y descubra que no puede iniciarse. Por lo tanto, me gustaría presentarles el proceso de inicio de Windows y las distintas etapas involucradas.
Lo que se presenta aquí es el proceso de inicio de la serie Windows 2k/xp/2k3, que es muy similar al de la serie nt.
Aunque Windows no es de código abierto (¡tonterías! :o), todavía hay mucha información disponible, incluidos símbolos públicos proporcionados por MS. Si tienes la oportunidad de probar la depuración en tiempo real del Kernel, Creo que todavía hay muchas cosas que ver. Pero claro, eso no es algo que haya hecho... Lo intentaré nuevamente cuando regrese e instale VMWare o algo así en mi propia máquina, documentaré el proceso y lo publicaré. Aquí está.
El proceso de inicio de Windows incluye las siguientes partes:
1. Registro de arranque maestro (MBR)
2 Sector de arranque
3. Ntldr (A algunas personas les puede resultar familiar. ¿No se ha dado cuenta de que no se puede encontrar Ntldr al iniciar?
4. Ntoskrnl.exe
5.Smss
6.Winlogon
7. Administrador de control de servicios (SCM)
Bien
En esta publicación de blog, seguiré el proceso de inicio anterior uno por uno. uno. Presentación de estos componentes, por supuesto, la mayor parte proviene de los capítulos correspondientes (Inicio y Apagado) de los libros "Inside Windows 2000" y "Windows Internals". Habrá algunos comentarios relacionados.
Por supuesto, si ha leído el código fuente del proceso de inicio de Linux, es posible que no esté satisfecho con el siguiente contenido y las partes relacionadas con el hardware básicamente no se analizan aquí ( Lo máximo que puedo hacer es agregar contenido relacionado con el hardware que conozco), quien nos dijo que no miráramos el código fuente, jaja
Bienvenido a discutir y agregar
. P.D. Estoy aquí hoy. Ven y toma asiento, pero no sé de qué estoy hablando :cool:
--------------- ------. ------------------------------------- ------- ------------------------------------------- --
1 .MBR amp; sector de arranque
El disco duro físico utiliza sectores como direcciones y el programa de instalación de Windows escribirá algo de contenido en el primer sector del disco duro. donde instalará el sistema
Esta parte se llama registro de arranque maestro (MBR).
El registro de arranque maestro consta de dos partes:
(. 1). Código de inicio;
(2). Tabla de particiones;
Código de inicio, es decir, el código de inicio se ejecuta cuando se inicia el sistema y el BIOS se completa. realiza la autoprueba y selecciona el dispositivo de arranque (
Ese es uno de los discos duros), luego lee el MBR de ese disco duro en la memoria y salta a la dirección del MBR para ejecutar el código de arranque.
La tabla de particiones solo tiene 4 entradas, porque MS OS permite particionar los discos. Se puede dividir en 4 particiones primarias como máximo.
El contenido de la tabla de particiones aquí. es la información de estas 4 particiones, incluyendo sus sectores de inicio,
banderas correspondientes, etc.
Durante el proceso de arranque, el código de inicio del MBR busca en la tabla de particiones una partición con el indicador de arranque (también llamado Activo),
y luego lee el primer sector A de la partición. el sector de arranque, donde se ejecuta el código.
Antes de que el instalador escriba el sector de arranque, necesita saber el tipo de sistema de archivos de la partición en la que se encuentra (FAT, FAT32, NTFS) y luego escribir
un sector de arranque diferente. .
¿Por qué diferentes sistemas de archivos requieren diferentes sectores de arranque? La razón es que la tarea del sector de arranque es cargar el archivo de arranque del sistema operativo y el proceso de carga del archivo requiere la participación del sistema de archivos. Por lo tanto, para diferentes sistemas de archivos, el contenido interno del sector de arranque es diferente. Se requiere un código de soporte del sistema para completar la carga de los archivos del sistema. Para el arranque de Windows
, el archivo que debe cargarse es Ntldr.
Cabe añadir que el código de soporte del sistema de archivos en el sector de arranque está "minimizado". Después de todo, un sector de arranque tiene sólo
512 bytes de tamaño como máximo y es poco probable que venga con un sistema de archivos completo. Además, nuestros requisitos son simples: solo queremos que comprenda el sistema de archivos y pueda leer los archivos que contiene, sin escribir en ellos.
Después de cargar Ntldr en el sector de arranque, saltará al punto de entrada de Ntldr y la tarea de asumir la tarea recaerá en Ntldr. En este punto,
el sistema todavía se está ejecutando en modo real de 16 bits y Ntldr activará la paginación y entrará en modo protegido de 32 bits.
Es posible que encuentre el siguiente mensaje de error durante este proceso:
Para sistemas de archivos NTFS, "BOOT: No se puede encontrar NTLDRP";
Para sistemas de archivos FAT , "Falta NTLDR";
Este error significa que el sector de arranque no encuentra Ntldr en el directorio raíz de la partición.
------------------------------------------- ----- --------------------------------------------- ----- ------ ------------------
2.NTLDR
NTLDR es un " intermediario". Cuando el sector de arranque ingresa a NTLDR, el sistema está en modo real y cualquier dirección a la que accedan los programas son direcciones físicas. Esta es la dirección física (y, por supuesto, las capacidades de segmentación básicas de 80x86, que debe conocer si ha estudiado este ensamblaje en modo real), y este rango de direcciones también está limitado a 1 M (dirección de 20 bits). Por lo tanto, lo primero que debe hacer después de ingresar a NTLDR es cambiar al modo protegido para tener acceso completo al rango de direcciones de 32 bits. Sin embargo, dado que la tabla de páginas correspondiente no se ha configurado en este momento, no hay traducción de direcciones reales a virtuales (es decir, aún no está paginada).
NTLDR necesita inicializar una tabla de páginas y luego activar la paginación. En este punto, el sistema ya se encuentra en el estado estándar de Windows (paginación en modo protegido). Cuando hablé de pasar al modo protegido, omití la inicialización de GDT e IDT. La clave aquí es que Windows usa un modo de memoria plana, lo que significa que en modo protegido, la dirección base de todos los segmentos es la misma. Este punto está estrechamente relacionado con su mecanismo de gestión de memoria, por lo que lo mencionaré primero aquí.
Mientras el sistema está en modo protegido, NTLDR todavía depende de algunas llamadas al BIOS para acceder al disco y mostrar el sistema. Si el disco es SCSI y las llamadas al BIOS no pueden acceder a él, NTLDR cargará Ntbootdd.sys en lugar del código de acceso al disco en el código de inicio.
NTLDR es similar al sector de arranque y también contiene código de solo lectura para sistemas de archivos NTFS y FAT, pero se diferencia en que tiene un acceso ligeramente mejorado a los subdirectorios.
Desde Windows 2000, existe un método de "hibernación" para apagar el sistema. NTLDR necesita verificar si hay un archivo Hiberfil.sys válido en el sistema. Si existe, significa que el último apagado fue por hibernación. Entonces NTLDR toma un atajo: lee el archivo Hiberfil.sys y salta directamente al código del kernel que "despierta la hibernación" e inicia la computadora.
En condiciones de arranque normales, NTLDR lee el archivo boot.ini. Si el archivo parece tener varias opciones de inicio, se muestra un menú de inicio para que el usuario elija.
Aquí existe una posible excepción, aunque ahora es muy poco probable. La excepción a esto es la presencia de opciones de arranque de DOS (series Win9x y ME). En este caso, NTLDR carga el archivo Bootsect.dos, vuelve al modo real y salta al código MBR del archivo.
Después de que el usuario selecciona el menú de inicio, NTLDR también necesita realizar algunas operaciones basadas en los parámetros del elemento. Estos parámetros no se explican aquí.
Luego continuamos...
NTLDR carga y ejecuta Ntdetect.com, un programa en modo protegido de 16 bits llamado por el BIOS para obtener información del hardware del sistema (como el tipo de bus, hora del sistema, unidades de disco, puertos serie y paralelo, etc.) y luego agrega esta información y la devuelve a NTLDR.
Todo el trabajo anterior parece realizarse en segundo plano y no es visible para el usuario, excepto quizás un menú de inicio. Bien, a continuación es el momento de dar a los usuarios algunos comentarios.
NTLDR limpia la pantalla y muestra "Iniciando Windows" y una barra de progreso. La diferencia entre 2000 y XP/2003 es que la barra de progreso que se muestra en 2000 es en blanco y negro y no hay ningún logotipo de Windows en la pantalla, mientras que la barra de progreso que se muestra en XP/2003 está coloreada con el logotipo de Windows (jaja, las pantallas a color son populares ahora). Tenga en cuenta que la barra de progreso de NTLDR está vacía hasta que comience la carga del "controlador de arranque".
Otra cosa que puede notar es que cuando se muestra "Iniciando Windows", también hay un mensaje debajo: "Para solución de problemas y opciones de inicio avanzadas para Windows, presione F8 (Para solución de problemas y inicio avanzado de Windows"). opciones, presione F8), luego, cuando aparece la barra de progreso y comienza a desplazarse (hacia adelante), no hay posibilidad de presionar F8 para ingresar al modo seguro u otros modos. De hecho, hay una razón para esto. Porque antes de que el sistema comience a cargar los controladores, todo lo que hace principalmente es cargar los archivos del kernel y la sección del sistema en el registro. Estas dos cosas no tienen nada que ver con otros métodos de inicio, como el modo seguro, ya sea el modo seguro o el inicio estándar, es necesario cargar estas dos partes. La diferencia entre el modo seguro y el modo estándar es que cargan controladores diferentes. Por lo tanto, una vez que Windows comienza a cargar estos controladores de arranque, no hay forma de cambiar el modo en ellos.
Para que NTLDR comience a mostrar "Iniciando Windows", se requieren los siguientes pasos:
1. Cargue el kernel y HAL correctos (el valor predeterminado es Ntoskrnl.exe y Hal.dll).
Si NTLDR encuentra un error al cargar estos dos archivos y no puede completar la carga, mostrará el siguiente mensaje de error: Windows no puede iniciarse porque faltan los siguientes archivos o están dañados y le indicará el nombre del archivo que no se puede cargar.
2. Lea la sección del sistema desde \Windows\System32\Config\System.
Nota: hive es un archivo que contiene algún tipo de subárbol en el registro.
3. Busque todos los controladores de inicio en la sección del sistema (el valor inicial de dichos controladores es 0, es decir, SERVICE_BOOT_START). Todos los controladores del sistema tienen las subclaves correspondientes en el registro en HKLM\SYSTEM\CurrentControlSet\Services.
4. Cargue el controlador del sistema de archivos de la partición donde se encuentra el controlador de arranque para poder cargarlo más tarde.
5. Cargue el controlador de inicio. En este momento la barra de progreso en la pantalla comienza a actualizarse. Para Windows 2000, se trata de una barra de progreso en blanco y negro.
6. Configure los registros de la CPU y salte a la entrada Ntoskrnl.exe.
Bueno, el trabajo de NTLDR finalmente se completa y todo se entrega a Ntoskrnl. Por supuesto, al transferir el control, es natural proporcionar a Ntoskrnl toda la información que la otra parte necesita (incluido el diseño de la memoria, información del hardware, subárbol del sistema, etc.), para que NTLDR haya completado su misión.