Está en la página 1de 10

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS


ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 1

INFORME DE LABORATORIO
(formato estudiante)
INFORMACIÓN BÁSICA
ASIGNATURA: SISTEMAS OPERATIVOS.
TÍTULO DE LA
Semáforos Contadores en Linux
PRÁCTICA:
NÚMERO DE NRO.
09 AÑO LECTIVO:
PRÁCTICA: SEMESTRE:
FECHA DE HORA DE
PRESENTACIÓN PRESENTACIÓN
INTEGRANTE (s):
Mollo Mayta Christian Harry NOTA:

DOCENTE(s):
NIETO VALENCIA, RENE ALONSO

SOLUCIÓN Y RESULTADOS
I. EJERCICIO RESUELTO.
1. El código muestra cómo se inicializa un semáforo (my_semaphore) con un valor de 10. A partir de aquí,
este semáforo podría ser utilizado en el programa para sincronizar el acceso a recursos compartidos
entre diferentes procesos o hilos.
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 2

2. Este fragmento de código muestra únicamente las operaciones de inicialización y destrucción del
semáforo, pero en una aplicación real, se necesitan operaciones adicionales como wait y post para
gestionar el acceso adecuado a los recursos compartidos y garantizar la sincronización entre los procesos
o hilos.
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 3

3. El código muestra cómo inicializar un semáforo con un valor de 1, obtener su valor inicial, realizar una
operación wait sobre el semáforo y obtener su valor nuevamente después de la operación. La operación
wait hace que el proceso espere si el semáforo tiene un valor de 0, lo que puede utilizarse para
sincronizar el acceso a recursos compartidos y evitar condiciones de carrera entre procesos o hilos.

4. El código muestra cómo inicializar un semáforo con un valor de 10, obtener su valor inicial, realizar una
operación post sobre el semáforo y obtener su valor nuevamente después de la operación. La operación
post incrementa el valor del semáforo, lo que puede utilizarse para liberar recursos compartidos y
permitir que otros procesos o hilos accedan a ellos de manera sincronizada.
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 4

II. EJERCICIOS PROPUESTOS.


1. Ejercicio 01:
● Prueba 1: Este código implementa una solución concurrente al problema del
"Productor-Consumidor", donde el productor produce caracteres ingresados por el usuario y los
coloca en un búfer compartido, mientras que el consumidor consume los caracteres del búfer y
los imprime en la consola. Los semáforos llenos y vacíos se utilizan para sincronizar la
producción y el consumo de elementos, asegurando que el productor no produzca cuando el
búfer está lleno y que el consumidor no consuma cuando el búfer está vacío. La espera de 1
segundo en el consumidor (sleep(1)) es para simular un proceso de consumo más lento.

● Prueba 2: Podemos observar que el consumidor intenta consumir elementos del búfer
(caracter "B") en un bucle, pero como el productor no está activo y no produce elementos para
llenar el búfer, el consumidor se queda esperando en sem_wait(&llenos) en cada iteración.
Como resultado, el consumidor está detenido y no puede avanzar, lo que se refleja en la
repetición del mensaje "B Consumidor -->" sin detenerse.
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 5

● Prueba 3: Podemos ver que el productor ha producido los caracteres "A" a "H" y los ha
colocado en el búfer. Después de eso, el productor quedó detenido en la línea
sem_wait(&vacios) y el programa se detuvo con el mensaje "Terminado". Esto indica que el
productor no puede seguir produciendo más elementos hasta que haya espacio disponible en el
búfer (lo que debe ser indicado por el consumidor a través del semáforo vacios). Sin embargo,
como el consumidor no se ha creado, el búfer permanece lleno y el productor no puede
continuar su ejecución
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 6

2. Fabrica Bicicletas:

#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>

#define N 5 // Espacio disponible en OP2 y OP3


#define M 10 // Espacio disponible en OP1

sem_t sem_ruedas, sem_cuadros, sem_manillares, sem_piezas_OP1, sem_bicicletas;

void *OP1(void *arg) {


int ruedas_montadas = 0;
while (1) {
// Montar ruedas
sem_wait(&sem_piezas_OP1);
ruedas_montadas++;
printf("OP1: Montó una rueda (%d/%d)\n", ruedas_montadas, M);
sem_post(&sem_ruedas);
}
return NULL;
}

void *OP2(void *arg) {


UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 7

while (1) {
// Montar cuadros
sem_wait(&sem_cuadros);
printf("OP2: Montó un cuadro\n");
sem_post(&sem_bicicletas);
}
return NULL;
}

void *OP3(void *arg) {


while (1) {
// Montar manillares
sem_wait(&sem_manillares);
printf("OP3: Montó un manillar\n");
sem_post(&sem_bicicletas);
}
return NULL;
}

void *Montador(void *arg) {


while (1) {
// Esperar piezas para montar bicicleta
sem_wait(&sem_bicicletas);
sem_wait(&sem_ruedas);
sem_wait(&sem_ruedas);
sem_wait(&sem_cuadros);
sem_wait(&sem_manillares);

printf("Montador: Ensambló una bicicleta\n");

sem_post(&sem_manillares);
sem_post(&sem_cuadros);
sem_post(&sem_piezas_OP1);
}
return NULL;
}

int main() {
pthread_t op1_tid, op2_tid, op3_tid, montador_tid;

sem_init(&sem_ruedas, 0, N);
sem_init(&sem_cuadros, 0, N);
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 8

sem_init(&sem_manillares, 0, N);
sem_init(&sem_piezas_OP1, 0, M);
sem_init(&sem_bicicletas, 0, 0);

pthread_create(&op1_tid, NULL, OP1, NULL);


pthread_create(&op2_tid, NULL, OP2, NULL);
pthread_create(&op3_tid, NULL, OP3, NULL);
pthread_create(&montador_tid, NULL, Montador, NULL);

pthread_join(op1_tid, NULL);
pthread_join(op2_tid, NULL);
pthread_join(op3_tid, NULL);
pthread_join(montador_tid, NULL);

return 0;
}
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 9

III. CUESTIONARIO.
● ¿Cuáles son las ventajas o desventajas encontradas del uso de Semáforos contadores?
Los semáforos contadores son una herramienta útil y poderosa para sincronizar el acceso a recursos
compartidos en programas concurrentes o paralelos. Permiten controlar la cantidad de recursos
disponibles y asegurar que los hilos o procesos accedan a ellos de manera ordenada y segura. Algunas de
las ventajas de los semáforos contadores son:
Ventajas:
● Sincronización eficiente y flexible.
● No requiere compartir memoria.
● Permite controlar la cantidad de recursos disponibles.
● Sin embargo, también presentan algunas desventajas:
Desventajas:
● Posible bloqueo o inanición si no se utilizan adecuadamente.
● Complejidad en el diseño y posible dificultad de depuración.
● Posible condición de carrera si no se sincronizan correctamente.

Es importante utilizar los semáforos contadores con cuidado y asegurarse de liberar adecuadamente los
recursos para evitar problemas de sincronización. En ciertos casos, otras técnicas de sincronización más
simples, como mutex o variables de condición, pueden ser preferibles según las necesidades del
programa y la naturaleza de los recursos que se deben proteger

● ¿En qué se diferencian los semáforos contadores a los semáforos vistos en el laboratorio
anterior?
Los semáforos binarios son más simples y adecuados para proteger recursos compartidos que solo
pueden ser utilizados por un hilo o proceso a la vez, mientras que los semáforos contadores son más
versátiles y permiten gestionar la disponibilidad de recursos en situaciones más complejas, como
productor-consumidor o control de acceso a recursos con capacidad limitada.

RETROALIMENTACIÓN GENERAL

REFERENCIAS Y BIBLIOGRAFÍA
UNIVERSIDAD NACIONAL DE SAN AGUSTIN
FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMA

Formato: Guía de Práctica de Laboratorio / Talleres / Centros de Simulación


Aprobación: 2022/03/01 Código: GUIA-PRLE-001 Página: 10

También podría gustarte