Guía de seguimiento dinámico de Solaris

Variables externas

D utiliza el carácter de comilla invertida (`) como un operador de ámbito especial para acceder a las variables que están definidas en el sistema operativo y no en el programa escrito en D. Por ejemplo, el núcleo de Solaris contiene una declaración escrita en C de un valor ajustable del sistema llamado kmem_flags para activar las funciones de depuración del asignador de memoria. Consulte Solaris Tunable Parameters Reference Manual para obtener más información sobre kmem_flags. Este valor ajustable se declara como una variable escrita en C en el código fuente del núcleo de la siguiente forma:

int kmem_flags;

Para acceder al valor de esta variable en un programa escrito en D, use la notación:

`kmem_flags

DTrace asocia cada símbolo del núcleo con el tipo usado para el símbolo en el código C del sistema operativo correspondiente, lo que proporciona un acceso sencillo basado en el código a las estructuras de datos nativas del sistema operativo. Para usar las variables externas del sistema operativo, necesitará acceder al código fuente del sistema operativo correspondiente.

Al acceder a las variables externas desde un programa escrito en D, se accede a los detalles de implementación internos de otro programa como, por ejemplo, el núcleo del sistema operativo o sus controladores de dispositivo. Estos detalles de implementación no constituyen una interfaz estable de la que haya que fiarse. Todos los programas en D que escriba y que dependan de estos detalles pueden dejar de funcionar la siguiente vez que actualice el software relacionado. Por esta razón, las variables externas las usan normalmente los desarrolladores de controladores de dispositivos y núcleos y el personal de servicio con objeto de depurar los problemas de rendimiento o de funcionalidad que se generan al usar DTrace. Para obtener más información acerca de la estabilidad de los programas escritos en D, consulte el Capítulo 39Estabilidad.

Los nombres de símbolo del núcleo se guardan en un espacio de nombre separado de la variable de D y los identificadores de función para que no tenga que preocuparse acerca de los conflictos de nombres con las variables escritas en D. Cuando se usa un acento grave como prefijo de una variable, el compilador D busca los símbolos del núcleo conocidos en orden usando la lista de módulos cargados para buscar una definición de variables coincidente. Dado que el núcleo de Solaris admite módulos cargados dinámicamente con espacios de nombre de símbolos separados, el mismo nombre de variable se puede usar más de una vez en el núcleo del sistema operativo activo. Puede resolver estos conflictos de nombres especificando el nombre del módulo del núcleo a cuya variable debe accederse antes de asignar un acento grave al nombre del símbolo. Por ejemplo, cada módulo del núcleo cargable proporciona habitualmente una función _fini(9E), por lo que para hacer referencia a la dirección de la función _fini proporcionada por el módulo del núcleo llamado foo, debería escribir:

foo`_fini

Puede aplicar cualquiera de los operadores D a variables externas, excepto aquellos que modifiquen valores, según las reglas habituales para los tipos de operando. Cuando se inicia DTrace, el compilador D carga el conjunto de nombres de variable correspondientes a los módulos del núcleo activo, por lo que las declaraciones de estas variables no se requieren. No se puede aplicar ningún operador a una variable externa que modifique su valor como = o +=. Por motivos de seguridad, DTrace impide que se dañe el estado del software que se está observando.