Administración de Windows

Dentro del núcleo de Windows Vista: Parte 1

Mark Russinovich

 

Resumen:

  • Programación y prioridad de subprocesos
  • Vínculos simbólicos basados en archivos
  • Cancelación de operaciones de E/S

Ésta es la primera parte de una serie sobre las novedades en el núcleo de Windows Vista. En este artículo analizaré los cambios producidos en las áreas de procesos y subprocesos y en E/S. Las siguientes entregas incluirán la administración de la memoria, inicio y apagado, confiabilidad y recuperación y seguridad.

El ámbito de este artículo comprende los cambios al núcleo de Windows Vista™ únicamente, en concreto a Ntoskrnl.exe y sus componentes estrechamente asociados. Recuerde que existen muchos otros cambios considerables en Windows Vista que no están relacionados con el núcleo propiamente y que, por tanto, no se explicarán. Entre estos se incluyen las mejoras al shell (como la búsqueda integrada de escritorio), trabajo en red (como la nueva pila IPv6 y un servidor de seguridad bidireccional) y un modelo de gráficos de próxima generación (como Aero™ Glass, Windows® Presentation Foundation, el Administrador de ventanas del escritorio y el nuevo modelo de controlador de gráficos). Tampoco se han incluido los nuevos entornos de controlador de modo de núcleo y de modo de usuario de Windows (UMDF y KMDF), ya que se pueden instalar en niveles de versiones anteriores de Windows.

Cuenta de ciclos de la CPU

Windows Vista incluye varias mejoras en el área de procesos y subprocesos entre las que se incluyen el uso del contador de ciclos de CPU, para una asignación más justa de CPU, y el nuevo Servicio programador de aplicaciones multimedia (MMCSS) que ayuda a las aplicaciones de medios a proporcionar una reproducción libre de errores.

Todas las versiones de Windows NT® hasta e incluyendo Windows Vista programan una rutina de interrupción de temporizador de intervalos para que se ejecute aproximadamente cada 10 o 15 ms (milisegundos), en función de la plataforma de hardware. La rutina comprueba en qué subproceso se ha interrumpido y actualiza las estadísticas de uso de la CPU del subproceso como si dicho subproceso se hubiera ejecutado durante todo el intervalo, mientras que en realidad podría haber empezado a ejecutarse antes del final del intervalo. Es más, quizá se podría haber asignado técnicamente el subproceso a la CPU, pero no tuvo ocasión de ejecutarse, ya que se han ejecutado rutinas de interrupción de software y hardware en su lugar.

Si bien la cuenta basada en el reloj podría ser correcta para las herramientas de diagnóstico que informan sobre el uso de la CPU del proceso y los subprocesos, el uso de ese método por parte del programador de subprocesos puede provocar una asignación de CPU incorrecta. De forma predeterminada, en las versiones de cliente de subprocesos de Windows se permite ejecutar hasta 2 tics del reloj (6 en primer plano). Sin embargo, puede que el subproceso no disponga de tiempo prácticamente en la CPU o que disponga de hasta 6 tics (18 en primer plano), en función de su comportamiento y otras actividades del sistema.

En la Figura 1 se muestra la incorrección que se puede producir si dos subprocesos que tienen la misma prioridad pasan a estar disponibles para su ejecución al mismo tiempo. El subproceso A se ejecuta hasta el próximo vencimiento del intervalo de tiempo en el que el programador asume que se ha ejecutado para todo el intervalo y por tanto decide que el turno del subproceso A ha terminado. Además, el subproceso A se carga incorrectamente para la interrupción que se ha producido en su turno. En el intervalo siguiente, el programador escoge hacerse cargo del subproceso B y ejecutarlo para un intervalo completo.

Figura 1 Programación incorrecta de subprocesos

Figura 1** Programación incorrecta de subprocesos **

En Windows Vista, el programador utiliza el registro del contador de ciclos de los procesadores modernos para realizar un seguimiento preciso de cuántos ciclos de CPU ejecuta un subproceso. Al calcular cuántos ciclos puede ejecutar la CPU en un intervalo de reloj, puede repartir de forma más precisa los turnos en la CPU. Además, el programador de Windows Vista no cuenta la ejecución interrumpida en relación con el turno de un subproceso. Esto significa que en Windows Vista un subproceso siempre obtendrá por lo menos su turno en la CPU y nunca más de un intervalo de reloj de ejecución adicional, dando como resultado una mayor corrección y un comportamiento de aplicaciones más determinista. En la Figura 2 se muestra cómo Windows Vista responde a la situación mostrada en la Figura 1 proporcionándoles a ambos subprocesos por lo menos un intervalo de tiempo de ejecución.

Figura 2 Programación basada en ciclos de Windows Vista

Figura 2** Programación basada en ciclos de Windows Vista **

En la barra lateral "Watching Process CPU Usage" (en inglés) se muestra cómo puede supervisar el uso de ciclos de la CPU de procesos con la utilidad Explorador de procesos.

Servicio programador de aplicaciones multimedia

Los usuarios esperan que las aplicaciones multimedia, incluidos los reproductores de música y vídeo, ofrezcan una experiencia de reproducción perfecta. Sin embargo, la demanda de CPU por parte de otras aplicaciones que se ejecutan simultáneamente, como el antivirus, la indización del contenido o incluso el cliente de correo, puede dar como resultado desagradables interrupciones momentáneas. Para ofrecer una mejor experiencia de reproducción, Windows Vista presenta MMCSS para administrar las prioridades de CPU de los subprocesos multimedia.

Una aplicación multimedia, como el Reproductor de Windows® Media 11, se registra con MMCSS mediante API nuevas que indican sus características multimedia, que deben coincidir con una de las enumeradas por nombre bajo la siguiente clave del Registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Multimedia\SystemProfile\Tasks

Figura A** Visualización del tiempo de CPU y delta de ciclos en el Explorador de procesos **(Hacer clic en la imagen para ampliarla)

Figura 3 Definición de tareas de audio del programador de aplicaciones multimedia

Figura 3** Definición de tareas de audio del programador de aplicaciones multimedia **(Hacer clic en la imagen para ampliarla)

MMCSS, que se ha implementado en %SystemRoot%\System32\Mmcss.dll y se ejecuta en un proceso de host de servicios (Svchost.exe), tiene un subproceso de administración de prioridades que se ejecuta en prioridad 27. (Las prioridades de subprocesos oscilan entre 0 y 31.) Este subproceso aumenta la prioridad de los subprocesos multimedia registrados en el rango asociado con el valor de la categoría de programación de su clave del Registro de la tarea, según se incluye en la Figura 4. En Windows, las prioridades de subprocesos 16 y superiores se encuentran en un rango de prioridades en tiempo real y superiores al resto de subprocesos de un sistema (a excepción de los subprocesos de trabajadores del Administrador de memoria del núcleo, que se ejecutan en las prioridades 28 y 29). Sólo las cuentas administrativas, como la cuenta del sistema local en la que se ejecuta MMCSS, tienen el privilegio de prioridad de aumento necesario para establecer prioridades de subprocesos de tiempo real.

Figure 4 Prioridades de subprocesos de MMCSS

Programación de categorías Prioridad de subprocesos aumentada
High 23-26
Medium 16-23

Cuando reproduce un archivo de audio, el Reproductor de Windows Media registra las subprocesos de la tarea de audio y, al reproducir un vídeo, registra los subprocesos de tareas de reproducción. El servicio MMCSS aumenta todos los subprocesos que han indicado que están proporcionando una secuencia al mismo tiempo que se están ejecutando en el proceso propietario de la ventana en primer plano y al tiempo que tienen el valor BackgroundOnly establecido como True en su clave de definición de la tarea.

Pero si bien MMCSS quiere ayudar a que los subprocesos multimedia obtengan el tiempo de CPU que necesiten, también quiere asegurarse de que otros subprocesos obtengan por lo menos algún tiempo de CPU para que el sistema y otras aplicaciones sigan respondiendo. Por tanto, MMCSS reserva un porcentaje de tiempo de CPU para otra actividad, tal y como se indica en el siguiente valor del Registro:

HKLM\Software\Microsoft\Windows NT\Currentversion\Multimedia\SystemProfile\SystemResponsiveness 

De forma predeterminada, esto supone el 20 por ciento; MMCSS supervisa el uso de la CPU para asegurarse de que los subprocesos multimedia no aumenten más de 8 ms sobre 10 ms si otros subprocesos quieren utilizar la CPU. Para que los subprocesos multimedia no ocupen esos 2 ms restantes, el programador deja caer sus prioridades en un rango de 1-7.

Puede consultar cómo aumenta MMCSS la prioridad de subprocesos en la barra lateral "Watching MMCSS Priority Boosting" (en inglés).

Vínculos simbólicos basados en archivos

Entre los cambios relacionados con E/S de Windows Vista se incluyen los vínculos simbólicos basados en archivos, un procesamiento más eficiente de terminación de E/S, un soporte técnico completa para la cancelación de E/S y E/S con prioridades.

Una característica del sistema de archivos que muchos han echado de menos de NTFS, el vínculo de archivo simbólico (o, como se ha llamado en Unix, el vínculo lógico) finalmente llega a Windows Vista. La versión Windows 2000 de NTFS introdujo los vínculos de directorio simbólicos, llamados "unión de directorio", que le permiten crear un directorio que señale a un directorio diferente, pero hasta la versión de Windows Vista, NTFS sólo ha sido compatible con los vínculos físicos de archivos.

Una diferencia mayor en la forma en que Windows resuelve los vínculos simbólicos y las uniones de directorio es el lugar donde tiene lugar el procesamiento. Windows procesa los vínculos simbólicos en el sistema local, aunque hagan referencia a una ubicación en un servidor de archivos remoto. Windows procesa las uniones de directorio que hacen referencia a un servidor de archivos remoto en el propio servidor. Los vínculos simbólicos de un servidor pueden, por tanto, hacer referencia a ubicaciones a las que sólo se puede tener acceso desde un cliente, como otros volúmenes de cliente, mientras que las uniones de directorio no. Para solucionar esto, Windows Vista es compatible con el nuevo tipo de vínculo simbólico tanto para archivos como para directorios.

Muchos comandos del sistema de archivos han sido actualizados para entender las implicaciones de los vínculos simbólicos. Por ejemplo, el comando Delete sabe cómo no seguir los vínculos, lo que daría como resultado la supresión del objetivo, pero en su lugar se elimina el vínculo. Sin embargo, debido a que no todas las aplicaciones pueden tratar los vínculos simbólicos correctamente, la creación de un vínculo simbólico requiere el nuevo privilegio de creación de vínculos simbólicos que sólo tienen de forma predeterminada los administradores.

Puede crear un vínculo simbólico desde el símbolo del sistema con el comando Mklink. El comando de directorio integrado del símbolo del sistema identifica un vínculo simbólico etiquetándolo como <SYMLINK> y le muestra el objetivo entre paréntesis, como se indica en la Figura 5. El Explorador de Windows distingue también los vínculos simbólicos y los muestra con una flecha de acceso directo. Puede consultar el objetivo de un vínculo en el Explorador agregando la columna de objetivo del vínculo a la ventana de exploración. Observación del aumento de prioridad de MMCSS

Puede presenciar el aumento de subprocesos que le aplica el servicio de MMCSS a los subprocesos del Reproductor de Windows Media mediante la reproducción un clip de vídeo o audio, ejecutando el Monitor de rendimiento, configurando la escala gráfica en 31 (la prioridad de subproceso más alta de Windows) y agregando el contador de prioridad actual a todas las instancias de los objetos de subprocesos del Reproductor de Windows Media (Wmplayer.exe) en la pantalla. Uno o más subprocesos se ejecutarán con la prioridad 21.

Figura B** El aumento de prioridades de subprocesos para el Reproductor de Windows Media **(Hacer clic en la imagen para ampliarla)

Figura 5 Uso de Mklink para crear un vínculo simbólico

Figura 5** Uso de Mklink para crear un vínculo simbólico **(Hacer clic en la imagen para ampliarla)

Cancelación y terminación de E/S

Existe cierto número de cambios camuflados en el sistema de E/S que pueden mejorar el rendimiento de las aplicaciones de servidor. Estas aplicaciones utilizan comúnmente un objeto de sincronización denominado "puerto de terminación" para esperar a que finalicen las solicitudes de E/S asincrónicas. Antes de Windows Vista, cuándo se finalizaba dicha E/S, el subproceso que publicó la E/S ejecutaría el trabajo de terminación de E/S, provocando un cambio en el proceso al que pertenece el subproceso e interrumpiendo cualquier otra cosa que pasara. A continuación, el sistema de E/S actualizaría el estado del puerto de terminación para despertar un subproceso en espera de este cambio.

En Windows Vista, el procesamiento de terminación de E/S se lleva a cabo no necesariamente por el subproceso que publicó la E/S, sino por el que esté en espera de que despierte el puerto de terminación. Este cambio relativamente secundario evita la programación innecesaria de subprocesos y conmutadores de contexto que puedan degradar el rendimiento general del sistema y de la aplicación. Para mejorar el rendimiento aún más, un servidor puede recuperar los resultados de múltiples operaciones de E/S de una terminación en una sola solicitud, evitando así las transiciones al modo de núcleo.

Probablemente el cambio más visible en el sistema de E/S desde la perspectiva del usuario final es el soporte técnico de Windows Vista para la cancelación de operaciones sincrónicas de E/S. Si ha utilizado alguna vez un comando Net View o ha intentado tener acceso a un recurso compartido de un sistema remoto sin conexión que utilice Windows XP o Windows Server® 2003, ha experimentado los problemas con las operaciones de E/S que no se pueden cancelar: El explorador de archivos o comandos no responderá hasta que caduque el tiempo de espera de la red. Una aplicación no tiene otra opción que esperar a que la operación genere un error, ya que no hay manera de indicarle al controlador de dispositivo que ejecuta la E/S que deje de preocuparse por ésta.

En Windows Vista la mayoría de las operaciones de E/S pueden ser canceladas, incluyendo la E/S del archivo abierto que utilizan el explorador y Net View. Sin embargo, las aplicaciones se tienen que actualizar para responder a solicitudes de usuario final de cancelación de E/S y muchas de las utilidades de Windows Vista que interactúan con dispositivos que tiene tiempos de espera tienen el soporte técnico necesario. Los cuadros de diálogo para abrir y guardar archivos que se utilizan prácticamente en todas las aplicaciones de Windows, incluyendo aplicaciones de terceros, por ejemplo, ahora habilitan el botón de cancelación al tratar de mostrar el contenido de una carpeta. El comando Net cancela también su E/S sincrónica cuando presione Ctrl + C.

Puede consultar las prestaciones de la cancelación de E/S abriendo el símbolo del sistema en Windows Vista y escribiendo:

net view (\\nonexistentmachine)

El comando se colgará mientras Windows trata de contactar con el sistema inexistente, pero puede escribir Ctrl + C para terminarlo. En Windows XP, Ctrl + C no tiene efecto y el comando no se devuelve hasta que transcurra el tiempo de espera de la operación de red.

Otro tipo de E/S que ha causado problemas a los usuarios en versiones anteriores de Windows eran las que no podían cancelar correctamente los controladores de dispositivos, ya que no existía forma fácil de que supieran que debían hacerlo. Si ha terminado alguna vez un proceso, pero posteriormente observó cómo se demoraba en herramientas de visualización de procesos, ha presenciado un controlador de dispositivo que genera un error al responder a una finalización de proceso y a una cancelación de E/S publicada por el proceso que no se había completado. Windows no puede realizar la limpieza de procesos final hasta que toda la E/S del proceso se haya terminado o cancelado. En Windows Vista, los controladores de dispositivos registran fácilmente la notificación de finalizaciones de procesos y de este modo la mayoría de los problemas de procesos irresolubles desaparecen.

Prioridad de E/S

Si bien Windows siempre ha sido compatible con la priorización del uso de la CPU, no ha incluido el concepto de prioridad de E/S. Sin prioridad de E/S, las actividades en segundo plano, como la indización de búsquedas, la exploración de virus y la desfragmentación de disco, pueden afectar gravemente a la receptividad de las operaciones en primer plano. Un usuario que inicia una aplicación o que abre un documento mientras otro proceso realiza E/S de disco, por ejemplo, sufre demoras, como las esperas de tareas en primer plano para el acceso a disco. La misma interferencia afecta también a la reproducción de transmisión por secuencias del contenido multimedia, como canciones de un disco duro.

Windows Vista introduce dos tipos nuevos de priorización de E/S para que las operaciones de E/S en primer plano tengan preferencia: prioridad en operaciones de E/S individuales y reservas de ancho de banda de E/S. El sistema de E/S de Windows Vista incluye internamente soporte técnico para cinco prioridades de E/S, como se muestra en la Figura 6, pero sólo se utilizan cuatro de las prioridades (las versiones futuras de Windows pueden ser compatibles con High).

Figure 6 Prioridades de E/S de Windows Vista

Prioridad de E/S Uso
Critical Administrador de memoria
High No usado
Normal Prioridad predeterminada
Low Prioridad de tarea predeterminada
Very Low Actividad en segundo plano

E/S tiene una prioridad predeterminada Medium y el Administrador de memoria utiliza Critical cuando quiere escribir datos sucios de la memoria fuera al disco en situaciones de memoria baja para dejar espacio en la RAM para otros datos y código. El Programador de tareas de Windows establece la prioridad de E/S para tareas que tengan la prioridad de tarea predeterminada en Low y la prioridad especificada por aplicaciones escritas para Windows Vista y que realizan procesamiento en segundo plano en Very Low. Todas las operaciones en segundo plano de Windows Vista, incluyendo la exploración de Windows Defender y la indización de búsquedas del escritorio, utilizan una prioridad de E/S muy baja. Prioridad de E/S muy baja

El Monitor de procesos, un sistema de archivos en tiempo real y la utilidad de supervisión del Registro, de Sysinternals, reúnen información detallada para las operaciones del sistema de archivos de escritura y lectura, incluyendo sus prioridades de E/S en Windows Vista. La línea resaltada muestra un ejemplo de una E/S de prioridad muy baja publicada por SuperFetch (que trataré en mi siguiente entrega).

Figura C** Visualización de prioridad de E/S muy baja en el Monitor de procesos **(Hacer clic en la imagen para ampliarla)

El controlador de dispositivo de la clase de almacenamiento del sistema (%SystemRoot%\System32\Classpnp.sys) implanta las prioridades de E/S y de este modo se aplican automáticamente a las E/S dirigidas a la mayoría de los dispositivos de almacenamiento. La clase y otros controladores de almacenamiento insertan E/S medias por delante de las que son bajas y muy bajas en sus colas, aunque publican por lo menos una E/S en espera con prioridad baja o muy baja por segundo, de forma que los procesos en segundo plano puedan hacer progresos. La lectura de datos con una E/S muy baja también provoca que el Administrador de caché escriba inmediatamente modificaciones en el disco en vez de hacerlo más tarde y que eluda su lógica de leer hacia adelante para las operaciones de lectura que, de otro modo, se leerían preventivamente desde el archivo al que se tiene acceso. Consulte en la barra lateral "Seeing Very Low I/O Priority" (en inglés) para obtener un ejemplo de una prioridad de E/S muy baja con la utilidad Monitor del proceso.

La compatibilidad de reserva de ancho de banda de Windows Vista resulta práctica para las aplicaciones de reproductor de medios. El Reproductor de Windows Media lo utiliza, junto con aumentos de prioridad de MMCSS, para proporcionar una reproducción casi libre de errores del contenido local. Una aplicación de reproducción de medios le solicita al sistema de E/S que le garantice la capacidad de leer datos a una tasa especificada y, si el dispositivo puede proporcionar los datos en la tasa solicitada y las reservas existentes lo admiten, orienta a la aplicación en cuanto a qué velocidad se deben publicar las E/S y qué tamaño deberían tener las E/S. El sistema de E/S no atenderá otras E/S a menos que pueda satisfacer los requisitos de las aplicaciones que han realizado reservas en el dispositivo de almacenamiento objetivo.

Un cambio final en el sistema de E/S que merece ser mencionado es el tamaño de las operaciones de E/S. Desde la primera versión de Windows NT, el Administrador de memoria y el sistema de E/S han limitado la cantidad de datos procesados por una solicitud de E/S de almacenamiento individual a 64 KB. Por tanto, incluso si una aplicación publica una solicitud de E/S mucho más grande, se divide en solicitudes individuales que tienen un tamaño máximo de 64 KB. Cada E/S asume una sobrecarga de transiciones en modo de núcleo e inicia una transferencia de E/S en el dispositivo de almacenamiento, de modo que en Windows Vista los tamaños de solicitud de E/S de almacenamiento ya no se tapan. Se han modificado varios componentes del modo de usuario de Windows Vista para aprovecharse del soporte técnico de E/S más grandes, incluyendo la funcionalidad de copia del Explorador y el comando Copy del símbolo del sistema, que ahora publica una E/S de 1 MB.

Próximamente

Ahora ya ha visto dos áreas en las que el núcleo de Windows Vista se ha mejorado. Puede obtener información exhaustiva adicional en la siguiente edición de mi libro, Windows Internals (con David Solomon como coautor), cuyo lanzamiento está previsto al mismo tiempo que la siguiente versión de Windows Server, con el nombre de código de "Longhorn". En la próxima entrega, seguiré explicando el nuevo núcleo mediante el análisis de la administración de memoria, junto con el encendido y apagado del sistema.

Mark Russinovich es un empleado técnico de Microsoft perteneciente a la división de servicios y plataformas. Es coautor de Microsoft Windows Internals (Microsoft Press, 2004) y un frecuente orador en conferencias de desarrolladores y TI. Se unió a Microsoft con la adquisición reciente de la compañía que cofundó, Winternals Software. También creó Sysinternals, donde publicó las utilidades del Explorador de procesos, Filemon y Regmon

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.