Windows NT es el nuevo sistema operativo de Microsoft. Fue diseñado para tomar ventaja de todo el poder que ofrecen los procesadores más avanzados de Intel, así como algunos de los procesadores RISC. Windows NT es la respuesta de Microsoft a UNIX. NT ofrece los mismos servicios que UNIX, interopera con redes UNIX pero remplaza los comandos criacute;pticos de UNIX, su estructura de archivos ARCANE y la mezcla de GUIs con una simple y estandarizada interfaz para el usuario como lo es Windows. Además, NT tiene las características que originalmente iba a tener el OS/2: un avanzado sistema operativo de 32 bits y compatibilidad con Windows GUI, además de soportar las aplicaciones hechas en DOS pero liberándose de las limitaciones de éste. Las características de diseño que hacen de Windows NT un sistema operativo avanzado son [MJS Jul-Ago92]:
Un sistema operativo es un programa complejo que necesita un modelo unificado para asegurarse que el sistema puede acomodar sus características propias sin que éstas alteren el diseño. El diseño de Windows NT fue guiado por una combinación de diversos modelos que fueron unidos en Windows NT. Los razgos característicos de NT son [LenF93]:
El núcleo es la base del sistema operativo, en donde reside el ejecutivo del NT por medio del cual se realizan las siguientes operaciones:
Cada objeto de tipo tarea es creado como una respuesta a una requisición de la aplicación que contenga una mini-tarea consistente en una llamada al kernel que es usada para iniciar la ejecución de una tarea más larga, cada una de las tareas puede encontrarse en los estados de ejecución, espera en cola, espera por recursos, lista para ejecución o finalizada. El kernel cuenta con un módulo llamado despachador que se encarga de permitir la entrada de los procesos y de darlos por terminados. El despachador igualmente examina la prioridad de los procesos para determinar en qué orden van a ser ejecutados; suspendiendo y activando los procesos.
En Windows NT se manejan las interrupciones como en cualquier sistema operativo. La llegada de señales por el bus debido a fallas de los programas o por peticiones de entrada/salida de los periféricos son atrapadas por el núcleo. En la Figura 11.1 se pueden observar las partes del núcleo de WindowsNT. El paso de los subsistemas de OS/2, POSIX y Win32 hacia los servicios del sistema se hace a través de mensajes y de atrapado de interrupciones.
Esta característica asegura que sólo una tarea puede accesar un mismo recurso a la vez. En un sistema basado en multiprocesadores con memoria compartida, dos o más procesadores pueden estar ejecutando tareas que necesitan accesar la misma página de memoria o realizar operaciones sobre un mismo objeto. El núcleo y el ejecutivo de NT proveen mecanismos para asegurar la integridad del sistema a través de la sincronización; en el caso del kernel la sincronización es manejada a través de candados colocados en puntos críticos de las instrucciones del nivel despachador, de esta manera, ningún otro procesador puede ejecutar código o accesar datos protegidos por uno de los candados de tipo spin hasta que éste es liberado. El ejecutivo del NT realiza la sincronización a través de la familia de los objetos de sincronización.
La última función del kernel consiste en la recuperación del sistema en caso de una caída. Cuando existe una falla de alimentación en un sistema NT se dispara una interrupción de alta prioridad la cual dispara a su vez una serie de tareas diseñadas para preservar la integridad del sistema operativo y de los datos tan rápido como sea posible.
El mcro-núcleo de WindowsNT contiene una capa de abstracción del hw que es el límite entre el ejecutivo del NT y el hw específico de la computadora. NT fue diseñado de tal manera que los cambios de código son mínimos para ser acoplados a las diferentes plataformas de hw tomando como ejemplo los sistemas UNIX.
Windows NT tiene dos modos de operar, modo usuario y modo privilegiado (kernel). Programas de aplicaciones como una base de datos, una hoja de cálculo, o un sistema de reservaciones de un hotel, siempre son ejecutadas en modo usuario. El ejecutivo de NT es el corazón del sistema. El ejecutivo de NT realiza tareas como el manejo de entradas y salidas, la memoria virtual, y todos lo procesos, además de controlar las ligas entre NT y el hardware de la computadora. El ejecutivo de NT es ejecutado en modo kernel, el cual es una modo de alta seguridad libre de interferencias de los procesos de los usuarios. Consúltese la figura 11.1.
El modo usuario, hay también los llamados subsistemas protegidos. Un ejemplo de estos es el Win32 API. Usando esta API los programadores no tienen porque preocuparse acerca del hardware donde el programa va a ser ejecutado y por otro lado protege al sistema de aquellos programadores que traten de modificar su memoria y para hacer que falle el sistema. Adicionalmente el API tiene reglas de seguridad que protegen a los otros subsistemas de interferencias entre ellos.
En el ambiente de NT los programas de aplicación de los usuarios son los clientes y los subsistemas protegidos son los servidores. Las aplicaciones (clientes) mandan mensajes a los subsistemas protegidos a través del ejecutivo de NT, el cual provee un conjunto de servicios compartidos para todos los servidores. Y a su vez los servidores contestan a los clientes de la misma forma.
En NT, los servidores ejecutándose en un procesador local pueden mandar mensajes de sus clientes a otros servidores que estén siendo ejecutados en procesadores remotos sin que se necesite que el cliente sepa algo de los servidores remotos.
El modelo cliente/servidor hizo que el sistema operativo fuera más eficiente eliminando recursos duplicados y elevó el soporte que ofrece el sistema operativo para multiproceso y redes. Esta arquitectura permite que otros API's sean añadidos sin tener que aumentar un nuevo ejecutivo de NT para su manejo. Por otro lado cada subsistema es un proceso separado en su propias memorias protegidas, así, si uno de los subsistemas falla no hace que todo el sistema falle también.
El ejecutivo NT (Ver figura 11.1) es un sistema operativo completo que no cuenta con interfaz y está compuesto de cuatro capas, siendo éstas las siguientes:
Este módulo es el responsable de crear, manejar y borrar los objetos del ejecutivo de NT, siendo este tipo de objetos procesos y datos, así como objetos propios de los niveles del sistema.
Existen dos tipos principales de objetos: los objetos ejecutivos que son creados dentro del ejecutivo y que son accesibles para el ejecutivo y los subsistemas protegidos, y la otra clase se objetos que son sólo accesibles por el ejecutivo y que se llaman objetos del kernel y que sólo pueden ser modificados dentro del mismo. El manejador de objetos tiene las siguientes funciones:
El monitor de la seguridad del sistema trabaja en conjunción con el manejador de objetos para proveer un mecanismo de control de acceso a los objetos mismos.
La información de control de acceso esta atada a cada objeto, dentro de esta información cada objeto maneja una lista de control de accesos ( ACL ) en esta lista cada objeto registra los permisos de acceso con los que cuenta su creador pero siempre manteniendo la peculiaridad de que el dueño de dicho objeto puede cambiar los permisos.
En lo relativo al sistema de archivos de NT tiene compatibilidad con los siguientes sistemas de archivos:
La migración de archivos desde DOS o Windows 16-bits al sistema manejador de archivos de Windows NT (NTFS) puede dar como resultado que el sistema y los usuarios confundan la seguridad de estos archivos pero esto tiene una fácil solución con la intervención del administrador.
La facilidad de soportar diferentes tipos de archivos ayuda a lograr una característica llamada 'personalidad del sistema operativo'. Esta característica consiste en la facilidad de que un sistema operativo soporte la ejecución de aplicaciones creadas para un sistema operativo diferente. Como se puede observar en la figura 11.1, los susbsistemas de Win32, de POSIX y de OS/2 complementan el logro de diferentes personalidades.
En la arquitectura de NT los procesos son segmentados en componentes más pequeños llamados 'threads'. WindowsNT soporta varias tareas al mismo tiempo. Existen dos tipos de multitarea, el apropiativo (preemptive) y el no apropiativo (no preemptive). Con la multitarea apropiativa la ejecución de un 'thread' puede ser suspendida después de un tiempo determinado (time slice) por el sistema operativo para permitir que otro thread sea ejecutado. Mientras que con la multitarea no apropiativa, es el thread el que determina cuándo le regresará el control al sistema operativo para permitir que otro thread sea ejecutado. NT así como OS/2 y UNIX usan preemptive multitasking para soportar la ejecución "simultánea" de varios procesos.
El manejador de procesos es un componente ambiental que crea y destruye procesos y tareas, como el manejador de objetos, el manejador de procesos ve los procesos como si fueran objetos en efecto el manejador de procesos puede ser considerado como un instancia específica del manejador de objetos porque dicho manejador crea, maneja y destruye un sólo tipo de objetos.
Se puede únicamente distinguir una funcionalidad adicional al manejador de objetos con la que cuenta el manejador de procesos que consiste en el manejo del estadío de cada uno de los procesos (ejecutar, suspender, reiniciar, terminar una tarea).
Las llamadas a procedimientos locales (LPC, ver figura 11.1) son usadas para pasar mensajes entre dos diferentes procesos corriendo dentro de un mismo sistema NT, estos sistemas fueron modelados utilizando como modelo las llamadas a procedimientos remotos (RPC); los RPC consisten en una manera estandarizada de pasar mensajes entre un cliente y un servidor a través de una red. Similarmente los LPC's pasan mensajes de un procedimiento cliente a un procedimiento servidor en un mismo sistema NT.
Cada proceso cliente en un sistema NT que tiene capacidad de comunicación por medio de LPC's debe tener por lo menos un objeto de tipo puerto asignado a él, este objeto tipo puerto es el equivalente a un puerto de TCP/IP en un sistema UNIX.
Existen dos tipos de multiproceso, el asimétrico y el simétrico. En el asimétrico hay un procesador (maestro) en el cual se ejecuta el sistema operativo y los demás (esclavos) donde se ejecutan las demás tareas. La ventaja de éste es que al aumentar más procesadores se tiene que hacer un cambio mínimo y fácil para el manejo de éstos y en general se eliminan muchos problemas de integridad de datos. La gran desventaja es que al haber sólo una copia del sistema operativo en un sólo procesador (maestro) cuando este procesador falla todo el sistema falla porque todos los recursos que son manejados por el sistema operativo no pueden ser accesados.
En el simétrico se ejecuta el sistema operativo - o una gran parte de él - en cualquiera de los procesadores disponibles y todos ellos tienen acceso a los recursos a menos que cada recurso sea asignado a un procesador específico. Aunque es mas difícil de implementar tiene muchas más ventajas. Primero, este tipo de sistemas tienden a ser más eficientes porque las tareas tanto del sistema operativo como de los usuarios pueden ser distribuídas en forma balanceada a todos los procesadores. Debido a que las demandas del sistema operativo pueden ser repartidas a todos los procesadores, el tiempo de inactividad de un procesador mientras otro está sobretrabajando es mínimo. Segunda, si un procesador falla, es posible que sus tareas sean repartidas entre los demás y no es necesario que todo el sistema sea parado o que falle el sistema. Y finalmente, la portabilidad del sistema es mayor debido a que no sigue la arquitectura de mastrer/slave. NT implementa este modelo de multiproceso.
Seguridad en relación a Windows NT se refiere a dos cosas básicamente:
En el primer punto, el control sobre el acceso al sistema se refiere al manejo de user names y passwords para poder accesar al sistema operativo, de esta manera se mantienen a los usuarios sin autorización fuera del sistema. El siguiente nivel de seguridad en cuanto a este punto se refiere, son los privilegios que tiene un usuario, todos los usuarios o grupos de usuarios a los directorios y archivos del sistema, p.e. el acceso a los archivos del sistema de NT está estrictamente limitado al administrador del sistema, mientras que las aplicaciones comunes como lo son hojas de cálculo o procesadores de palabras pueden ser accesados por todos los usuarios.
El segundo punto trata acerca de la integridad del sistema, la pérdida de información en sistemas operativos para un sólo usuario no es tan grave comparada con la de los sistemas operativos para redes, en los cuales se pudo haber perdido información que tardará horas en ser recuperada. NT tiene amplias facilidades para asegurar la integridad del sistema para hacer correr a NT bajo condiciones difíciles, así como para recuperar el sistema de manera rápida y sencilla.
Windows NT cuenta con un extenso sistema de control de seguridad para el acceso a archivos. El propósito de la seguridad en Windows NT es brindarle el acceso sólo a aquellos usuarios que están autorizados, controlar el acceso concurrente a archivos, a los directorios y a los recursos del sistema.
La seguridad en los sistemas Windows NT debe ser configurada por el administrador del sistema siendo necesario para todos los sistemas un administrador (incluyendo los sistemas monousuarios). El administrador establece los nombres de usuario, crea grupos de usuarios, asigna los usuarios a los grupos, controla los passwords, permite los niveles de acceso a las funcionalidades del sistema; en pocas palabras el administrados controla todos los puntos de acceso al sistema.
El administrador puede controlar el acceso específico a ciertas funciones del sistema, especialmente aquellas que afectan el funcionamiento del mismo, este sistema de control es llamado la política de derechos del usuario. De esta manera el administrador a través de esta política puede controlar las labores que efectúa un usuario tanto local como remotamente.
Entendemos por integridad del sistema a la habilidad del mismo de permanecer activo cuando una de sus aplicaciones falla. Windows NT está diseñado para prevenir la caída catastrófica del sistema en caso de que algunas de sus aplicaciones falle y para esto establece los siguientes cuatro mecanismos de protección de memoria:
Dentro de la integridad del sistema Windows NT establece políticas y procedimientos de protección el acceso a recursos de esta manera protege a los procesos de caer en estados muertos cuando compiten por recursos.
Como se mencionó al comienzo de este capítulo, WindowsNT es un sistema operativo de 32 bits con la facilidad del manejo de memoria virtual. A continuación se verán a detalle las caracteristicas ofrecidas en este S.O.
Este tipo de direccionamiento tiene varias ventajas. Primera, eliminando la memoria segmentada, el desarrollo de software es mas fácil y rápido. Los programadores no necesitarán estar familiarizados con los requerimientos de memoria de sus aplicaciones. Además, el direccionamiento de 32-bits mejora el desempeño del sistema eliminando parte del 'overhead' del software para el manejo de la memoria. Quitando los manejadores de memoria elimina también las incompatibilidades en hw y sw, lo que significa que la instalación y configuración de NT es tan simple y fácil como la de DOS o la de 16-bit Windows.
La ventaja final del direccionamiento de 32-bits es un incremento considerable en el tamaño disponible para los programas y los datos. NT soporta un máximo de 4 Gigas de programas y sistema, lo que es n veces más grande de lo que soporta el DOS o el mismo 16-bit Windows, ésta es una gran ventaja si se van a manejar aplicaciones complejas que procesan archivos muy grandes (como los de procesamiento de imágenes) o a aplicaciones orientadas a transacciones críticas, las cuales serían imposibles de implementar en DOS y Windows.
El direccionamiento de 32-bits le da a las aplicaciones acceso a 4 Gigabytes de memoria, de los cuales 2 Gigas están reservados para uso del sistema operativo, y que son más que suficientes para casi cualquier aplicacion concebible.
Cuando el usuario o el administrador instala por primera vez NT, el NT setup program checa cuánto espacio en RAM y en DD está disponible. Basándose en esto NT crea un swap file, el cual debe de ser al menos del mismo tamaño del RAM. El manejador de memoria virtual de NT realiza dos tareas básicas. Primero, maneja los datos guardados en disco y mapea las direcciones de los datos que están en disco al espacio de direcciones en 32-bits lineales. Las aplicaciones pueden hacer operaciones con los datos sin importar la localización física de ellos (disco o RAM).
Segundo, el manejador de memoria virtual mueve algunas porciones del RAM al swap file cuando los procesos tratan usar más RAM del que está disponible. En este caso, las partes inactivas de RAM son movidas temporalmente al swap file hasta que son necesitadas en RAM, el tamaño de página con que se hace el swap de RAM a disco es de 4 K. Es decir, se usa paginación por demanda.
El manejador de memoria virtual (MMV) de los sistemas NT realiza tres funciones escenciales: el manejo del espacio virtual de cada uno de los procesos, el espacio de memoria compartida entre los procesos, la protección de la memoria virtual de cada proceso. Dentro del manejo de la memoria virtual de cada proceso se realizan las siguientes tareas :
El manejador de memoria virtual permite que uno o varios procesos compartan las mismas páginas de memoria virtual, de tal manera que dos o más procesos puedan tener manejadores a la misma área de memoria virtual. El MMV tiene una característica singular que consiste en el poder direccionar una pequeña área del espacio de memoria virtual de otro proceso, esta ventana del espacio total de memoria virtual de procesos es llamada vista y ésta permite que un proceso trabaje con muchas porciones pequeñas de largos espacios de memoria virtual para crear su propio espacio de memoria virtual.
El manejador de memoria de Windows NT permite proteger ciertas regiones de memoria de accesos inadvertidos o deliberados realizados por otros procesos. El MMV es responsable de hacer el mapeo entre las direcciones de memoria virtual y las direcciones de hw específicas asegurando de esta manera que dos procesos no puedan accesar una misma página de memoria. El MMV utiliza técnicas de manejo de memoria en hw que están disponibles en la computadora host y de esta manera establece la protección a cada una de las páginas. Todas las protecciones de las páginas no están provistas por el hw por lo que Windows NT tuvo que hacerlo a través del sw definiendo páginas individuales de memoria como de lectura y escritura, sólo lectura, sólo escritura, de ejecución o sin acceso.
Para aplicaciones que utilizan largos sectores de memoria Windows NT introduce un concepto llamado " bookend " el cual consiste en un página que marca el final del código o de datos; cuando el proceso llega a una de estas páginas llamadas páginas guardia sabe que se encuentra en un estado fuera de memoria y solicita memoria adicional al MMV protegiendo de esta manera la caída de la aplicación.
En situaciones donde dos o más procesos necesitan accesar la misma región de memoria, el MMV realiza una copia de la página para que el segundo proceso lo utilice estableciendo de esta manera el mecanismo de protección de páginas y a su vez estableciendo la memoria compartida.
Cuando un proceso quiere modificar ciertos datos en la memoria compartida debe primero modificarlo en su copia de las páginas de memoria y después notificar al MMV que necesita actualizar los cambios en las páginas de los demás procesos, previniendo de esta manera que el proceso modifique directamente las páginas de memoria que no le pertenecen.
En Windows NT el manejador de las entradas y salidas debe ser considerado más bien como un despachador de las entradas y salidas al sistema, puesto que este módulo establece la comunicación entre los subsistemas protegidos y los controladores de dispositivos por otro lado.
Cuando cualquier aplicación solicita un servicio de entrada/salida, el manejador de entradas/salidas convierte la solicitud en un IRP (I/O request packet) e identifica el manejador de dispositivos adecuado para llevar acabo la requisición hecha por el proceso. Cada uno de los manejadores de dispositivos recibe el paquete de datos y lo procesa mandando el resultado hacia el manejador de entradas y salidas o si es necesario mandando su resultado al siguiente manejador de dispositivos para que procese su resultado, teniendo como destino final, el paquete de datos, el manejador de entradas y salidas. Después de que una requisición ha sido pasada a un manejador de dispositivos éste es responsable del control de las mismas a través de sistemas de colas.
Una de los más grandes cualidades dentro de Windows NT es la capacidad de soportar múltiples sistemas operativos. Un sistema NT puede simultáneamente correr la mayoría de los programas de DOS, Windows 16-bits, y la mayoría de las aplicaciones orientadas a caracteres de OS/2 versión 1.x y las que cumplan con el estándar POSIX
El propósito de Windows NT es el de ser un sistema operativo diseñado para correr en distintas plataformas soportando los siguientes procesadores:
La independencia de plataforma está basada en el concepto de el desarrollar un kernel específico para cada uno de los distintos procesadores que sirva de interfaz entre el hardware específico y las llamadas al sistema de NT.
Windows NT ofrece cuatro tipos diferentes de soporte de redes: