Desarrollo de trabajo practico de concurrencias
Enviado por lonino07 • 25 de Septiembre de 2020 • Documentos de Investigación • 533 Palabras (3 Páginas) • 107 Visitas
Desarrollo de trabajo practico de concurrencias:
Alumno: Alarcón Luis Maximiliano
- ¿Para qué se utiliza la clave al solicitar memoria compartida?
La clave se usa ya que la dirección de memoria del segmento asignado no se puede saber al momento de programar, por lo cual no se la puede usar en tiempo de programación para indicar a los procesos dónde va a estar la memoria compartida. Todos los programas o procesos que llamen a shmget con la misma clave, si tienen permiso, van a acceder al segmento deseado sin necesidad de conocer de antemano la dirección.
Se puede pensar en la memoria compartida como un cuarto, o un cajón, o un buzón, y la clave es la llave para acceder.
- ¿Qué contiene el segundo parámetro de la invocación a la llamada al sistema shmget? ¿En qué unidades está?
#define CANTIDAD_MEMORIA 4
shmget( clave, CANTIDAD_MEMORIA, IPC_CREAT | 0660 ))
El segundo Parámetro de la invocación shmget contiene un entero que es 4 y en la unidad en la que se encuentra es en bytes.
- ¿Qué nombre tiene la variable que usamos para tratar la memoria compartida como un entero? ¿Qué tipo de variable es?
La variable puntero “contador” tipo entero, es la que usamos para tratar la memoria compartida como un entero.
b) Si ejecutamos el programa sin inicializar la memoria compartida (línea 99), ¿cuál es su valor inicial?
Sino inicializamos el contador en 0, los valores luego de la ejecución no cambian. Por lo tanto el valor inicial del puntero sigue siendo 0.
- ¿Qué representa el valor que aparece entre paréntesis cuando ejecuta el hijo? Por ejemplo, el 4 en:
HIJO (4): Contenido de variable compartida: 6
Es el número que representa el número de hijo que fue creado dentro del for.
- Las operaciones contenidas en el lazo for que ejecuta el hijo (líneas 122 a 125), ¿deberían alterar el resultado esperado de la ejecución? Luego de quitar los comentarios, compilar y ejecutar, ¿qué encuentra?
- Debería alterar la ejecución del programa.
- Se encuentra que ejecución del programa se vio influenciada por el lazo for y ya no se ejecuta como debería hacerlo.
- Tiene el propósito de no permitir el buen funcionamiento del programa.
- Ocasiona este mal funcionamiento aumentando el acceso al espacio de memoria compartida ocasionando problemas de concurrencia.
- ¿Qué llamada al sistema usa el padre para esperar a los hijos?
Se utiliza la llamada al sistema wait () que solicita al SO que bloquee los procesos hasta finalice un proceso hijo.
- Vuelva a comentar el lazo for que ejecuta el hijo. Y comente el último if del programa (líneas 184 a 186). Compile y ejecute varias veces. ¿Qué puede observar? ¿Cuál es el propósito del if que comentó?
Podemos observar que al no iniciar la variable contador en 0 y de no cerrar el espacio de memoria compartida la próxima ejecución del programa continuara con el siguiente del ultimo valor calculado en la anterior ejecución.
El propósito del if comentado es: permite que el segmento de memoria compartida se elimine al ser liberado por el padre (último proceso que lo usa). De no existir, la próxima invocación del programa (o de shmget con la misma clave) nos llevará al mismo segmento, independientemente de cualquier shmdt que podamos hacer, y contendrá el valor de la ejecución anterior.
...