Compartir a través de


Espacio de usuario y espacio del sistema

Windows proporciona a cada aplicación en modo de usuario un bloque de direcciones virtuales. Esto se conoce como espacio de usuario de esa aplicación. La aplicación no puede acceder directamente al otro bloque grande de direcciones, conocido como espacio del sistema o espacio de kernel.

Cuando WinDbg o CDB establece un punto de interrupción en el espacio del usuario, este punto de interrupción se establece en la dirección especificada en el espacio de usuario de un único proceso. Durante la depuración en modo de usuario, el proceso actual determina el significado de las direcciones virtuales. Para obtener más información, consulte Control de procesos y subprocesos.

En el modo kernel, puede establecer puntos de interrupción en el espacio de usuario con los comandos bp, bu y ba o con el cuadro de diálogo Puntos de interrupción . Primero debe usar el contexto de proceso para especificar el proceso en modo de usuario que posee ese espacio de direcciones mediante .process /i (o un punto de interrupción específico del proceso en alguna función de espacio kernel) para cambiar el destino al contexto de proceso correcto.

Los puntos de interrupción del espacio de usuario siempre están asociados al proceso cuyo contexto de proceso estaba activo cuando se establecieron los puntos de interrupción. Si un depurador en modo de usuario está depurando este proceso y si un depurador de kernel está depurando el equipo en el que se ejecuta el proceso, este punto de interrupción se divide en el depurador en modo de usuario, aunque el punto de interrupción se estableció realmente desde el depurador de kernel. Puede interrumpir el sistema desde el depurador de kernel en este momento o usar el comando .breakin (Interrumpir al depurador de kernel) desde el depurador en modo de usuario para transferir el control al depurador de kernel.

Determinar el intervalo de espacio de usuario y espacio del sistema

Si necesita determinar la extensión del espacio de usuario y el espacio del sistema en el equipo de destino, puede usar el comando dp (Memoria para mostrar) de un depurador de kernel para mostrar la variable global de Windows MmHighestUserAddress. Esta variable contiene la dirección de la parte superior del espacio de usuario. Dado que las direcciones de espacio del sistema siempre son más altas que las direcciones de espacio de usuario, este valor permite determinar si alguna dirección determinada está en el espacio de usuario o en el espacio kernel.

Por ejemplo, en un equipo de destino de 32 bits con un procesador x86 y parámetros de arranque estándar, este comando mostrará el resultado siguiente:

kd> dp nt!mmhighestuseraddress L1 
81f71864  7ffeffff 

Esto indica que el espacio de usuario va desde la dirección 0x00000000 hasta 0x7FFEFFFF y, por tanto, el espacio del sistema va desde 0x80000000 hasta la dirección más alta posible (que es 0xFFFFFFFF en una instalación estándar de Windows de 32 bits).

Con un equipo de destino de 64 bits, se producirán valores diferentes. Por ejemplo, este comando podría mostrar lo siguiente:

0: kd> dp nt!mmhighestuseraddress L1 
fffff800`038b4010  000007ff`fffeffff 

Esto indica que el espacio de usuario oscila entre 0x00000000'0000000000 a 0x000007FF'FFFEFFFF. Por lo tanto, el espacio del sistema incluye todas las direcciones de 0x00000800'000000000 hacia arriba.

Para obtener más información sobre la administración de memoria de Windows, vea Microsoft Windows Internals by David Salomón y Mark Russinovich (4ª edición, Microsoft Press, 2005).