stringtranslate.com

ntoskrnl.exe

ntoskrnl.exe (abreviatura de Windows NT operating system kernel executable ), también conocido como imagen del núcleo , contiene las capas de núcleo y ejecutiva del núcleo de Microsoft Windows NT , y es responsable de la abstracción de hardware , el manejo de procesos y la administración de memoria . Además de las capas de núcleo y ejecutiva, contiene el administrador de caché , el monitor de referencia de seguridad, el administrador de memoria, el programador (Dispatcher) y la pantalla azul de la muerte (la prosa y partes del código). [1]

Descripción general

Las versiones x86 de ntoskrnl.exe dependen de bootvid.dll, hal.dlly kdcom.dll(las variantes x64 de ntoskrnl.exe tienen estas dlls integradas en el núcleo para mejorar el rendimiento). Sin embargo, no es una aplicación nativa , por lo que no está vinculada con ntdll.dll. En cambio, ntoskrnl.exe tiene su propio punto de entrada " KiSystemStartup " que llama a la función de inicialización del núcleo independiente de la arquitectura . Debido a que requiere una copia estática de los objetos C Runtime, el ejecutable suele tener un tamaño de unos 10 MB.

En Windows XP y versiones anteriores, el archivo fuente de instalación de Windows incluye cuatro archivos de imagen de kernel para admitir sistemas monoprocesador , sistemas multiprocesador simétrico (SMP) , CPU con PAE y CPU sin PAE. El programa de instalación de Windows decide si el sistema es monoprocesador o multiprocesador y, a continuación, instala las variantes PAE y no PAE de la imagen de kernel para el tipo decidido. En un sistema multiprocesador, el programa de instalación instala ntkrnlmp.exey ntkrpamp.exepero les cambia el nombre a ntoskrnl.exey ntkrnlpa.exerespectivamente.

A partir de Windows Vista, Microsoft comenzó a unificar las imágenes del kernel a medida que las CPU multinúcleo llegaron al mercado y PAE se volvió obligatorio.


La arquitectura del núcleo de Windows está estructurada de forma que todo sea fácil de entender. Las funciones y las variables globales utilizan el formato denominado Pascal Case con prefijos especiales (adicionales) en sus nombres para diferenciar las partes del núcleo.

Un ejemplo es IoCreateDevice y ObReferenceObjectByHandle . Ambas funciones tienen diferentes nombres de prefijo para diferenciar los administradores críticos dentro del código del núcleo: Io se utiliza para las funciones del administrador de E/S y Ob para las funciones del administrador de objetos .

Existen variaciones de estos prefijos para funciones internas que no son exportadas por el kernel, como agregar una i después de la primera letra (por ejemplo, Kipara “Kernel Internal”) o agregar una p al prefijo completo (por ejemplo, Psppara “Process Support Internal”).


La siguiente tabla enumera todos los prefijos.

Inicialización

Cuando el núcleo recibe el control, obtiene un puntero de tipo estructura de bootloader . El destino del puntero contiene información sobre el hardware, la ruta al archivo del Registro de Windows, parámetros del núcleo que contienen preferencias de arranque u opciones que cambian el comportamiento del núcleo, ruta de los archivos cargados por el bootloader ( SYSTEM subárbol del Registro , nlspara la conversión de codificación de caracteres, y vgafuente). [8] La definición de esta estructura se puede recuperar utilizando el depurador del núcleo o descargándola de la base de datos de símbolos de Microsoft. [9] [ página necesaria ]

En la arquitectura x86 , el kernel recibe el sistema ya en modo protegido, con el GDT , IDT y TSS listos. [ necesita más explicación ] Pero como no conoce la dirección de cada uno, tiene que cargarlos uno a uno para llenar la estructura PCR . [ jerga ]

El punto de entrada principal de ntoskrnl.exe realiza una inicialización dependiente del sistema y luego llama a una inicialización independiente del sistema y luego ingresa en un bucle inactivo. [ contradictorio ]

Manejo de interrupciones

Los sistemas operativos modernos utilizan interrupciones en lugar de sondeo del puerto de E/S para esperar información de los dispositivos.

En la arquitectura x86 , las interrupciones se gestionan a través de la Tabla de Despacho de Interrupciones (IDT). Cuando un dispositivo activa una interrupción y el indicador de interrupción (IF) en el registro FLAGS está activado, el hardware del procesador busca un manejador de interrupciones en la entrada de la tabla correspondiente al número de interrupción al que a su vez se ha traducido desde IRQ por chips PIC , o en hardwares más modernos, APIC . Los manejadores de interrupciones generalmente guardan un subconjunto del estado de los registros antes de manejarlo y los restauran a sus valores originales cuando terminan.

La tabla de interrupciones contiene controladores para interrupciones de hardware, interrupciones de software y excepciones. Para algunas versiones IA-32 del núcleo, un ejemplo de un controlador de interrupción de software de este tipo (de los cuales hay muchos) está en su entrada de tabla IDT 2E 16 ( hexadecimal ; 46 en decimal ), utilizada en lenguaje ensamblador como INT 2EHpara llamadas al sistema . En la implementación real, la entrada apunta a una subrutina interna denominada (según la información de símbolos publicada por Microsoft) KiSystemService. Para versiones más nuevas, se utilizan diferentes mecanismos que hacen uso de SYSENTER la instrucción y en x86-64 SYSCALL se utilizan instrucciones en su lugar.

Una característica notable del manejo de interrupciones de NT es que las interrupciones suelen estar enmascaradas condicionalmente en función de su prioridad (denominada "IRQL"), en lugar de deshabilitar todas las IRQ mediante el indicador de interrupción. Esto permite que varios componentes del núcleo realicen operaciones críticas sin bloquear necesariamente los servicios de los periféricos y otros dispositivos. [10]

Administrador de memoria

Todo el rango de direcciones de la memoria física (RAM) se divide en muchos bloques pequeños, también llamados páginas, de 4 KB de tamaño cada uno, y se asignan a direcciones virtuales. Algunas de las propiedades de cada bloque se almacenan en estructuras llamadas entradas de tabla de páginas , que son administradas por el sistema operativo y a las que accede el hardware del procesador. Las tablas de páginas se organizan en una estructura de árbol y el número de página física de la tabla de nivel superior se almacena en el registro de control 3 (CR3).

Microsoft Windows divide el espacio de direcciones virtuales en dos regiones. La parte inferior, que comienza en cero, se instancia por separado para cada proceso y es accesible tanto desde el modo de usuario como desde el modo kernel. Los programas de aplicación se ejecutan en procesos y proporcionan código que se ejecuta en modo de usuario. La parte superior es accesible solo desde el modo kernel y, con algunas excepciones, se instancia solo una vez, en todo el sistema. Ntoskrnl.exe se asigna a esta región, al igual que varios otros componentes del modo kernel. Esta región también contiene datos utilizados por el código del modo kernel, como los montones del modo kernel y la caché del sistema de archivos.

Registro

El Registro de Windows es un repositorio de información de configuración y ajustes para el sistema operativo y para otro software, como las aplicaciones. Se puede considerar como un sistema de archivos optimizado para archivos pequeños. [11] Sin embargo, no se accede a él a través de una semántica similar a la del sistema de archivos, sino a través de un conjunto especializado de API, implementadas en modo kernel y expuestas al modo de usuario.

El registro se almacena en el disco en varios archivos diferentes denominados "colmenas". Una de ellas, la colmena del sistema, se carga al principio de la secuencia de arranque y proporciona la información de configuración necesaria en ese momento. Las colmenas de registro adicionales, que proporcionan datos específicos del software y del usuario, se cargan durante las fases posteriores de la inicialización del sistema y durante el inicio de sesión del usuario, respectivamente.

Conductores

La lista de controladores que se cargarán desde el disco se recupera de la Servicesclave del conjunto de control actual en el SYSTEMsubárbol del registro. Esa clave almacena controladores de dispositivos, procesos del núcleo y procesos de usuario. Todos ellos se denominan colectivamente "servicios" y se almacenan todos mezclados en el mismo lugar.

Durante la inicialización o cuando se solicita la carga del controlador, el núcleo recorre ese árbol en busca de servicios etiquetados como servicios del núcleo.

Véase también

Notas

  1. ^ Ajustable mediante /uservao /3gbinterruptor.

Como se menciona en Windows Internals Book, séptima edición, la opción de tiempo de arranque increaseuservay el encabezado correspondiente en la imagen ejecutable son necesarios para esta función.

Referencias

  1. ^ Russinovich, M: Consejos y curiosidades sobre los componentes internos del sistema, información sobre SysInternals
  2. ^ Microsoft Corporation (2009). «Rutinas del administrador de caché». Microsoft Corporation . Consultado el 13 de junio de 2009 .
  3. ^ Microsoft Corporation (2009). "File System Runtime Library Routines". Microsoft Corporation . Consultado el 13 de junio de 2009 .
  4. ^ Microsoft Corporation (2009). "E/S Manager Routines". Microsoft Corporation . Consultado el 13 de junio de 2009 .
  5. ^ Microsoft Corporation (2009). «Rutinas de soporte de la biblioteca del núcleo». Microsoft Corporation . Consultado el 13 de junio de 2009 .
  6. ^ Microsoft Corporation (2009). "Rutinas del administrador de energía". Microsoft Corporation . Consultado el 13 de junio de 2009 .
  7. ^ The NT Insider (27 de agosto de 2003). "Nt vs. Zw - Aclarando la confusión sobre la API nativa". OSR Online . 10 (4). Recursos de sistemas abiertos de OSR . Consultado el 16 de septiembre de 2013 .
  8. ^ "estructura LOADER_PARAMETER_BLOCK". www.nirsoft.net .
  9. ^ ab Ingeniería inversa práctica con X86, X64, Arm, kernel de Windows y herramientas de inversión . John Wiley & Sons Inc. 2014. ISBN 978-1118787311.
  10. ^ CC Hameed (22 de enero de 2008). "¿Qué es IRQL y por qué es importante? | Blog Ask the Performance Team". Microsoft Corporation . Consultado el 11 de noviembre de 2018 .
  11. ^ Tanenbaum, Andrew S. (2008). Sistemas operativos modernos (3.ª ed.). Upper Saddle River, NJ: Pearson Prentice Hall. pág. 829. ISBN 978-0136006633.

Lectura adicional

Enlaces externos