Red de conocimiento informático - Problemas con los teléfonos móviles - ¿De qué archivo lee Windows la información de inicialización cuando se inicia?

¿De qué archivo lee Windows la información de inicialización cuando se inicia?

El proceso de inicio de Windows consta de las siguientes partes:

1. Registro maestro de arranque (MBR)

2 Sector de arranque

3. Estar confundido acerca de esto es muy familiar. ¿Alguna vez ha encontrado el problema de que no se puede encontrar Ntldr al iniciar

4. >6. Winlogon

7. Administrador de control de servicios (SCM)

Bien

En esta publicación de blog, presentaré estos componentes uno por uno de acuerdo con proceso de inicio anterior. Por supuesto, la mayor parte de esto proviene de los capítulos correspondientes (Inicio y Apagado) de los libros Inside Windows 2000 y Windows Internals. Todo lo que puedo hacer es básicamente traducirlo y parafrasearlo, en el mejor de los casos. /p>

Por supuesto, si lees el código fuente del proceso de arranque de Linux, no estarás satisfecho con lo que sigue, y básicamente no hay ninguna parte relacionada con el hardware (lo mejor que puedo agregar es algo relacionado con el hardware que ya sabes), así que no podemos ver el código fuente, jaja

---------------------. -------------------------------------- ------ -----------------------------------------

1. MBR y sector de arranque

El disco duro físico utiliza sectores como direcciones y el programa de instalación de Windows escribirá parte del contenido en el primer sector del disco duro donde instala el sistema

. Esta parte se denomina registro de inicio maestro (MBR).

El registro de inicio maestro consta de dos partes:

(1). 2). Tabla de particiones;

Código de inicio, es decir, código de inicio. Este código se ejecuta cuando se inicia el sistema y el BIOS completará la autoprueba y seleccionará el dispositivo de inicio (

).

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 hasta 4 particiones primarias

El contenido de la tabla de particiones aquí es la información de estas cuatro particiones, incluidos sus sectores iniciales, <. /p>

indicadores correspondientes, etc. p>

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, el sector de arranque, y ejecuta el código allí.

Antes de que el instalador pueda escribir en 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

en 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 aún 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 (modo protegido + paginación). 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í hay una posible excepción, aunque ahora es muy improbable. 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 inicio avanzado. Para solución de problemas y opciones de inicio avanzadas para Windows, presione F8 (Para". Solución de problemas de Windows y opciones de inicio avanzadas, 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 el controlador, lo principal que hace es cargar el archivo 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. Tanto el modo seguro como el inicio estándar necesitan cargar estas dos cosas. 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 los modos 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.