Identificar estado compartido y restricciones de problema


-Buffer de tamaño limitado compartido entre productores y consumidores
-Productor escribe en buffer[ in ], in indica posición de escritura en buffer
-Consumidor extrae de buffer[ out ], out indica posicion de extracción de buffer
-Contador indica el número de elementos actuales en el buffer
-Múltiples productores deben manipular in, buffer[ in ] y contador atómicamente
-Múltiples consumidores deben manipular out, buffer[ out ] y contador atómicamente
-Múltiples consumidores y productores deben manejar contador atómicamente


int contador = 0; // indica número de items en buffer
char buffer[ N ];
int in =0;
int out = 0;
lock_t mutex;


Productor
while( TRUE ){
       // produce items en proxProd
       lock( mutex );
       while( contador == N ){
                unlock( mutex );
                yield();
       }
       buffer[ in ] = proxProd;
       in = ( in + 1 ) % N;
       contador++;
       unlock( lock );
}


Consumidor
while( TRUE ){
       // produce items en proxProd
       lock( mutex );
       while( contador == 0 ){
                unlock( mutex );
yield();
         }
         proxCons = buffer[ out ];
         out = ( out + 1 ) % N;
         contador--;
         unlock( mutex );
}


Problemas con semáforos


    •    Son variables globales por lo tanto pueden ser accesadas de cualquier hebra
         directamente ( no es buena en ingeniería de software)
    •    No hay conexión entre el semáforo y el recurso para el cual se quiere controlar
         acceso
    •    Usados como mutex (ingreso a sección crítica) y para coordinación (planificación,
         elección quien tiene acceso al recurso)
    •    No se puede controlar su uso, no hay garantía que el programador los use
         adecuadamente ( fácil de cometer errores)


* Operación Wait (P): Si el valor del semáforo no es nulo, esta operación decrementa en
uno el valor del semáforo. En el caso de que su valor sea nulo, la operación suspende el
proceso que lo ejecuta y lo ubica en la lista del semáforo a la espera de que deje de ser
nulo el valor.
* Operación Signal (V): Incrementa el valor del semáforo, y en caso de que haya
procesos en la lista de espera del semáforo, se activa uno de ellos para que concluya su
operación Wait.


Pseudocódigo de la operación:
wait(p);
if p>0
then p:= p-1;
else Suspende el proceso y lo encola en la lista del semáforo.


Pseudocódigo de la operación:
signal(p);
if Hay algún proceso en la lista del semáforo
then Activa uno de ellos
else p:= p+1;



Sincronización basada en semáforos
process Productor;
var dato: Tipo_Dato;
         begin
         repeat
                  produceDato(var dato);
                  dejaDato(dato);
         signal(datoDisponible);
         forever;
end:



La clave para implementar semáforos es disponer de un mecanismo(lock y unlock) que
permita garantizar las secciones críticas de las primitivas wait y signal.


Wait
lock
if s>0
then s:= s-1;
else Suspende el proceso;
unlock;


Signal
lock
if Hay procesos suspendidos
then Desbloquea uno de los procesos;
else s:= s+1;
unlock;
- Peligros que introducen los semáforos son:
* Un procedimiento wait y signal pueden olvidarse accidentalmente y ello conduce a
una mal función catastrófica en el programa. En general un olvido de una sentencia wait
conduce a un error de seguridad, como que no se respete una región de exclusión
mutua, así mismo, un olvido de una sentencia signal, conduce a un bloqueo.
* Pueden incluirse todas las sentencias wait y signal necesarias, pero en puntos no
correctos del programa o en orden no adecuado.
* La solución de los mecanismos de exclusión mutua o de sincronización mediante
semáforos, dan lugar a un código con operaciones wait y signal relativas a un mismo
semáforo, muy dispersas por el código del programa, lo que constituye una grave
dificultad para comprender el programa y para mantenerlo.

Más contenido relacionado

PPT
PPT
Sincronizacion de procesos
PPTX
218727950 curso-robots-motoman-pptx
PPTX
Electrónica digital: maquinas de estado con VHDL
PPTX
Algoritmo
PDF
4. interrupciones y temporizadores
PDF
05.Manejo de interrupciones
PDF
Modulo Timer 0 del PIC16F887
Sincronizacion de procesos
218727950 curso-robots-motoman-pptx
Electrónica digital: maquinas de estado con VHDL
Algoritmo
4. interrupciones y temporizadores
05.Manejo de interrupciones
Modulo Timer 0 del PIC16F887

La actualidad más candente (19)

PPT
Clase no12
PDF
Microprogramacion - Interrupciones y timers
PDF
Instrucciones de control Parte II
PPTX
Tecnicas de deteccion de errores y pruebas en plc
PPT
Plc intrucciones basicas
PPT
El plc
PDF
Timer 0 - Pic16F877A
PDF
Clase 2
PPTX
Analisis sintáctico
PDF
Guía de ejercicios resueltos y propuestos tema 4
PPTX
Programación conceptos básicos
DOC
Ejemplos 4to Examen Mci
PDF
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
PDF
Módulo Timer 1 del PIC16F887
PPTX
Control y robótica
PDF
Módulo ADC del PIC16F887
PDF
DISEÑO E IMPLEMENTACIÓN DE UN CONTROLADOR PID
DOCX
Arduino: Reporte de diseño controlador acuario con Arduino
PDF
Practica pid labview
Clase no12
Microprogramacion - Interrupciones y timers
Instrucciones de control Parte II
Tecnicas de deteccion de errores y pruebas en plc
Plc intrucciones basicas
El plc
Timer 0 - Pic16F877A
Clase 2
Analisis sintáctico
Guía de ejercicios resueltos y propuestos tema 4
Programación conceptos básicos
Ejemplos 4to Examen Mci
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
Módulo Timer 1 del PIC16F887
Control y robótica
Módulo ADC del PIC16F887
DISEÑO E IMPLEMENTACIÓN DE UN CONTROLADOR PID
Arduino: Reporte de diseño controlador acuario con Arduino
Practica pid labview
Publicidad

Destacado (18)

PPT
아인슈타인의 유산
PPTX
Cefaleas curso semergen
PDF
Communique´ de presse selecta 2013
PDF
Contraportada cursos
PPTX
Paragraf deskripsi
PDF
Visitas guiadas 2011_Diciembre
PDF
Folleto vg12 bsmpara web
PPTX
Trasplante de médula ósea
PPTX
Year 6 camp
PDF
Cabinet Hardware
PDF
Visitas Guiadas 2011 | Turismo da Coruña
PDF
Sentença
PPTX
2º ESO Renacimiento escultura
PPS
Vision Nocturna
PPTX
PPT
Travertino -remax_christiano
PPT
Katasendi
DOC
Obama los drones y la ética norteamericana
아인슈타인의 유산
Cefaleas curso semergen
Communique´ de presse selecta 2013
Contraportada cursos
Paragraf deskripsi
Visitas guiadas 2011_Diciembre
Folleto vg12 bsmpara web
Trasplante de médula ósea
Year 6 camp
Cabinet Hardware
Visitas Guiadas 2011 | Turismo da Coruña
Sentença
2º ESO Renacimiento escultura
Vision Nocturna
Travertino -remax_christiano
Katasendi
Obama los drones y la ética norteamericana
Publicidad

Similar a Blog (20)

PPT
Semaforos
PPTX
SICRONIZACION DE PROCESOS
PPTX
Introduccións a VHDL 2023 24_ALTERA.pptx
PPT
PDF
ARDUINO - GRAFCET - IMPLEMENTACIÓN DE LA METODOLOGÍA PARA TRADUCIR AL ...
PDF
Capitulo3
PPS
Tema0397
PDF
Alarm - Proyecto de implementación de un TSR en MS-DOS
PDF
Clase 1
PDF
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
PPT
PPTX
Ing. Mecatronica Prog. Básica, U5 Módulos
PDF
11 Automata Program
PPT
Curso Micro Tema 2
DOC
lógica programable
PDF
Señales en Linux
PDF
Automatizacion conceptos generales y diseño
PDF
Actividad teorico practica
PPT
Ps 10 sos_procesos_señales
Semaforos
SICRONIZACION DE PROCESOS
Introduccións a VHDL 2023 24_ALTERA.pptx
ARDUINO - GRAFCET - IMPLEMENTACIÓN DE LA METODOLOGÍA PARA TRADUCIR AL ...
Capitulo3
Tema0397
Alarm - Proyecto de implementación de un TSR en MS-DOS
Clase 1
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
Ing. Mecatronica Prog. Básica, U5 Módulos
11 Automata Program
Curso Micro Tema 2
lógica programable
Señales en Linux
Automatizacion conceptos generales y diseño
Actividad teorico practica
Ps 10 sos_procesos_señales

Más de dgzz (10)

PDF
Patrones
PDF
Ogro
PDF
Sq lactividades
PDF
Sq lactividades
ODP
2nd part
ODP
Vmfs
PDF
Dead
PDF
Blog
ODP
Act1
ODP
Act1
Patrones
Ogro
Sq lactividades
Sq lactividades
2nd part
Vmfs
Dead
Blog
Act1
Act1

Blog

  • 1. Identificar estado compartido y restricciones de problema -Buffer de tamaño limitado compartido entre productores y consumidores -Productor escribe en buffer[ in ], in indica posición de escritura en buffer -Consumidor extrae de buffer[ out ], out indica posicion de extracción de buffer -Contador indica el número de elementos actuales en el buffer -Múltiples productores deben manipular in, buffer[ in ] y contador atómicamente -Múltiples consumidores deben manipular out, buffer[ out ] y contador atómicamente -Múltiples consumidores y productores deben manejar contador atómicamente int contador = 0; // indica número de items en buffer char buffer[ N ]; int in =0; int out = 0; lock_t mutex; Productor while( TRUE ){ // produce items en proxProd lock( mutex ); while( contador == N ){ unlock( mutex ); yield(); } buffer[ in ] = proxProd; in = ( in + 1 ) % N; contador++; unlock( lock ); } Consumidor while( TRUE ){ // produce items en proxProd lock( mutex ); while( contador == 0 ){ unlock( mutex );
  • 2. yield(); } proxCons = buffer[ out ]; out = ( out + 1 ) % N; contador--; unlock( mutex ); } Problemas con semáforos • Son variables globales por lo tanto pueden ser accesadas de cualquier hebra directamente ( no es buena en ingeniería de software) • No hay conexión entre el semáforo y el recurso para el cual se quiere controlar acceso • Usados como mutex (ingreso a sección crítica) y para coordinación (planificación, elección quien tiene acceso al recurso) • No se puede controlar su uso, no hay garantía que el programador los use adecuadamente ( fácil de cometer errores) * Operación Wait (P): Si el valor del semáforo no es nulo, esta operación decrementa en uno el valor del semáforo. En el caso de que su valor sea nulo, la operación suspende el proceso que lo ejecuta y lo ubica en la lista del semáforo a la espera de que deje de ser nulo el valor. * Operación Signal (V): Incrementa el valor del semáforo, y en caso de que haya procesos en la lista de espera del semáforo, se activa uno de ellos para que concluya su operación Wait. Pseudocódigo de la operación: wait(p); if p>0 then p:= p-1; else Suspende el proceso y lo encola en la lista del semáforo. Pseudocódigo de la operación: signal(p); if Hay algún proceso en la lista del semáforo
  • 3. then Activa uno de ellos else p:= p+1; Sincronización basada en semáforos process Productor; var dato: Tipo_Dato; begin repeat produceDato(var dato); dejaDato(dato); signal(datoDisponible); forever; end: La clave para implementar semáforos es disponer de un mecanismo(lock y unlock) que permita garantizar las secciones críticas de las primitivas wait y signal. Wait lock if s>0 then s:= s-1; else Suspende el proceso; unlock; Signal lock if Hay procesos suspendidos then Desbloquea uno de los procesos; else s:= s+1; unlock;
  • 4. - Peligros que introducen los semáforos son: * Un procedimiento wait y signal pueden olvidarse accidentalmente y ello conduce a una mal función catastrófica en el programa. En general un olvido de una sentencia wait conduce a un error de seguridad, como que no se respete una región de exclusión mutua, así mismo, un olvido de una sentencia signal, conduce a un bloqueo. * Pueden incluirse todas las sentencias wait y signal necesarias, pero en puntos no correctos del programa o en orden no adecuado. * La solución de los mecanismos de exclusión mutua o de sincronización mediante semáforos, dan lugar a un código con operaciones wait y signal relativas a un mismo semáforo, muy dispersas por el código del programa, lo que constituye una grave dificultad para comprender el programa y para mantenerlo.