Como sugiere el título, tengo un problema para obtener la dirección física de una dirección virtual.Linux (Ubuntu), lenguaje C: Traducción de direcciones virtuales a físicas
Déjenme explicar: Dada una declaración de variables en el espacio de proceso, ¿cómo puedo derivar su dirección física mapeada por el sistema operativo?
Me he tropezado con algunas llamadas a los sistemas /asm/io.h
donde se define la función virt_to_phys()
; sin embargo, parece que este encabezado está desactualizado y no puedo encontrar una solución alternativa.
Sin embargo; io.h
está disponible en: /usr/src/linux-headers-2.6.35-28-generic/arch/x86/include/asm/
. Mi kernel actual es 2.6.35-28
, pero io.h
no está incluido en /usr/include/asm/
?
Por lo tanto, para reiterar: necesito una forma de obtener la dirección física de virtual. Preferiblemente derivado de dentro de la aplicación en tiempo de ejecución. Pero incluso una solución de usar un monitor de /proc/PID/maps
servirá.
Cualquier idea o comentario sería muy apreciado.
EDITAR Después de hacer un poco de investigación sobre este tema he encontrado algo que ayuda en este sentido.
Resulta que esto es más que factible, aunque requiere un poco de solución. Aquí está un link a una aplicación simple que analiza las páginas mapeadas actuales. El archivo en cuestión resulta ser (un archivo binario) /proc/pid/pagemap
(contiene la asignación física de páginas virtuales). De todos modos, el código en ese enlace se puede modificar para servir como una aplicación de monitor o algo así.
Necesitaba la dirección física para la simulación de caché.
¡Gracias a todos por la ayuda y respuestas!
¿Para qué lo necesitas? –