ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Procesos Linux - exec y fork

tustus666Ensayo12 de Julio de 2014

913 Palabras (4 Páginas)225 Visitas

Página 1 de 4

Procesos Linux - exec y fork

En esta entrada me gustaría hablar acerca de la creación de procesos con C cuando trabajamos con Linux. En mi caso trabajo con Debian. Debo dejar claro que hablamos de PROCESOS y no de hilos. Acerca de los hilos hablaré en entradas posteriores. En esta entrada hablaré acerca de como se crean nuevos procesos mediante código en C. De las dos posibilidades que existen. No me pararé en exceso a explicar en detalle qué es un proceso, cambios de contexto de procesos, la tabla de procesos, imagen de memoria, o el ciclo de vida de un proceso. Estos temas cabe mencionarlos, pero como ya he dicho no haré una explicación detallada acerca de ellos.

Para comenzar me gustaría hacer una explicación acerca de los procesos. Comenzando por la definición de un proceso: "Un proceso es un programa en ejecución". El proceso esta formado por el código del programa y el conjunto de datos asociados a la ejecución del programa. El proceso además posee una imagen de memoria, esto es el espacio de memoria en el que esta autorizado. La imagen de memoria puede estar referida en memoria virtual o memoria física. Además en cuanto al ciclo de vida hablaré acerca del que se tiene en cuenta en la planificación a corto plazo (ciclo de vida simple). Esta planificación es en la que se decide el siguiente proceso a ejecutar (FIFO, Round Robin, SJF). Este ciclo de vida posee 4 estados: Listo para ejecutarse, en ejecución, bloqueado y fin.

Imagen: Basada en diapositivas Sistemas Operativos UC3M. TEMA 2

Podemos tener en ejecución tantos procesos como procesadores tenga nuestro equipo. El fin de tiempo en ejecución lo decide el algoritmo de planificación que utilice nuestro sistema operativo. Este expulsión del procesador provoca un cambio de contexto. Ya vimos en una entrada anterior que nuestro código en ensamblador tiene mas instrucciones, por tanto un cambio de contexto se puede producir en mitad de una instrucción (por ejemplo una suma).

Una vez visto esto compredemos algo mejor el funcionamiento de los procesos en nuestro sistema. Aunque esta sea una imagen demasiado general y alejada siempre es conveniente tener una mínima idea acerca de esto (el tema del cambio de contexto es importante en la concurrencia). En esta entrada estamos hablando de procesos pesados (programa con un solo hilo de ejecución), pues en procesos ligeros la cosa cambia.

Los nuevos procesos obtienen los recursos directamente del sistema operativo o el proceso padre debe compartir recursos. Acerca de los nuevos procesos en Linux, debemos diferenciar entre: crear un nuevo proceso y ejecutar nuevos programas.

La llamada al sistema que empleamos para crear un nuevo proceso se denomina fork(). La llamada fork() crea una copia casi identica del proceso padre (se copia todo el código) y continúan ejecutandose en paralelo. El proceso padre recibe de fork() el pid del hijo, mientras que el hijo recibe un 0. El hijo además hereda recursos del padre (ficheros, abiertos, estado de las variables, etc...) , sin embargo hay otros recursos que no se heredan como por ejemplo las señales pendientes, devuelve -1 en caso de error. La función esta declarada tal que así: size_t fork(void);

Imagen: diapositivas de Sistemas Operativos UC3M. TEMA 2

Por otra parte tenemos la función exec(). Esta función cambia la imagen del proceso actual. Lo que realiza es sustituir la imagen de memoria del programa por la de un programa diferente. Esta función normalmente la invocaremos en un proceso hijo previamente generado por fork(). Existen diferentes funciones para exec, sus declaraciones son:

int execl(const char *path, const char *arg, ...);

int execv(const char* path, char* const argv[]);

int execve(const char* path, char* const argv[], char* const envp[]);

int execvp(const char *file,

...

Descargar como (para miembros actualizados) txt (6 Kb)
Leer 3 páginas más »
Disponible sólo en Clubensayos.com