Está en la página 1de 1

INF239 - Sistemas Operativos 1

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA

Laboratorio Nro 2
( 2018 - 2 )

1) (3 puntos) (nombre de archivo collatz.c) El archivo collatz.c contiene una implementación a la


conjetura de Collatz usando un solo pipe y dos procesos hijos. Si desea puede compilar y ejecutar dicho
programa. Se le solicita, después de un análisis, que comente si existe condiciones de competencia ( race
condition). En caso de que su respuesta sea afirmativa presente una secuencia en la que se presenta esta
condición. En caso contrario justifique su respuesta. Su respuesta debe ser escrita como comentario en el
mismo archivo collatz.c.

2) (8 puntos) (nombre de archivo pcollatz.c) Modifique el programa anterior para emplear tres pipes y
seguir la siguiente estrategia. Para efectos didácticos usaremos nombres (usted puede emplearlos en los
arreglos de descriptores) pares, impares y salida. El proceso padre lee el número por teclado y si es par
lo deposita en pares de lo contrario en impares. El proceso padre crea dos procesos hijos y luego se
queda a la espera de leer algún dato en salida. El padre cada vez que logra leer de salida lo imprime por
pantalla. Un proceso hijo lee de pares y el otro proceso hijo lee de impares. Cada proceso hijo está a la
espera de datos leyendo en su pipe. Una vez que alguno de los procesos logra leer un dato del pipe lo
deposita en salida. Si es el proceso que ha leído de pares, significa que el número ha sido par, por tanto
ejecuta n div 2 y lo deposita en salida. A continuación analiza el resultado. Si nuevamente es par
vuelve a ejecutar n div 2 y repite el proceso, en caso contrario lo deposita en impares, y luego se queda
esperando alguna entrada en pares. El otro proceso lleva a cabo de forma análoga su trabajo, esta vez
ejecutando 3n+1.

Sugerencias:

a) La creación de pipes deben llevarse a cabo antes de la creación de procesos, para que los
descriptores puedan ser compartidos por todos los procesos.

b) Establezca un mecanismo para establecer que ya no hay más datos que procesar y evitar que
los procesos se bloqueen indefinidamente al leer sobre pipes vacíos.

3) (4 puntos) (nombre de archivo npcollatz.c) Modifique el programa pcollatz.c, para que en lugar de
recibir el número por teclado, funcione como un servidor usando named pipes. Donde los clientes le
envían el número y el servidor responde enviando la secuencia de números correspondientes. El servidor
debe de llevar a cabo en esencia lo mismo que el programa anterior, excepto que ya no leerá el número
por teclado sino de un named pipe.

4) (5 puntos) (nombre de archivo scollatz.c) Modifique el programa pcollatz.c, para que en lugar de
recibir el número por teclado, funcione como un servidor usando sockets. Donde los clientes le envían el
número y el servidor responde enviando la secuencia de números correspondientes. El servidor debe de
llevar a cabo en esencia lo mismo que el programa anterior, excepto que ya no leerá el número por
teclado sino de un socket.

Use los siguientes datos:

- dominio: AF_INET
- tipo de socket: SOCK_STREAM
- IP: 127.0.0.1 (localhost)

Pando, 21 de setiembre de 2018.

Prof: Alejandro T. Bello Ruiz.

Laboratorio 2 2018-2

También podría gustarte