[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