UNIVERSIDAD CENTROCCIDENTAL LISANDRO ALVARADO DECANATO DE CIENCIAS Y

  • Slides: 69
Download presentation
UNIVERSIDAD CENTROCCIDENTAL “LISANDRO ALVARADO” DECANATO DE CIENCIAS Y TECNOLOGÍA DEPARTAMENTO DE SISTEMAS Unidad III:

UNIVERSIDAD CENTROCCIDENTAL “LISANDRO ALVARADO” DECANATO DE CIENCIAS Y TECNOLOGÍA DEPARTAMENTO DE SISTEMAS Unidad III: “PROGRAMACIÓN CONCURRENTE Y CONTROL DE PROCESOS” I PARTE Elaborado por: Prof. (a) Aimará Vargas Revisión y aportes de los profesores: Robiro Azuaje Yvan Gutierrez Euvis Piña Salvatore González Sistemas Operativos Unidad III - Abril 2015 1

Programación concurrente y control de Procesos Contenido (I Parte) 1. Concurrencia 2. Procesos concurrentes:

Programación concurrente y control de Procesos Contenido (I Parte) 1. Concurrencia 2. Procesos concurrentes: • Definición • Tipos 3. Mecanismos de comunicación y sincronización entre procesos 4. Problemas de Concurrencia • Condiciones de Carrera • Interbloqueos ( II Parte) 5. Solución a problemas de condiciones de carrera Exclusión mutua Secciones críticas 6. Implementaciones de secciones críticas 7. Problemas Clásicos para el estudio de comunicación y sincronización de procesos • Productor - Consumidor • Lectores y Escritores • Barbero Dormido • Cena de filósofos 8. Estructura de sincronización de procesos de alto nivel: Monitores Sistemas Operativos Unidad II - Marzo 2015 2

Concurrencia Capacidad del sistema de realizar actividades simultáneas, debido al aporte que realiza el

Concurrencia Capacidad del sistema de realizar actividades simultáneas, debido al aporte que realiza el sistema operativo. Dos o más procesos son CONCURRENTES si existen simultáneamente Sistemas Operativos Unidad III - Abril 2015 3

Procesos Concurrentes Procesos concurrentes Existencia simultánea Ejecución simultánea Procesamiento paralelo lógico Procesamiento paralelo físico

Procesos Concurrentes Procesos concurrentes Existencia simultánea Ejecución simultánea Procesamiento paralelo lógico Procesamiento paralelo físico Sistemas Operativos Unidad III - Abril 2015 4

Procesos Concurrentes Modelos: q Multiprogramación en un único procesador q Multicomputador (Redes, proceso distribuido)

Procesos Concurrentes Modelos: q Multiprogramación en un único procesador q Multicomputador (Redes, proceso distribuido) Razones para permitir la concurrencia: q Compartir recursos físicos (impresoras, dispositivos, memoria, ciclos de CPU). q Compartir recursos lógicos (variables, archivos, semáforos) q Acelerar los cálculos y tiempos de respuestas. q Modularidad. Sistemas Operativos Unidad III - Abril 2015 5

Procesos Concurrentes Tipos de procesos Ejecutan sin requerir ayuda de otros procesos Interacción entre

Procesos Concurrentes Tipos de procesos Ejecutan sin requerir ayuda de otros procesos Interacción entre procesos Ø Compiten y/ó Ø Independientes comparten recursos Ø Cooperativos Ø Se comunican y/ó Persiguen un objetivo común sincronizan entre sí. Sistemas Operativos Unidad III - Abril 2015 6

Mecanismos de Comunicación y Sincronización Mecanismos de comunicación Ø Archivos Ø Tuberías (pipes, FIFOS)

Mecanismos de Comunicación y Sincronización Mecanismos de comunicación Ø Archivos Ø Tuberías (pipes, FIFOS) Ø Variables en memoria compartida Ø Paso de mensajes Las operaciones de comunicación deben ser atómicas Sistemas Operativos Unidad III - Abril 2015 7

Mecanismos de Comunicación Archivos P A 5 Q M 5 read(F 1, A) write(F

Mecanismos de Comunicación Archivos P A 5 Q M 5 read(F 1, A) write(F 1, M) 5 F 1 FVentajas: FComunica a un número ilimitado de procesos FSe ofrecen servicios sencillos y fáciles de utilizar FDesventajas: FPoco eficiente FSe necesita de un mecanismo alterno para la sincronización entre los procesos Prof. Euvis Piña Duin Decanato de Cs. y Tecnología - UCLA

Mecanismos de Comunicación Tuberías a. Si el Pipe está vacío, se bloquea el lector.

Mecanismos de Comunicación Tuberías a. Si el Pipe está vacío, se bloquea el lector. a Lectura de n bytes y Pipe con p bytes: Mecanismo de comunicación y sincronización ØSi p n, devuelve n Si el Pipe está lleno, ØSi p < n, devuelve p Es visto como un seudoarchivo mantenido por el SO, se bloquea el ØLa lectura elimina los datos de la tubería. escritor sobre el cual se emplean las operaciones read y write comunes para el manejo de archivos. write Proceso de Usuario read SO pipe Flujo de datos Prof. Euvis Piña Duin Decanato de Cs. y Tecnología - UCLA Unidireccional

Mecanismos de Comunicación Tuberías PIPES FIFOS No tiene nombre, y por Tuberías con nombre

Mecanismos de Comunicación Tuberías PIPES FIFOS No tiene nombre, y por Tuberías con nombre tanto, sólo puede ser Sólo tiene asociado un utilizado entre los descriptor de archivos que procesos que lo hereden. se puede utilizar para leer Tiene asociado dos o escribir, ya que el flujo es descriptores de archivos: bidireccional. Uno se utiliza para leer y el otro para escribir. Lecturas y escrituras atómicas Sistemas Operativos Unidad III - Abril 2015 10

Mecanismos de Comunicación Tuberías ¿ Cómo se usa un pipe en un programa? Usar

Mecanismos de Comunicación Tuberías ¿ Cómo se usa un pipe en un programa? Usar pipes es simplemente llamar a la función pipe y pedirle los descriptores de archivo que serán los extremos del "tubo" que se habrá construido. Algo así: int p[2]; pipe(p); Después de la invocación a pipe el arreglo de enteros p contiene en p[0] un descriptor de archivo para leer y, en p[1] un descriptor de archivo para escribir. Esto quiere decir que los pipes funcionan en una sola dirección. Sistemas Operativos Unidad III - Abril 2015 11

Mecanismos de Comunicación Memoria Compartida P A 5 Q FEl sistema operativo A: =

Mecanismos de Comunicación Memoria Compartida P A 5 Q FEl sistema operativo A: = M Crear M M: = 5 Solo permite la comunicación entre procesos que ejecutan en la misma máquina 5 M crea la memoria compartida a petición del proceso de usuario. FEl programador SO tiene la responsabilidad de proveer comunicación FRequiere de un mecanismo alterno para la sincronización. Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes - El sistema operativo tiene la responsabilidad de

Mecanismos de Comunicación Sistema de mensajes - El sistema operativo tiene la responsabilidad de proveer comunicación, inclusive si los procesos se encuentran en máquinas distintas. - Operaciones: * SEND (enviar) Tamaño del mensaje: Fijo ó Variable * RECEIVE (recibir) Flujo de Datos: Unidireccional ó Bidireccional Sistemas Operativos Unidad III - Abril 2015 13

Mecanismos de Comunicación Sistema de mensajes Tipos de comunicación: Según el nombrado: Directa: El

Mecanismos de Comunicación Sistema de mensajes Tipos de comunicación: Según el nombrado: Directa: El enviador pasa directamente el mensaje M al destinatario indicado en la operación SEND. Si el receptor indica desde quien espera el mensaje la comunicación se llama: simétrica. Si no lo indica, se llama: asimétrica. P A 5 receive(? , A) 5 R m 5 send(P, m) Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes Indirecta: Los mensajes son enviados y recibidos a

Mecanismos de Comunicación Sistema de mensajes Indirecta: Los mensajes son enviados y recibidos a través de buzones Cada buzón tiene su propia RECEIVE(A, n) identificación P n 5 Operaciones: send receive Propietario = P -> P sólo lee de A. Usuario = Q -> Q sólo escribe en A 5 A Buzón Sistemas Operativos. Unidad III- Abril 2015 Q m 5 SEND(A, m)

Mecanismos de Comunicación Sistema de mensajes Tipos de Comunicación Según el flujo: Unidireccional Bidireccional

Mecanismos de Comunicación Sistema de mensajes Tipos de Comunicación Según el flujo: Unidireccional Bidireccional Según la sincronización: Bloqueante o síncrona No bloqueante o asíncrona Según la capacidad de almacenamiento de los mensajes por parte del SO: Con capacidad limitada Con capacidad ilimitada Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes El SO utiliza colas de mensajes asociadas a

Mecanismos de Comunicación Sistema de mensajes El SO utiliza colas de mensajes asociadas a los enlaces de comunicación los cuales pueden mantener temporalmente los mensajes (“buffering”) hasta ser entregados a su destino. i) Capacidad cero: El link no puede tener ningún mensaje esperando en él. Comunicación Sincrónica ii) Capacidad Limitada: A lo sumo “n“ mensajes pueden residir en la cola del link. Comunicación Asincrónica iii) Capacidad Ilimitada: La cola tiene potencialmente longitud infinita. Comunicación Asincrónica Sistemas Operativos - Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP: Pila de protocolos usada

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP: Pila de protocolos usada en Internet CMOT SMTP FTP TELNET DNS SNMP TFTP BOOTP RPC XDR NFS TCP UDP IP ( Incluyendo ICMP ) ARP RARP Interface de Red y Hardware Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Capas conceptuales Fronteras en

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Capas conceptuales Fronteras en Internet Aplicación Software fuera del Sistema Operativo Transporte Software dentro del Sistema Operativo Internet Solo se utilizan direcciones IP Interfaz de Red Se utilizan direcciones físicas Hardware Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Direcciones IP: Cada computador

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Direcciones IP: Cada computador tiene una dirección única, de 32 bits, que se utiliza en toda comunicación con ese computador. Estas direcciones corresponden a números decimales separados por puntos 32 -bit Numero Binario Equivalente Decimal 10000001 00110100 00000110 0000 129. 52. 6. 0 11000000101 01100000011 192. 5. 48. 3 00001010 00000000 00100101 10. 2. 0. 37 100000001010 00000011 128. 10. 2. 3 10000000 1111 0000 128. 255. 0 Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Clases de direcciones IP

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Clases de direcciones IP según el valor del primer octeto Clase Rango de valores A 0 hasta 127 B 128 hasta 191 C 192 hasta 223 D 224 hasta 239 E 240 hasta 255 Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Las direcciones se dividen

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Las direcciones se dividen en dos partes: la primera identifica a la red y la segunda al nodo dentro de esa red. 1 Clase A 0 8 16 Net 24 32 Host Clase B 1 0 Net Clase C 1 1 0 Host Net Clase D 1 1 1 0 Host Multicast Clase E 1 1 0 Reserved Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Programación: Socket Abstracción que

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Programación: Socket Abstracción que representa un extremo de la comunicación bidireccional entre dos procesos. Ofrece una interfaz para acceder a los servicios de red en el nivel transporte de los protocolos TCP/IP. Tipos: Stream (sock_stream): comunicación orientada a la conexión, confiable y garantiza la entrega ordenada de los mensajes. Utilizado para acceder al protocolo TCP. Datagrama (sock_dgram): comunicación no orientada a la conexión, no confiable y no garantiza la entrega ordenada de los mensajes. Utilizado para acceder al protocolo UDP. Prof. Euvis Piña Duin Decanato de Cs. y Tecnología - UCLA

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Puerto Número entero de

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Puerto Número entero de 16 bits que es asociado a una determinada aplicación (bien sea servidora o cliente). Permite hacer la entrega de mensajes a la aplicación correcta. Puerto 1 Puerto n Puerto m UDP Mux Datagrama UDP Nivel IP Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Estructura General de Clientes

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Estructura General de Clientes y Servidores que usan Sockets tipo “Stream”. Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Operaciones más importantes sobre

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP Operaciones más importantes sobre los sockets: socket(protocol_family, tipo, protocolo) Crea un socket para la aplicación Devuelve un número entero pequeño (descriptor del socket). bind(socket, localaddr, addrlen) Relaciona la dirección local IP al socket listen(socket, qlength) Permite que los servidores preparen un socket para las conexiones que vienen. El software a nivel de transporte coloca en cola de espera a las peticiones que lleguen mientras se está atendiendo a la petición actual. Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP accept(socket, addrlen) Permite que

Mecanismos de Comunicación Sistema de mensajes usando Sockets sobre TCP/IP accept(socket, addrlen) Permite que el servidor espere una conexión. Devuelve un nuevo socket al servidor dejando al socket original libre para aceptar otra conexión. connect(socket, destaddr, addrlen) Relaciona una dirección destino IP en forma permanente al socket. Una vez realizada la conexión no es necesario especificar el destino cada vez que se envía un mensaje. close (socket) Disminuye la cuenta de referencia para un socket ( ya que puede estar compartido). Destruye el socket cuando la cuenta llega a 0. Sistemas Operativos. Unidad III - Abril 2015

Mecanismos de Comunicación y Sincronización Mecanismos de Sincronización § Construcciones de los lenguajes concurrentes

Mecanismos de Comunicación y Sincronización Mecanismos de Sincronización § Construcciones de los lenguajes concurrentes (procesos ligeros) § Servicios del sistema operativo: § § § Señales (asincronismo) Tuberías (pipes, FIFOS) Semáforos Mutex y variables condicionales Paso de mensajes Las operaciones de sincronización deben ser atómicas Sistemas Operativos Unidad III - Abril 2015 28

Mecanismos de Sincronización de tareas La sincronización es el mecanismo que controla el orden

Mecanismos de Sincronización de tareas La sincronización es el mecanismo que controla el orden en que se ejecutan las tareas Tipos de Sincronización: Por Cooperación: La tarea A debe esperar que la tarea B finalice alguna actividad para poder continuar con su ejecución. Por Competición: La tarea A necesita acceder a un recurso X mientras la tarea B está accediendo al mismo. La tarea A debe esperar a que la tarea B termine de utilizar el recurso X para poder continuar y tener acceso al mismo Sistemas Operativos Unidad III - Abril 2015 29

Mecanismos de Sincronización Semáforos Ideados por Dijkstra en 1965 El semáforo es una estructura

Mecanismos de Sincronización Semáforos Ideados por Dijkstra en 1965 El semáforo es una estructura de datos que conformado por: Un valor entero Una cola de tareas Brinda protección a los datos de acceso limitado, garantizando que las operaciones sobre los mismos sean atómicas ( sólo una tarea puede manipular el dato en un instante de tiempo) Sistemas Operativos Unidad III - Abril 2015 30

Mecanismos de Sincronización Semáforos • Sólo sincronizan procesos dentro de un mismo equipo •

Mecanismos de Sincronización Semáforos • Sólo sincronizan procesos dentro de un mismo equipo • Es una variable numérica entera de tipo protegida (sólo la maneja el sistema operativo) que se manipula a través de operaciones atómicas bien definidas: * WAIT = DOWN = P(S) * SIGNAL = UP = V(S) Sistemas Operativos Unidad III - Abril 2015 31

Mecanismos de Sincronización Semáforos Implementaciones de operaciones sobre semáforos wait(s) begin s = s

Mecanismos de Sincronización Semáforos Implementaciones de operaciones sobre semáforos wait(s) begin s = s - 1; if (s < 0) then <Bloquear al proceso> end signal(s) begin s = s + 1; if (s <= 0) then <Desbloquear a un proceso bloqueado por la operacion wait> end Sistemas Operativos Unidad III - Abril 2015 32

Mecanismos de Sincronización Semáforos TIPOS: - Binarios: Toman solamente los valores 0 ó 1.

Mecanismos de Sincronización Semáforos TIPOS: - Binarios: Toman solamente los valores 0 ó 1. - Contadores: Su contenido puede ser mayor de 1. Usos: Implementación y control de las secciones críticas Manejo de la dependencia entre procesos Sistemas Operativos Unidad III - Abril 2015 33

Mecanismos de Sincronización Semáforos Sincronización usando semáforos Punto de Sincronización: Punto en el cual

Mecanismos de Sincronización Semáforos Sincronización usando semáforos Punto de Sincronización: Punto en el cual un proceso no puede progresar hasta que otro haya completado algún tipo de actividad. Ejemplo: - var flag : semaphore // inicialmente: flag = 0 - Código: Proceso i . . . A : = 7 * Y signal( flag) Prof. Euvis Piña Duin Decanato de Cs. y Tecnología - UCLA Proceso j. . . wait( flag) B : = A + 5

Problemas de Concurrencia q. Condiciones de carrera. q. Interbloqueos. Condiciones de Carrera: El acceso

Problemas de Concurrencia q. Condiciones de carrera. q. Interbloqueos. Condiciones de Carrera: El acceso concurrente a datos compartidos puede resultar en inconsistencia de datos. Ejemplos: q Asignar un valor a un dato compartido. q Problema del Productor y Consumidor Sistemas Operativos Unidad III - Abril 2015 35

Condiciones de carrera: Ejemplo. 1. Asignar un valor a un dato compartido Procesador 1

Condiciones de carrera: Ejemplo. 1. Asignar un valor a un dato compartido Procesador 1 Lee PID = 500 Lee PID Incrementa y Asigna PID = 501 Escribe PID Procesador 2 Registro o Posición de memoria PID = 500 Incrementa y Asigna PID = 501 Escribe PID Generación de PID en un sistema multiprocesador Sistemas Operativos Unidad III - Abril 2015 36

Condiciones de carrera: Ejemplo. 2. Problema del buffer limitado program Productor_Consumidor var N, count:

Condiciones de carrera: Ejemplo. 2. Problema del buffer limitado program Productor_Consumidor var N, count: integer; Procedure Productor begin while (count<N) do begin calcular_datos; Introducir_dato_Buffer; count : = count+1; end Prof. Euvis Piña Duin Procedure Consumidor begin while (count>0) do begin Tomar_dato_buffer; count : = count-1; utilizar_datos; end Decanato de Cs. y Tecnología - UCLA Begin N: =100; count: =0; parbegin Productor; Consumidor; parend; End.

Condiciones de carrera: Solucion. Cuando un proceso opere sobre datos compartidos debe excluirse a

Condiciones de carrera: Solucion. Cuando un proceso opere sobre datos compartidos debe excluirse a los demás procesos de operar sobre esos datos Exclusión Mutua Sección Crítica Segmento de código (instrucciones) que operan sobre datos y recursos compartidos en cada proceso. Sistemas Operativos Unidad III - Abril 2015 38

Secciones críticas § Estructura general de cualquier mecanismo utilizado para resolver un problema basado

Secciones críticas § Estructura general de cualquier mecanismo utilizado para resolver un problema basado en sección crítica: Entrada en la sección crítica Código de la sección crítica Salida de la sección crítica § Requisitos que debe ofrecer cualquier solución para resolver el problema de la sección crítica: Exclusión mutua Progreso Espera limitada Sistemas Operativos Unidad III - Abril 2015 39

Secciones críticas: Requisitos Exclusión Mutua: Mecanismo que asegura la ejecución ordenada de los procesos

Secciones críticas: Requisitos Exclusión Mutua: Mecanismo que asegura la ejecución ordenada de los procesos cooperantes Cuando un proceso ejecuta su sección crítica, ningún otro proceso puede ejecutar su sección crítica. Sistemas Operativos Unidad III - Abril 2015 40

Secciones críticas: Requisitos Progreso: Si ningún proceso está ejecutando su sección crítica y existen

Secciones críticas: Requisitos Progreso: Si ningún proceso está ejecutando su sección crítica y existen procesos que desean entrar a sus secciones críticas, entonces ÉSTOS PROCESOS pueden participar en la decisión de cuál será el siguiente en entrar en la sección crítica y esta selección no puede postergarse indefinidamente. Sistemas Operativos Unidad III - Abril 2015 41

Secciones críticas: Requisitos Espera Limitada: Debe existir un límite sobre el número de veces

Secciones críticas: Requisitos Espera Limitada: Debe existir un límite sobre el número de veces que se permite que los demás procesos entren en su sección crítica, después de que un proceso haya efectuado una solicitud de entrar a su sección crítica y antes que la solicitud sea concedida. NO SE PUEDE POSPONER A UN PROCESO EN ESPERA INDEFINIDA PARA ENTRAR A SU SECCIÓN CRÍTICA. Sistemas Operativos Unidad III - Abril 2015 42

Secciones críticas: Alternativas de implementación A. Soluciones basadas en el hardware A. 1) Desactivación

Secciones críticas: Alternativas de implementación A. Soluciones basadas en el hardware A. 1) Desactivación de las interrupciones § § El procesos no podría interrumpirse durante su ejecución Sólo funciona en sistemas monoprocesador A. 2) Instrucciones de Máquina § § § Test and Set Implican Espera Activa Puede ocurrir inanición e interbloqueo B. Soluciones basadas en Software: B. 1) Algoritmos de programación B. 2) Herramientas del sistema operativo § Mecanismos de sincronización entre procesos Sistemas Operativos Unidad III - Abril 2015 43

Secciones críticas: Implementciones Soluciones basadas en software Ø Algoritmo de Dekker (implementado por Edsger

Secciones críticas: Implementciones Soluciones basadas en software Ø Algoritmo de Dekker (implementado por Edsger Dijkstra) Ø Algoritmo de Peterson: simplificación del algoritmo de Dekker para dos procesos. Sistemas Operativos Unidad III - Abril 2015 44

Uso de semáforos para controlar secciones críticas wait(s); /* entrada en la sección critica

Uso de semáforos para controlar secciones críticas wait(s); /* entrada en la sección critica */ < sección critica > signal(s); /* salida de la sección critica */ Sistemas Operativos Unidad III - Abril 2015 45

Secciones críticas con tuberias El hecho de que las operaciones de lectura y escritura

Secciones críticas con tuberias El hecho de que las operaciones de lectura y escritura sobre una tubería sean atómicas y que la operación de lectura bloquee a un proceso cuando se encuentra vacía la tubería, permite que este mecanismo sea utilizado para sincronizar procesos. Entonces: Leer dato de la tubería Código correspondiente a la sección crítica Escribir el dato en la tubería Sistemas Operativos Unidad III - Abril 2015 46

Secciones críticas con tuberias program Tuberías: var int fildes[2]; char c; procedure Proceso_Uno; begin

Secciones críticas con tuberias program Tuberías: var int fildes[2]; char c; procedure Proceso_Uno; begin read(fildes[0], &c, 1); Seccion_critica write(fildes[1], &c, 1); end procedure Proceso_Dos; begin read(fildes[0], &c, 1); Seccion_critica write(fildes[1], &c, 1); end Begin pipe(fildes); write(fildes[1], &c, 1); parbegin Proceso_Uno; Proceso_Dos; parend End. Sistemas Operativos Unidad III - Abril 2015 47

Recomendaciones para trabajar concurrencia Establecer los procesos concurrentes cooperativos. Identificar los recursos que serán

Recomendaciones para trabajar concurrencia Establecer los procesos concurrentes cooperativos. Identificar los recursos que serán utilizados, particularmente los recursos compartidos. Definir las secciones críticas. Identificar las relaciones de dependencia entre los procesos concurrentes. Establecer el tipo de mecanismo necesario para relacionar los procesos: Mecanismo de Comunicación Mecanismo de sincronización Sistemas Operativos Unidad III - Abril 2015 48

Problemas clasicos Productor-Consumidor Sistemas Operativos Unidad III - Abril 2015 49

Problemas clasicos Productor-Consumidor Sistemas Operativos Unidad III - Abril 2015 49

Problemas clasicos Lectores-Escritores Mecanismo de sincronización Sistemas Operativos Unidad III - Abril 2015 50

Problemas clasicos Lectores-Escritores Mecanismo de sincronización Sistemas Operativos Unidad III - Abril 2015 50

Problema Productor – Consumidor ( usando semáforos) Interpretación gráfica vacios Sistemas Operativos Unidad III

Problema Productor – Consumidor ( usando semáforos) Interpretación gráfica vacios Sistemas Operativos Unidad III - Abril 2015 llenos 51

Productor – Consumidor ( usando semáforos) program Productor_Consumidor; var critica, vacios, llenos: semaphore; procedure

Productor – Consumidor ( usando semáforos) program Productor_Consumidor; var critica, vacios, llenos: semaphore; procedure Productor begin while ejecucion do begin obtener_dato; P(vacios); P(critica); Introducir_dato_Buffer; V(critica); V(llenos); end procedure Consumidor begin while ejecucion do begin obtener_dato; P(llenos); P(critica); Tomar_dato_Buffer; V(critica); V(vacios); utilizar_datos; end Begin Iniciar_Semaforo(critica, 1); Iniciar_Semaforo(vacios, 1); Iniciar_Semaforo(llenos, 0); parbegin Productor; Consumidor; parend; End. Sistemas Operativos Unidad III - Abril 2015

Problema Lectores –Escritores Supóngase una base de datos, con muchos procesos que compiten por

Problema Lectores –Escritores Supóngase una base de datos, con muchos procesos que compiten por leer y escribir en ella. Se puede permitir que varios procesos lean de la base de datos al mismo tiempo, pero si uno de los procesos está escribiendo (es decir, modificando) la base de datos, ninguno de los demás debería tener acceso a ésta, ni siquiera los lectores. Los lectores no deben esperar a que terminen otros lectores porque haya un escritor esperando ( prioridad a lectores) Sistemas Operativos Unidad III - Abril 2015 53

Una solución al problema de Lectores- Escritores con semáforos program Lectores_Escritores; Var dato, n_lectores:

Una solución al problema de Lectores- Escritores con semáforos program Lectores_Escritores; Var dato, n_lectores: integer; sem_lec, mutex : semaphore; procedure Lector begin Wait(sem_lec); n_lectores : = n_lectores +1; if(n_lectores=1) then begin Wait(mutex); end Signal(sem_lec); Escribir(“dato leído: ”, dato); Wait(sem_lec); n_lectores=n_lectores-1; if(n_lectores=0) then begin Signal(mutex); end Signal(sem_lec); end procedure Escritor begin Wait(mutex); dato : = dato+2; Signal(mutex); end Begin dato: =5; n_lectores: =0; Iniciar_Semaforo(mutex, 1); Iniciar_Semaforo(sem_lec, 1); parbegin Lector; Escritor; parend; End. Sistemas Operativos Unidad III - Abril 2015 54

Problema del Barbero Dormilón El problema consiste en una barbería en la que trabaja

Problema del Barbero Dormilón El problema consiste en una barbería en la que trabaja un barbero que tiene un único sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se sienta en una silla y se duerme. Cuando llega un nuevo cliente, éste o bien despierta al barbero o — si el barbero está afeitando a otro cliente — se sienta en una silla (o se va si todas las sillas están ocupadas por clientes esperando). El problema consiste en realizar la actividad del barbero sin que ocurran condiciones de carrera. Sistemas Operativos Unidad III - Abril 2015 55

Solución Barbero Dormilón con semáforos program Barbero_Dormilon; var barber, cliente, critica: semaphore; esperando: integer;

Solución Barbero Dormilón con semáforos program Barbero_Dormilon; var barber, cliente, critica: semaphore; esperando: integer; ejecucion: boolean; procedure Barbero begin while(ejecucion) do begin P(clientes); P(critica); esperando: = esperando-1; V(barber); V(critica); cortar_el_pelo; end procedure Cliente begin P(critica); if (esperando < cantidad_sillas then begin esperando: =esperando+1; V(clientes); V(critica); P(barber); obtener_corte_de_pelo; end else v(critica); end Sistemas Operativos Unidad III - Abril 2015 56

Otra solución al problema Productor-Cosumidor con tuberías. Program var int int Prod_Cons fildes[2]; dato_p[4];

Otra solución al problema Productor-Cosumidor con tuberías. Program var int int Prod_Cons fildes[2]; dato_p[4]; dato_c; Procedure Productor begin while ejecucion do begin write(fildes[1], dato_p, 4*sizeof(int)); end procedure Consumidor begin while ejecucion do begin read(fildes[0], &dato_c, sizeof(int)); end Begin pipe(fildes); parbegin Productor; Consumidor; parend End. Sistemas Operativos Unidad III - Abril 2015 57

Otra solución al problema Productor-Consumidor con buzones de mensajes procedure Productor var msjp: mensaje;

Otra solución al problema Productor-Consumidor con buzones de mensajes procedure Productor var msjp: mensaje; begin while (true) do begin receive(puede-producir, token 1); msjp: = Producir(); send(puede-consumir, msjp); end procedure Consumidor var msjc: mensaje; begin while(true) do begin receive(puede-consumir, msjp); consumir(msjc); send(puede-producir, token 2); end Begin crear_mailbox (puede-producir); crear_mailbox (puede-consumir); parbegin Productor; Consumidor: parend; End Sistemas Operativos Unidad III - Abril 2015 58

Monitores ¿Qué es un monitor? Componente pasivo -Frente a un proceso, que es activo.

Monitores ¿Qué es un monitor? Componente pasivo -Frente a un proceso, que es activo. Constituye un modulo de un programa concurrente -Proporcionan un mecanismo de abstracción. -Encapsulan la representación de recursos abstractos junto a sus operaciones. • Con las ventajas inherentes a la encapsulación -Las operaciones de un monitor se ejecutan, por definición en exclusión mutua. -Dispone de mecanismos específicos para la sincronización: variables “condición” Sistemas Operativos Unidad III - Abril 2015 59

Monitores Características de un monitor Variables permanentes -”Permanentes” porque existen y mantienen su valor

Monitores Características de un monitor Variables permanentes -”Permanentes” porque existen y mantienen su valor mientras existe el monitor. -Describen el estado del monitor. -Han de ser inicializadas antes de usarse. Las acciones -Son parte de la interfaz, por lo que pueden ser usadas por los procesos para cambiar su estado. -Solo pueden acceder a las variables permanentes y sus parámetros y variables locales. -Son la única manera posible de cambiar el estado del monitor, Invocación por un proceso: nombre. Monitor. operacion(lista_parametros). Sistemas Operativos Unidad III - Abril 2015 60

Monitores Funcionamiento de un monitor Respecto a la sincronización -La exclusión mutua se asegura

Monitores Funcionamiento de un monitor Respecto a la sincronización -La exclusión mutua se asegura por definición. a) Por lo tanto, solo un proceso puede estar ejecutando acciones de un monitor en un momento dado. b) Aunque varios procesos pueden en ese momento ejecutar acciones que nada tengan que ver con el monitor. -La sincronización condicionada Con frecuencia es necesaria una sincronización explicita entre procesos. Para ello, se usaran las variables “condición” - Se usan para hacer esperar a un proceso hasta que determinada condición sobre el estado del monitor se “anuncie”. -También para despertar a un proceso que estaba esperando por su causa. Sistemas Operativos Unidad III - Abril 2015 61

Monitores Sobre las variables “condición” • Representan una condición de interés para los procesos

Monitores Sobre las variables “condición” • Representan una condición de interés para los procesos que se sincronizan por medio del monitor -Cada variable tiene asociada una cola FIFO para los procesos que se están bloqueados. • Ofrece dos operaciones atómicas básicas: -wait. C(variable_condicion) • el proceso es bloqueado en la cola de la variable “condición” - signal. C(variable_condicion) • “El primer proceso de la cola es desbloqueado” No confundirlas con las operaciones del semáforo Sistemas Operativos Unidad III - Abril 2015 62

Monitores Sobre las variables “condición” • Instrucción wait. C(c): -El proceso invocador queda “bloqueado”

Monitores Sobre las variables “condición” • Instrucción wait. C(c): -El proceso invocador queda “bloqueado” y pasa a la cola FIFO asociada a la variable c, en espera de ser despertado. - El cerrojo que garantiza la exclusión mutua del monitor queda libre. • Instrucción signal. C(c): -Si la cola de la señal esta vacia: no pasa nada y la operación sigue con su ejecución. • Al terminar, el monitor está disponible para otro proceso. -Si la cola no esta vacia: • Se saca el primer proceso de la cola y se “desbloquea” • Políticas de reanudación determinan que proceso continua su ejecución Sistemas Operativos Unidad III - Abril 2015 63

Monitores Sobre las variables “condición” • Diferencias entre las instrucciones de un monitor y

Monitores Sobre las variables “condición” • Diferencias entre las instrucciones de un monitor y las de un semáforo. Semáforos Monitores wait puede bloquearse. wait. C siempre se bloquea. signal siempre tiene un efecto. signal. C no tiene efecto si la cola está vacía. Signal desbloquea a un proceso bloqueado signal. C siempre desbloquea al primer cualquiera. proceso en la cola. Un proceso desbloqueado por la Dependerá de la política de reanudación. instrucción signal puede continuar su ejecucion inmediatamente. Sistemas Operativos Unidad III - Abril 2015 64

Monitores: Estructura General program nombre_programa(Concurrent); Declaraciones de las variables globales; Nombre_Monitor: monitor; Declaraciones de

Monitores: Estructura General program nombre_programa(Concurrent); Declaraciones de las variables globales; Nombre_Monitor: monitor; Declaraciones de las variables del monitor; procedure process Nombre_Proceso(opcional) Declaraciones locales del proceso begin Instrucciones del proceso end nombre_del_proceso procedure entry nombre_del_entry(opcionales) Declaraciones locales del entry Otros… procedure process Nombre_Proceso(); begin Instrucciones de la entrada Begin end nombre_del_entry Inicialización de las variables globales Inicie Nombre_Monitor; Otros… procedure entry nombre_del_entry(); parbegin nombre_de_Cada_proceso; begin parend Inicialización de las variables monitor End. loop Controlar_entrys; end loop end nombre_del_monitor Sistemas Operativos Unidad III - Abril 2015 65

Monitores: Asignación de recursos monitor asignador_de_recursos; Var recurso_en_uso: boolean; recurso_libre: condition; procedure entry Obtener_Recurso

Monitores: Asignación de recursos monitor asignador_de_recursos; Var recurso_en_uso: boolean; recurso_libre: condition; procedure entry Obtener_Recurso begin if (recurso_en_uso) then begin esperar(recurso_libre); end recurso_en_uso: =true; end Obtener_Recurso procedure entry Devolver_Recurso begin recurso_en_uso: =false; señalar(recurso_libre); end Devolver_Recurso Begin recurso_en_uso: =false; loop Controlar_entrys; end loop End asignador_de_recursos; Sistemas Operativos Unidad III - Abril 2015 66

Monitores: Lectores-Escritores monitor controla. Ly. E; Var n_lect, n_escr: integer; ok. Leer: condition; //señala

Monitores: Lectores-Escritores monitor controla. Ly. E; Var n_lect, n_escr: integer; ok. Leer: condition; //señala n_escr=0 ok. Escr: condition; //señala n_escr=0 AND n_lect=0 procedure entry Pide_Leer() begin while(n_escr>0) do wait. C(ok. Leer); n_lect: = n_lect +1; end procedure operation Pide_Escribir() begin while(n_lect>0) OR (n_escr>0) do wait. C(ok. Escr); n_escr: = n_escr +1; end procedure entry Deja_De_Leer() begin n_lect: = n_lect -1; if (n_lect=0) then signal. C(ok. Escr); //signal. C(ok. Escr); end procedure operation Deja_De_Escribir() begin n_escr: = n_escr-1; signal. C(ok. Escr); signal. C_all(ok. Leer); end Sistemas Operativos Unidad III - Abril 2015 67

Lectores-Escritores ¿Utilizando el monitor anterior? Sistemas Operativos Unidad III - Abril 2015 68

Lectores-Escritores ¿Utilizando el monitor anterior? Sistemas Operativos Unidad III - Abril 2015 68

Productor-Consumidor ( ¿Utilizando Monitores? ) program relacion_productor_consumidor; Var buffer_numero: integer; numero_depositado: semáforo; numero_recuperado: semáforo;

Productor-Consumidor ( ¿Utilizando Monitores? ) program relacion_productor_consumidor; Var buffer_numero: integer; numero_depositado: semáforo; numero_recuperado: semáforo; procedure entry Productor var siguiente_resultado: integer; begin while true do begin calcular(siguiente_resultado); P(numero_recuperado); buffer_numero: =siguiente_resultado; V(numero_depositado); end procedure entry Consumidor var siguiente_resultado: integer; begin while true do begin P(numero_depositado); siguiente_resultado: =buffer_numero; V(numero_recuperado); escribir(siguiente_resultado); end Begin inicia_semaforo(numero_depositado, 0); inicia_semaforo(numero_recuperado, 1); parbegein Productor; Consumidor; parend End. Sistemas Operativos Unidad III - Abril 2015 69