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 preventivo y reentrante , que ha sido diseñado para funcionar con computadoras basadas en uniprocesador y multiprocesador simétrico (SMP). Para procesar 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ónicas . A partir de Windows XP , Microsoft comenzó a ofrecer versiones de Windows de 64 bits ; antes de esto, sólo existían versiones de 32 bits de estos sistemas operativos.
Los programas y subsistemas en modo usuario están limitados en términos de a qué recursos del sistema tienen acceso, mientras que el modo kernel tiene acceso ilimitado 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 variedad de servicios (denominados colectivamente Executive), todos los cuales existen 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 en modo kernel adecuados mediante el administrador de E/S. La capa de modo de usuario de Windows NT se compone de 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 en modo usuario accedan a áreas críticas del sistema operativo a las que no deberían tener acceso.
Las interfaces Executive, con todos los subsistemas del modo de usuario, se ocupan de E/S, gestión de objetos, seguridad y gestión de procesos. El kernel se encuentra entre la capa de abstracción de hardware y el Executive para proporcionar sincronización multiprocesador , programación y distribución de subprocesos e interrupciones, y manejo de trampas y distribución de excepciones. El kernel también es responsable de inicializar los controladores de dispositivos durante el arranque. Los controladores del modo kernel existen en tres niveles: controladores de nivel más alto, controladores intermedios y controladores de nivel bajo. El modelo de controlador de Windows (WDM) existe en la capa intermedia y fue diseñado principalmente para ser compatible con binarios y fuentes 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 de usuario y las funciones del núcleo del sistema operativo se denomina "subsistema de entorno". Windows NT puede tener más de uno de ellos, 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 del entorno puede acceder directamente al hardware; El acceso a las funciones del hardware se realiza llamando a rutinas en modo kernel. [ cita necesaria ]
Hay tres subsistemas de entorno principales: el subsistema Win32 , un subsistema OS/2 y un subsistema POSIX . [2]
El subsistema del 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 para todos los demás subsistemas del entorno. También es compatible con máquinas virtuales DOS (VDM), que permiten ejecutar aplicaciones MS-DOS y Windows de 16 bits ( Win16 ) en Windows NT. Existe un VDM de MS-DOS específico que se ejecuta en su propio espacio de direcciones y que emula un Intel 80486 que ejecuta MS-DOS 5.0. Los programas Win16, sin embargo, se ejecutan en un VDM Win16. Cada programa, de forma predeterminada, se ejecuta en el mismo proceso, por lo que utiliza el mismo espacio de direcciones, y Win16 VDM le da a cada programa su propio hilo para ejecutar. Sin embargo, Windows NT permite a los usuarios ejecutar un programa Win16 en un VDM Win16 separado, lo que permite que el programa realice múltiples tareas de forma preventiva, ya que Windows NT se adelantará a todo el proceso VDM, que sólo 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 gráficas o de 32 bits como las que se usan con OS/2 2.x o posterior, en Solo máquinas x86. [3] Para ejecutar programas gráficos OS/2 1.x, se debe instalar el subsistema complementario de Windows NT para Presentation Manager. [3] La última versión de Windows NT que tuvo un subsistema OS/2 fue Windows 2000; ha sido descontinuado a partir de Windows XP. [4] [5]
El subsistema de entorno POSIX admite aplicaciones que están estrictamente escritas según el estándar POSIX.1 o los estándares ISO / IEC relacionados . Este subsistema ha sido reemplazado por Interix , que forma parte de los servicios de Windows para UNIX . [4] Este a su vez fue reemplazado por el Subsistema de Windows para Linux .
El subsistema de seguridad se ocupa de los tokens de seguridad, otorga o niega el acceso a cuentas de usuario según los permisos de recursos, maneja 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 necesaria ] El servicio de estación de trabajo implementa el redirector de red , que es el lado cliente del intercambio de archivos e impresoras de Windows; implementa solicitudes locales a archivos e impresoras remotas "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 archivos compartidos e impresoras compartidas ofrecidas por el sistema local. [7]
El modo kernel de Windows NT tiene acceso completo a los recursos de hardware y 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 gestión de la memoria y la interacción con el hardware. El modo kernel impide que los servicios y aplicaciones en modo usuario accedan a áreas críticas del sistema operativo a las que no deberían tener acceso; Los procesos en modo usuario deben solicitar al modo kernel que realice dichas operaciones en su nombre.
Si bien la arquitectura x86 admite cuatro niveles de privilegios diferentes (numerados del 0 al 3), solo se utilizan los dos niveles de privilegios extremos. Los programas en modo de usuario se ejecutan con CPL 3 y el kernel se ejecuta con CPL 0. Estos dos niveles a menudo se denominan "anillo 3" y "anillo 0", respectivamente. Esta decisión de diseño se tomó para lograr la portabilidad del código a plataformas RISC que sólo admiten dos niveles de privilegio, [9] aunque esto rompe la compatibilidad con aplicaciones OS/2 que contienen segmentos de privilegios 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 se compone de muchos módulos que realizan tareas específicas; el kernel , que presta servicios de bajo nivel utilizados por el Ejecutivo; la capa de abstracción de hardware (HAL); y controladores del núcleo . [8] [10]
Los servicios de Windows Executive constituyen la parte del modo kernel de bajo nivel y están contenidos en el archivo NTOSKRNL.EXE . [8] Se ocupa de E/S, gestión de objetos, seguridad y 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 denominarse Servicios ejecutivos (nombre interno Ex ). Los servicios del sistema (nombre interno Nt ), es decir, llamadas al sistema , también se implementan en este nivel, excepto muy pocos que llaman directamente a la capa del núcleo para un mejor rendimiento. [ cita necesaria ]
El término "servicio" en este contexto generalmente se refiere a una rutina invocable o un conjunto de rutinas invocables. Esto es distinto del concepto de "proceso de servicio", que es un componente en modo de usuario algo análogo a un demonio en los sistemas operativos tipo Unix .
El kernel se encuentra entre HAL y Executive y proporciona sincronización multiprocesador, 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 dispositivo durante el arranque que son necesarios para que el sistema operativo esté en funcionamiento. Es decir, el kernel realiza casi todas las tareas de un microkernel tradicional ; la distinción estricta entre Executive y Kernel es el vestigio más destacado del diseño original del microkernel, y la documentación histórica del diseño se refiere constantemente al componente del kernel como "el microkernel".
El kernel 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, sólo al revés (salvo en un puñado de casos extremos, 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 micronúcleo 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 micronúcleo limitado a funciones centrales como la primera. Manejo de interrupciones a nivel, programación de subprocesos y primitivas de sincronización. Esto permite la posibilidad de utilizar llamadas directas a procedimientos o comunicación entre procesos (IPC) para comunicarse entre módulos y, por lo tanto, la posible ubicación de módulos en diferentes espacios de direcciones (por ejemplo, en el espacio del kernel o en los procesos del servidor). Otros objetivos de diseño compartidos con Mach incluyeron soporte para diversas arquitecturas, un núcleo con abstracciones lo suficientemente generales como para permitir que se implementen múltiples personalidades de sistemas operativos 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 ejecución cliente/servidor (csrss.exe). En las versiones de NT anteriores a la 4.0, este proceso de subsistema también contenía el administrador de ventanas, la interfaz del dispositivo de gráficos y los controladores del dispositivo de gráficos. 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 de gráficos internos) se ejecutan como un subsistema en modo kernel. [25]
Las aplicaciones que se ejecutan en NT se escriben en una de las personalidades del sistema operativo (normalmente la API de Windows) y no en la API nativa de NT cuya documentación no está disponible públicamente (con la excepción de las rutinas utilizadas en el desarrollo de controladores de dispositivos). Una personalidad del sistema operativo se implementa a través de un conjunto de DLL en modo de usuario (consulte Biblioteca de vínculos dinámicos ), que se asignan a los espacios de direcciones de los procesos de la 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 sistema operativo 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 atrapando en modo kernel para llamar a rutinas ejecutivas en modo kernel o realizar llamadas a procedimientos locales (LPC) a los procesos de servidor del subsistema en modo de usuario apropiados, que a su vez utilizan la API de NT para comunicarse con procesos de aplicación, los subsistemas en modo kernel y entre sí. [27]
Windows NT utiliza controladores de dispositivos en modo kernel para permitirle 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. Todos los dispositivos son vistos por el código de modo de usuario como un objeto de archivo en el administrador de E/S, aunque para el propio administrador de E/S los dispositivos son vistos como objetos de dispositivo, que define como objetos de archivo, dispositivo o controlador. Los controladores del 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 de sistemas de archivos para FAT y NTFS , dependen de controladores intermedios. Los controladores intermedios consisten en controladores de funciones (o controlador principal de un dispositivo) que opcionalmente se intercalan entre controladores de filtro de nivel inferior y superior. Luego, el controlador de función depende de un controlador de autobús (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 ubica entre él y el controlador de función. Los conductores intermedios dependen de los conductores de nivel más bajo para funcionar. El modelo de controlador de Windows (WDM) existe en la capa intermedia. 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 PnP. Estos controladores de nivel inferior controlan directamente el hardware y no dependen de ningún otro controlador.
La capa de abstracción de hardware (HAL) de Windows NT es una capa entre el hardware físico de la computadora y el resto del sistema operativo. Fue diseñado para ocultar diferencias en el hardware y proporcionar una plataforma consistente en la que se ejecuta el kernel. HAL incluye código específico de hardware que controla interfaces de E/S, controladores de interrupciones y múltiples procesadores.
Sin embargo, a pesar de su propósito y lugar designado dentro de la arquitectura, HAL no es una capa que se encuentra completamente debajo del kernel, de la misma manera que el kernel se ubica debajo del Executive: todas las implementaciones conocidas de HAL dependen en cierta medida del kernel, o incluso del Ejecutivo. En la práctica, esto significa que las variantes del kernel y HAL vienen en conjuntos coincidentes que están construidos específicamente para funcionar juntos.
En particular, la abstracción de hardware no implica abstraer el conjunto de instrucciones, lo que generalmente cae dentro del concepto más amplio de portabilidad . La abstracción del conjunto de instrucciones, cuando es necesario (como para manejar las diversas revisiones del conjunto de instrucciones x86 o para emular un coprocesador matemático faltante), se realiza mediante el kernel o mediante virtualización de hardware .
La secuencia de inicio la inicia NTLDR en versiones anteriores a Vista y el Administrador de inicio 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 del dispositivo de arranque en la memoria. Una vez que se han cargado todos los controladores de arranque y del sistema, el kernel inicia el subsistema del administrador de sesiones . El administrador de sesión inicia servicios cruciales en modo kernel y usuario del subsistema Win32, como el subsistema de tiempo de ejecución cliente/servidor . La sesión también ejecuta el proceso winlogon , que permite a los usuarios iniciar sesión y utilizar sus cuentas.