[C con Clase] Memoria en paráemtros de execv...
Gilberto Cuba Ricardo
gilbert en hlg.rimed.cu
Mie Abr 14 01:26:41 CEST 2010
Hola Steven Davidson,
Steven Davidson escribió:
> Supongo que un depurador te puede ayudar, pero ten presente que
> 'execv()' es una función del sistema operativo y hace uso de otras
> funciones del sistema usando la memoria del sistema. No te puedo
> garantizar que el depurador tenga permiso para entrar en la memoria del
> sistema, pero sospecho que sí. ¡Inténtalo! :)
Es un buen reto, pero lo intentaré en mi modesto Debian con el famoso
gdb.
> Por otra parte, si quieres, te puedo dar el algoritmo de "exec", bajo
> UNIX. Verás que se libera toda la memoria virtual del programa "antiguo"
> y se crean nuevas regiones de memoria virtual para la nueva imagen: el
> ejecutable.
Eso es lo que nunca quisiera hacer, dejarle el trabajo sucio al
sistema operativo, porque uno nunca sabe en qué pudieran caer y las
consecuencias funestas que pudiera acarrear algún día con las nuevas
versiones. Además me hace sentir bien liberar la memoria que yo
reservé. :)
> Sí. Lo que hacer "exec" es copiar estos parámetros de la memoria virtual
> del proceso a la memoria virtual del "kernel" (el núcleo del sistema
> operativo). A veces se usa la pila de datos del S.O., pero otras veces
> se puede crear otra región de memoria virtual del sistema. La cuestión
> es que se crea una copia fuera del proceso a reemplazar.
> Cuando el S.O. crea nuevas regiones de memoria para el programa actual,
> entonces se vuelve a copiar los parámetros de "exec" de la memoria del
> sistema a la del programa.
> Si vas de un sistema UNIX a otra, no hay ningún problema al usar "exec".
> Eso sí, deberías tener presente que hay otros recursos que un programa
> puede crear fuera de su "alcance". Por lo tanto, cualquier recurso que
> existe fuera de la memoria del proceso existirá cuando se ejecute
> "exec". Esto es porque "exec" sólo afecta el texto (las instrucciones) y
> los datos (variables). Esto se puede hacer fácilmente en UNIX, porque el
> sistema operativo mantiene esta información en regiones separadas en
> memoria. Es decir, las instrucciones del programa están en una región de
> memoria y las variables del programa en otra. Por lo tanto, otros
> recursos que no pertenezcan a estas regiones de memoria no son afectados
> por "exec".
Todos los días se aprende algo nuevo.
> Me temo que no conozco Boost, por lo que no puedo ayudarte en esto. La
> verdad es que debería ponerme a aprenderlo porque pertenece al nuevo
> estándar de ANSI C++.
Creo que muchos de los que utilizamos esta gigantezca biblioteca te lo
agradeceríamos, porque tendríamos respuestas sabias. Así que nunca es
tarde si la dicha es buena, y más si el nuevo C++ incluirá muchas
cosas de ella.
> Espero que lo anterior te aclare el tema.
Ya quisiera yo que en mi profesión de profesor, se me diera tan buena
en las explicaciones como se le da a usted. Suficientemente aclarada.
> Steven
--
Salu2,
Gilbert
Más información sobre la lista de distribución Cconclase