La arquitectura de Windows NT , una línea de sistemas operativos producidos y vendidos por Microsoft , es un diseño en capas que consta de dos componentes principales, el modo de usuario y el modo kernel . Es un sistema operativo multitarea reentrante y preemptivo , que ha sido diseñado para funcionar con computadoras basadas en un solo procesador y multiprocesador simétrico (SMP). Para procesar las solicitudes de entrada/salida (E/S), utiliza E/S controlada por paquetes, que utiliza paquetes de solicitud de E/S (IRP) y E/S asincrónica . A partir de Windows XP , Microsoft comenzó a hacer disponibles versiones de 64 bits de Windows; antes de esto, solo había versiones de 32 bits de estos sistemas operativos.
Los programas y subsistemas en modo usuario están limitados en términos de los recursos del sistema a los que tienen acceso, mientras que el modo kernel tiene acceso sin restricciones a la memoria del sistema y a los dispositivos externos. El modo kernel en Windows NT tiene acceso completo al hardware y a los recursos del sistema de la computadora. El kernel de Windows NT es un kernel híbrido ; la arquitectura comprende un kernel simple, una capa de abstracción de hardware (HAL), controladores y una gama de servicios (colectivamente llamados Executive), que existen todos en modo kernel. [1]
El modo de usuario en Windows NT está formado por subsistemas capaces de pasar solicitudes de E/S a los controladores de dispositivos de modo kernel adecuados mediante el uso del administrador de E/S. La capa de modo de usuario de Windows NT está formada por los "subsistemas de entorno", que ejecutan aplicaciones escritas para muchos tipos diferentes de sistemas operativos, y el "subsistema integral", que opera funciones específicas del sistema en nombre de los subsistemas de entorno. El modo kernel impide que los servicios y aplicaciones de modo de usuario accedan a áreas críticas del sistema operativo a las que no deberían tener acceso.
Las interfaces del sistema ejecutivo, con todos los subsistemas del modo de usuario, se ocupan de la E/S, la gestión de objetos, la seguridad y la gestión de procesos. El núcleo se sitúa entre la capa de abstracción de hardware y el sistema ejecutivo para proporcionar sincronización de multiprocesadores , programación y distribución de subprocesos e interrupciones, y gestión de trampas y distribución de excepciones. El núcleo también es responsable de inicializar los controladores de dispositivos durante el arranque. Los controladores del modo núcleo existen en tres niveles: controladores de nivel más alto, controladores intermedios y controladores de nivel bajo. El modelo de controladores de Windows (WDM) existe en la capa intermedia y se diseñó principalmente para ser compatible a nivel binario y de código fuente entre Windows 98 y Windows 2000. Los controladores de nivel más bajo son controladores de dispositivos heredados de Windows NT que controlan un dispositivo directamente o pueden ser un bus de hardware plug and play (PnP).
El modo de usuario se compone de varios procesos y DLL definidos por el sistema.
La interfaz entre las aplicaciones en modo usuario y las funciones del núcleo del sistema operativo se denomina "subsistema de entorno". Windows NT puede tener más de uno, cada uno de los cuales implementa un conjunto de API diferente. Este mecanismo fue diseñado para admitir aplicaciones escritas para muchos tipos diferentes de sistemas operativos. Ninguno de los subsistemas de entorno puede acceder directamente al hardware; el acceso a las funciones de hardware se realiza mediante llamadas a rutinas en modo núcleo. [ cita requerida ]
Hay tres subsistemas de entorno principales: el subsistema Win32 , un subsistema OS/2 y un subsistema POSIX . [2]
El subsistema de entorno Win32 puede ejecutar aplicaciones de Windows de 32 bits. Contiene la consola, así como soporte para ventanas de texto, apagado y manejo de errores graves para todos los demás subsistemas de entorno. También admite máquinas virtuales DOS (VDM), que permiten que las aplicaciones MS-DOS y Windows de 16 bits ( Win16 ) se ejecuten en Windows NT. Hay una VDM MS-DOS específica que se ejecuta en su propio espacio de direcciones y que emula un Intel 80486 que ejecuta MS-DOS 5.0. Sin embargo, los programas Win16 se ejecutan en una VDM Win16. Cada programa, de forma predeterminada, se ejecuta en el mismo proceso, por lo que utiliza el mismo espacio de direcciones, y la VDM Win16 le da a cada programa su propio hilo en el que ejecutarse. Sin embargo, Windows NT permite a los usuarios ejecutar un programa Win16 en una VDM Win16 separada, lo que permite que el programa sea multitarea de forma preventiva, ya que Windows NT se adelantará a todo el proceso VDM, que solo contiene una aplicación en ejecución. El proceso del subsistema del entorno Win32 ( csrss.exe ) también incluye la funcionalidad de administración de ventanas, a veces denominada " administrador de ventanas ". Maneja eventos de entrada (como los del teclado y el mouse) y luego pasa mensajes a las aplicaciones que necesitan recibir esta entrada. Cada aplicación es responsable de dibujar o actualizar sus propias ventanas y menús, en respuesta a estos mensajes.
El subsistema de entorno OS/2 admite aplicaciones OS/2 basadas en caracteres de 16 bits y emula OS/2 1.x, pero no aplicaciones OS/2 de 32 bits o gráficas como las que se utilizan con OS/2 2.x o posterior, sólo en máquinas x86. [3] Para ejecutar programas gráficos OS/2 1.x, debe estar instalado el Subsistema de complementos de Windows NT para Presentation Manager. [3] La última versión de Windows NT que tuvo un subsistema OS/2 fue Windows 2000; se ha discontinuado a partir de Windows XP. [4] [5]
El subsistema del entorno POSIX admite aplicaciones escritas estrictamente según el estándar POSIX.1 o los estándares ISO / IEC relacionados . Este subsistema ha sido reemplazado por Interix , que es parte de Windows Services for UNIX . [4] Este, a su vez, fue reemplazado por el subsistema Windows para Linux .
El subsistema de seguridad se ocupa de los tokens de seguridad, concede o deniega el acceso a las cuentas de usuario en función de los permisos de recursos, gestiona las solicitudes de inicio de sesión e inicia la autenticación de inicio de sesión y determina qué recursos del sistema deben ser auditados por Windows NT. [ cita requerida ] También se ocupa de Active Directory . [ cita requerida ] El servicio de estación de trabajo implementa el redirector de red , que es el lado cliente del uso compartido de archivos e impresoras de Windows; implementa solicitudes locales a archivos e impresoras remotos "redirigiéndolos" a los servidores apropiados en la red. [6] Por el contrario, el servicio de servidor permite que otras computadoras en la red accedan a los recursos compartidos de archivos e impresoras compartidas que ofrece el sistema local. [7]
El modo kernel de Windows NT tiene acceso total al hardware y a los recursos del sistema de la computadora y ejecuta código en un área de memoria protegida. [8] Controla el acceso a la programación, la priorización de subprocesos, la administración de memoria y la interacción con el hardware. El modo kernel impide que los servicios y aplicaciones del modo usuario accedan a áreas críticas del sistema operativo a las que no deberían tener acceso; los procesos del modo usuario deben solicitar al modo kernel que realice dichas operaciones en su nombre.
Aunque la arquitectura x86 admite cuatro niveles de privilegio diferentes (numerados del 0 al 3), solo se utilizan los dos niveles de privilegio extremos. Los programas en modo usuario se ejecutan con CPL 3 y el núcleo se ejecuta con CPL 0. Estos dos niveles suelen denominarse "ring 3" y "ring 0", respectivamente. Esta decisión de diseño se había tomado para lograr la portabilidad del código a las plataformas RISC que solo admiten dos niveles de privilegio, [9] aunque esto rompe la compatibilidad con las aplicaciones OS/2 que contienen segmentos de privilegio de E/S que intentan acceder directamente al hardware. [3]
El código que se ejecuta en modo kernel incluye: el ejecutivo, que a su vez está compuesto de muchos módulos que realizan tareas específicas; el kernel , que proporciona servicios de bajo nivel utilizados por el ejecutivo; la capa de abstracción de hardware (HAL); y los controladores del kernel . [8] [10]
Los servicios ejecutivos de Windows constituyen la parte de bajo nivel del modo kernel y están contenidos en el archivo NTOSKRNL.EXE . [8] Se ocupan de la E/S, la gestión de objetos, la seguridad y la gestión de procesos. Estos se dividen en varios subsistemas , entre los que se encuentran el Administrador de caché , el Administrador de configuración , el Administrador de E/S , la Llamada a procedimiento local (LPC) , el Administrador de memoria , el Administrador de objetos , la Estructura de procesos y el Monitor de referencia de seguridad (SRM) . Agrupados, los componentes pueden llamarse servicios ejecutivos (nombre interno Ex ). Los Servicios del sistema (nombre interno Nt ), es decir, las llamadas del sistema , también se implementan en este nivel, excepto muy pocos que llaman directamente a la capa del kernel para un mejor rendimiento. [ cita requerida ]
El término "servicio" en este contexto generalmente se refiere a una rutina invocable o a un conjunto de rutinas invocables. Esto es distinto del concepto de "proceso de servicio", que es un componente en modo usuario similar a un demonio en los sistemas operativos tipo Unix .
El núcleo se encuentra entre el HAL y el Ejecutivo y proporciona sincronización de multiprocesadores, programación y distribución de subprocesos e interrupciones, y manejo de trampas y distribución de excepciones; también es responsable de inicializar los controladores de dispositivos en el arranque que son necesarios para poner en funcionamiento el sistema operativo. Es decir, el núcleo realiza casi todas las tareas de un microkernel tradicional ; la distinción estricta entre Ejecutivo y Kernel es el vestigio más destacado del diseño original del microkernel, y la documentación de diseño histórica se refiere constantemente al componente del núcleo como "el microkernel".
El núcleo a menudo interactúa con el administrador de procesos. [24] El nivel de abstracción es tal que el núcleo nunca llama al administrador de procesos, sino sólo al revés (salvo en unos pocos casos excepcionales, pero nunca hasta el punto de una dependencia funcional).
El diseño de Windows NT incluye muchos de los mismos objetivos que Mach , el sistema de microkernel arquetípico, siendo uno de los más importantes su estructura como una colección de módulos que se comunican a través de interfaces bien conocidas, con un pequeño microkernel limitado a funciones básicas como el manejo de interrupciones de primer nivel, la programación de subprocesos y las primitivas de sincronización. Esto permite la posibilidad de utilizar llamadas a procedimientos directos o comunicación entre procesos (IPC) para comunicarse entre módulos y, por lo tanto, la posible ubicación de los módulos en diferentes espacios de direcciones (por ejemplo, en el espacio del núcleo o en los procesos del servidor). Otros objetivos de diseño compartidos con Mach incluían el soporte para diversas arquitecturas, un núcleo con abstracciones lo suficientemente generales como para permitir que se implementaran múltiples personalidades de sistema operativo sobre él y una organización orientada a objetos. [25] [26]
La personalidad principal del sistema operativo en Windows es la API de Windows , que siempre está presente. El subsistema de emulación que implementa la personalidad de Windows se denomina Subsistema de tiempo de ejecución de cliente/servidor (csrss.exe). En las versiones de NT anteriores a la 4.0, este proceso del subsistema también contenía el administrador de ventanas, la interfaz del dispositivo gráfico y los controladores del dispositivo gráfico. Sin embargo, por razones de rendimiento, en la versión 4.0 y posteriores, estos módulos (que a menudo se implementan en modo de usuario incluso en sistemas monolíticos, especialmente aquellos diseñados sin soporte gráfico interno) se ejecutan como un subsistema en modo kernel. [25]
Las aplicaciones que se ejecutan en NT se escriben en una de las personalidades del SO (normalmente la API de Windows), y no en la API nativa de NT, para la que no hay documentación disponible públicamente (con la excepción de las rutinas utilizadas en el desarrollo de controladores de dispositivos). Una personalidad del SO se implementa mediante un conjunto de DLL de modo de usuario (consulte la Biblioteca de vínculos dinámicos ), que se asignan a los espacios de direcciones de los procesos de aplicación según sea necesario, junto con un proceso de servidor del subsistema de emulación (como se describió anteriormente). Las aplicaciones acceden a los servicios del sistema llamando a las DLL de personalidad del SO asignadas a sus espacios de direcciones, que a su vez llaman a la biblioteca de tiempo de ejecución de NT (ntdll.dll), también asignada al espacio de direcciones del proceso. La biblioteca de tiempo de ejecución de NT atiende estas solicitudes entrando en el modo de núcleo para llamar a rutinas ejecutivas de modo de núcleo o hacer llamadas a procedimientos locales (LPC) a los procesos de servidor del subsistema de modo de usuario adecuados, que a su vez utilizan la API de NT para comunicarse con los procesos de aplicación, los subsistemas de modo de núcleo y entre sí. [27]
Windows NT utiliza controladores de dispositivos en modo kernel para poder interactuar con dispositivos de hardware . Cada uno de los controladores tiene rutinas de sistema bien definidas y rutinas internas que exporta al resto del sistema operativo. El código de modo de usuario ve todos los dispositivos como un objeto de archivo en el administrador de E/S, aunque para el propio administrador de E/S los dispositivos se ven como objetos de dispositivo, que define como objetos de archivo, dispositivo o controlador. Los controladores de modo kernel existen en tres niveles: controladores de nivel más alto, controladores intermedios y controladores de nivel bajo. Los controladores de nivel más alto, como los controladores del sistema de archivos para FAT y NTFS , dependen de controladores intermedios. Los controladores intermedios consisten en controladores de función (o controlador principal para un dispositivo) que se intercalan opcionalmente entre controladores de filtro de nivel inferior y superior. El controlador de función se basa entonces en un controlador de bus (o un controlador que da servicio a un controlador, adaptador o puente de bus ) que puede tener un controlador de filtro de bus opcional que se sitúa entre él mismo y el controlador de función. Los controladores intermedios dependen de los controladores de nivel más bajo para funcionar. El modelo de controladores de Windows (WDM) existe en la capa intermedia. Los controladores de nivel más bajo son controladores de dispositivos de Windows NT heredados que controlan un dispositivo directamente o pueden ser un bus de hardware PnP. Estos controladores de nivel más bajo controlan el hardware directamente y no dependen de ningún otro controlador.
La capa de abstracción de hardware (HAL) de Windows NT es una capa que se encuentra entre el hardware físico de la computadora y el resto del sistema operativo. Fue diseñada para ocultar las diferencias en el hardware y proporcionar una plataforma consistente en la que se ejecuta el núcleo. La HAL incluye código específico del hardware que controla las interfaces de E/S, los controladores de interrupciones y varios procesadores.
Sin embargo, a pesar de su propósito y lugar designado dentro de la arquitectura, la HAL no es una capa que se encuentra completamente debajo del núcleo, de la misma manera que el núcleo se encuentra debajo del Ejecutivo: todas las implementaciones de HAL conocidas dependen en cierta medida del núcleo, o incluso del Ejecutivo. En la práctica, esto significa que las variantes de núcleo y HAL vienen en conjuntos coincidentes que están específicamente diseñados para funcionar juntos.
En particular, la abstracción de hardware no implica la abstracción del conjunto de instrucciones, que generalmente se enmarca en el concepto más amplio de portabilidad . La abstracción del conjunto de instrucciones, cuando es necesario (por ejemplo, para gestionar las distintas revisiones del conjunto de instrucciones x86 o emular un coprocesador matemático faltante), la realiza el núcleo o mediante la virtualización de hardware .
La secuencia de arranque es iniciada por NTLDR en versiones anteriores a Vista y por el Administrador de arranque de Windows en Vista y posteriores. [28] El cargador de arranque es responsable de acceder al sistema de archivos en la unidad de arranque, iniciar ntoskrnl.exe y cargar los controladores de dispositivos de arranque en la memoria. Una vez que se han cargado todos los controladores de arranque y del sistema, el núcleo inicia el Subsistema del administrador de sesiones . El administrador de sesiones inicia servicios cruciales del núcleo y del modo usuario del subsistema Win32, como el Subsistema de tiempo de ejecución de cliente/servidor . La sesión también ejecuta el proceso winlogon , que permite a los usuarios iniciar sesión y usar sus cuentas.