tarea3SISTEMA OPERATIVO
tarea3SISTEMA OPERATIVO
tarea3SISTEMA OPERATIVO
Sistema Operativo.
computacionales.
Ciclo:11.
El problema es el siguiente:
Uno o más productores generan cierto tipo de datos (registros, caracteres) y los sitúan en un
buffer. Un único consumidor saca elementos del buffer de uno en uno. El sistema está obligado a
impedir la superposición de operaciones sobre el buffer. Supóngase que el buffer es limitado y que
consiste en un vector lineal de elementos.
Uno o más productores generan cierto tipo de datos (registros, caracteres) y los
sitúan en un buffer. Un único consumidor saca elementos del buffer de uno en uno.
El sistema está obligado a impedir la superposición de operaciones sobre el buffer.
Supóngase que el buffer es limitado y que consiste en un vector lineal de
elementos.
Los procesos comparten recursos que se necesitan previamente coordinar para que
realicen sus acciones. Por ejemplo, se realizan dos procesos que son el productor y
consumidor, Ambos son incluidos en un búfer de tamaño infinito. Los productores envían
mensajes que son recibidos por los consumidores. Algunos mecanismos de
comunicación y sincronización son los archivos, tuberías, llamadas al sistema para la
gestión de tuberías, semáforos y las llamadas al sistema para la gestión de semáforos.
El problema está en lograr que cuando el consumidor trata de extraer un ítem cuando el
buffer está vacío, el consumidor se bloquee hasta que el productor deposite un ítem. Del
mismo modo, cuando el productor intenta depositar un ítem cuando el buffer ya tiene el
máximo de N ítems, el productor se debe bloquear hasta que el consumidor extraiga un
ítem.
La interconexión entre los puertos de la tarjeta principal y los módulos auxiliares que
permiten el control de la intersección, que son: la tarjeta para la detección de los
vehículos de emergencia, la tarjeta Ethernet para la comunicación con la central remota,
Consorcio Clavijero
buffer.
El consumidor saca elementos del buffer que ya fueron sacados con
anterioridad.
El consumidor saca un elemento mientras el productor lo está insertando
Productores - Consumidores
#include <iostream>
#include <pthread.h>
#include <semaphore.h>
using namespace std ;
sem_t//semaforos
puede_escribir,// inicializado a 1
puede_leer, // inicializado a 0
acceder_buffer; //exclusion mutua
int producir_dato()
{
return contador ++;
}
void consumir_dato(int dato)
{
cout<<"Dato recibidos: "<<dato<<endl;
}
dato=v[pos_r];
//cout<<"La posicion read es: "<<pos_r<<endl;
pos_r++;
if(pos_r>=10)
pos_r=pos_r%10;//decrementamos pos_r
consumir_dato(dato);
}
return NULL ;
}
int main()
{
pthread_t hebra_escritora, hebra_lectora ;//creamos una hebra para leer y otra para
escribir
sem_init( &puede_escribir, 0, 10); // inicialmente se puede escribir
sem_init( &puede_leer,0, 0); // inicialmente no se puede leer
sem_init( &acceder_buffer,0,1);
return 0;
}
Consorcio Clavijero
Referencias
Gómez, N. A. (2022). Programación concurrente. Obtenido de
https://www.pragma.com.co/academia/lecciones/programacion-concurrente-parte-1
Unir, V. (21 de abril de 2023). La programación concurrente y su utilidad actual y futura. Obtenido
de https://www.unir.net/ingenieria/revista/programacion-concurrente/