Ejercicio 1 · Sistemes Operatius I UB Examen: Memoria y Concurrencia
Tema: Procesos y comunicación entre procesos · Del examen Examen: Memoria y Concurrencia
Enunciado
Ejercicio 1. Comunicación entre procesos y gestión de memoria compartida
A partir del análisis de un programa en C donde interactúan un proceso padre y un proceso hijo para transferir información, responda a los siguientes apartados:
a)
Indique el propósito de la macro o constante FILEPATH (definida como /tmp/papa1.msg) y detalle su rol en el funcionamiento global del programa.
b)
Describa la función de cada uno de los parámetros empleados en la llamada al sistema:
mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
(considerando SIZE = 4096).
c)
Enumere y clasifique los tres mecanismos de comunicación entre procesos (IPC) que se ponen en práctica en la aplicación, citando las llamadas al sistema correspondientes.
d)
Explique la finalidad específica de la sentencia strcpy(addr, buf); dentro del flujo de intercambio de datos.
e)
Describa el papel de la función pause() en el proceso receptor (hijo) y cómo interactúa con el subsistema de señales. ¿Qué impacto tendría sustituir dicha función por un bucle de espera activa (por ejemplo, while(1);)?
f)
Razone por qué son indispensables las tareas de liberación de recursos ejecutadas por el padre ( munmap, close, unlink) y qué consecuencias acarrea omitir la eliminación del archivo con unlink(FILEPATH).

Solución
Según los criterios oficiales de corrección
a. Indique el propósito de la macro o constante FILEPATH (definida como /tmp/papa1.msg) y detalle su rol en el funcionamiento global del programa.
Solución: Representa la ruta en el sistema de ficheros (/tmp/papa1.msg) del archivo auxiliar que da soporte a la región de memoria compartida. Se crea/abre en el sistema, se proyecta mediante mmap para que ambos procesos accedan al mismo segmento de datos físico en RAM y, tras culminar la transferencia, se desvincula para no dejar archivos residuales en disco.
b. Describa la función de cada uno de los parámetros empleados en la llamada al sistema: mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); (considerando SIZE = 4096).
Solución: - NULL (addr): Deja en manos del núcleo la elección de la dirección de memoria virtual donde ubicar la proyección. - SIZE (4096 bytes): Define la extensión exacta del área de memoria a reservar (típicamente una página de memoria del sistema). - PROT_READ | PROT_WRITE: Establece los permisos de acceso a la página proyectada, posibilitando tanto lectura como escritura. - MAP_SHARED: Dictamina que las modificaciones en dicha memoria sean visibles de inmediato para el resto de procesos mapeados al mismo objeto y se sincronicen con el archivo. - fd: Descriptor obtenido tras abrir el archivo en disco. - 0 (offset): Desplazamiento desde el que comienza el mapeo (principio del archivo).
c. Enumere y clasifique los tres mecanismos de comunicación entre procesos (IPC) que se ponen en práctica en la aplicación, citando las llamadas al sistema correspondientes.
Solución: - Tuberías anónimas (Pipes): Creación mediante pipe(pipefd); transmisión de datos con write(pipefd[1], msg, strlen(msg)); y recepción en el destino con read(pipefd[0], buf, sizeof(buf)). - Memoria compartida (archivos mapeados): Proyección en memoria virtual con mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0) y escritura directa en memoria con strcpy(addr, buf). - Señales: Asociación del manejador mediante signal(SIGTERM, handle_sigterm) y emisión de la señal de aviso con kill(pid, SIGTERM).
d. Explique la finalidad específica de la sentencia strcpy(addr, buf); dentro del flujo de intercambio de datos.
Solución: Vuelca la cadena leída de la tubería (almacenada temporalmente en el buffer local buf) a la dirección base addr de la región compartida. De este modo, la información pasa a estar accesible directamente en memoria para el otro proceso involucrado.
e. Describa el papel de la función pause() en el proceso receptor (hijo) y cómo interactúa con el subsistema de señales. ¿Qué impacto tendría sustituir dicha función por un bucle de espera activa (por ejemplo, while(1);)?
Solución: Deja al proceso en estado suspendido o bloqueado a la espera de que llegue una señal que active su manejador (en este caso, SIGTERM enviada por el padre), consumiendo cero ciclos de CPU. Reemplazarlo por una espera activa (como while(1);) saturaría un núcleo del procesador al 100%, degradando sustancialmente el rendimiento del sistema sin aportar ventajas funcionales.
f. Razone por qué son indispensables las tareas de liberación de recursos ejecutadas por el padre (munmap, close, unlink) y qué consecuencias acarrea omitir la eliminación del archivo con unlink(FILEPATH).
Solución: munmap(addr, SIZE) disuelve el enlace entre la memoria virtual del proceso y el espacio mapeado; close(fd) libera el descriptor de archivo de la tabla del proceso; y unlink(FILEPATH) suprime la entrada de directorio del fichero. Si se omite unlink, el archivo temporal perdura en el almacenamiento secundario, ocupando espacio indefinidamente y pudiendo provocar colisiones de nombres o inconsistencias en ejecuciones posteriores.
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
Ejercicio 1 - Gestión de procesos · Segundo Parcial de Sistemas Operativos ›