SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: marcialre en Domingo 25 de Octubre de 2009, 00:13
-
Linux almacena la información relativa al proceso en una estructura task_struct. La intuición me dice que la ubicación de dicha estructura se encuentra en el espacio de direcciones del núcleo para evitar errores y manipulaciones indebidas por parte del proceso. ¿La estructura task_struct de un proceso en que espacio de direcciones se encuentra, en el del proceso o en el de usuario?
Gracias.
-
Seguramente este en modo Kernel.
http://kernelbook.sourceforge.net/kerne ... rrent.html (http://kernelbook.sourceforge.net/kernel-hacking.html/routines-current.html" onclick="window.open(this.href);return false;)
-
Si que lo está... La idea era obtener el puntero mm_struct *mm (entre otras cosas) para conocer el mapa de memoria del proceso.
Por ahora la mejor opción es leer /proc/self/maps. Seguiré investigando.
EI: juntando mensajes.
La estructura task_struct (<2.6) o thread_info (=2.6) se encuentra al final de al pila del núcleo, es decir, no es accesible en modo usuario. Para acceder a ella no queda más remedio que programar una llamada al sistema. Una cosa es no hacer uso de la librería estándar y limitarse a las llamadas al sistema y otra muy diferente es añadir llamadas al sistema... Portabilidad = 0.
Gracias por la ayuda.
-
O escribir un modulo de modo Kernel, pero no sabemos para que querias acceder a la estructura, tal vez exista servicios que provean parte de la informacion que contiene la estructura ... *NIX no es lo mio :comp:
-
No tiene muchas utilidades acceder a la estructura task_struct o hacerse un mapa de la memoria (excepto en depuradores). Como bien dices en el otro hilo, un mecanismo de protección de memoria en el espacio de usuario puede ocultar las causas de los errores y hacer muy difícil la depuración. Mis preguntas son simplemente para saber algo más, curiosidad.
Gracias otra vez.