Sistemas Operativos INF - 151

Documentos relacionados
Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Procesos concurrentes y problemas en la comunicación y la sincronización

SISTEMAS OPERATIVOS:

Concurrencia de Procesos

Acceso coordinado a recursos compartidos

Unidad 2: Gestión de Procesos

ISO Tema 8,

Programación Concurrente Recopilación de teoría referente a la materia

Material Adicional (SOSD Mod 4) Concurrencia Exclusión mutua y sincronización. Slides de Samuel Oporto Díaz

CONCURRENCIA. Sincronización. Sistemas Operativos y Distribuidos. Prof. Javier Echaiz 1. Material Adicional (SOSD Mod 4)

Unidad 1: Gestión de Procesos

Programación Concurrente y Paralela. Unidad 1 Introducción

Sistemas Operativos. Concurrencia. Concurrencia de procesos. Concurrencia de procesos. Ejecución simultánea de procesos.

Sincronización de procesos

Unidad 2: Gestión de Procesos

Concurrencia. Primitivas IPC con bloqueo

Hilos Secciones Stallings:

Sistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos

Sistemas operativos. Comunicación y sincronización de procesos

*** SOLUCIONES *** SISTEMAS OPERATIVOS Examen Parcial 24 de Abril de 2010

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

Sincronización entre procesos (aka: semáforos)

Concurrencia, exclusión mutua y sincronización.

Sistemas Operativos Tema 6. Concurrencia

Tarea 2. Descripción y Control de Procesos

Capítulo 3. Procesos concurrentes 3.1. Conceptos de programación concurrente La computación concurrente es la simultaneidad en la ejecución de

Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica

Concurrencia: Exclusión mutua y Sincronización

CAPITULO 6. Control de Concurrencia y Recuperación

SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009

Universidad Autónoma de Baja California Facultad de Ciencias Administrativas Unidad Mexicali

Concurrencia. Programación Concurrente. Espera ocupada. Primitivas IPC con bloqueo

Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.

PROGRAMACIÓN CONCURRENTE

Tema 12: El sistema operativo y los procesos

Tipos de Diseño. Ing. Elizabeth Guerrero V.

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

Estructura de los sistemas de cómputo

Teoría de Sistemas Operativos Sincronización Procesos

Tarea #2 Interbloqueo e Inanición.

Estados de un proceso

Introducción a los sistemas operativos. Ing Esp Pedro Alberto Arias Quintero

FUNDAMENTOS BÁSICOS DE LOS SISTEMAS OPERATIVOS Fe de Erratas Actualizada a 12 de septiembre de 2018

Concurrencia Condiciones de Carrera. Guillermo Román Díez

Sistemas multiprogramados

Concurrencia. Programación Concurrente Procesos Comunicación entre Procesos (IPC) con espera ocupada.

1 ( 3,5 puntos) Responda, justificando sus respuestas, a las siguientes cuestiones:

PARADIGMA y LENGUAJES DE PROGRAMACIÓN

SOLUCIONES. Universidad de Las Palmas de Gran Canaria Escuela Universitaria de Informática Facultad de Informática

Facultad de Ingeniería Industrial y de Sistemas v2.0 MA781U INTERBLOQUEO DE PROCESOS

DE SISTEMAS CONCURRENTES

Interbloqueo. Concurrencia: Interbloqueo e Inanición

Concurrencia Monitores. Guillermo Román Díez

Modelo de Cómputo. Programación concurrente

Tema 7. Entrada / Salida

MECANISMOS PARA SINCRONIZACIÓN. Semáforos

Universisdad de Los Andes Facultad de Ingeniería Escuela de Sistemas

Aviso 2: Escriba con buena letra y evite los tachones. Aviso 3: Solución del examen y fecha de revisión en

Participantes: Avila Aida Betancourt Sioly Briceño Susana Rojas Alejandro

6. Enumere tres ventajas de los ULT frente a los KLT.

Sincronización de Procesos

Cuestionario 1-Parte 1

Sistemas Operativos. Sistemas Operativos II ITS EMT CETP 2014 Prof. L. Carámbula

Porque desarrolló el concepto de lista de tareas (pool de Job) que podía ser gestionada de acuerdo a políticas distintas a la FIFO.

Paradigma de paso de mensajes

Concurrencia y paralelismo

Introducción a los Sistemas Operativos

Sistemas Operativos Tema 2: Estructura del computador José Miguel Santos Alexis Quesada Francisco Santana

INDICE 1. Introducción 2. Entrada / Salida: Principios y Programación 3. Procesos

Introducción a los Sistemas Operativos S.O.

Uso de recursos compartidos

Sistemas Operativos. Procesos

Lección 6: Ejemplos de programación con semáforos

PROCESOS E HILOS - Hilo

Ingeniería en Computación

Capítulo 16: Control de la concurrencia

Funcionamiento de la computadora

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009

Manipulación de procesos

Sistemas Operativos. Daniel Rúa Madrid

Unidad 1: Gestión de Procesos

Mensajes. Interbloqueo

Sistemas operativos, 2ª edición

SISTEMAS OPERATIVOS - PRIMERA PARTE Examen Convocatoria Ordinaria, 18 de junio de 2009

TEMA 1: INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS

Tema 4: Gestión de Procesos

Taller de Programación Paralela

SISTEMAS OPERATIVOS Manejo de procesos

PROCESAMIENTO DISTRIBUIDO

Introducción a los Sistemas Operativos

ENTRADA/SALIDA. Universidad San Pablo-CEU Escuela Politécnica Superior Rodrigo García Carmona

Tema 3. Paso de mensajes. mensajes. Bibliografía. Sistemas de paso de mensajes (2) Sistemas de paso de mensajes. Ventajas del paso de.

Tema 1: Programación Multiproceso. Curso

TEMA 10 INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS DISTRIBUIDOS. Introducción Hardware Software Aspectos de diseño

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Transcripción:

Sistemas Operativos INF - 151 MODULO II. PROCESOS 2.3 Concurrencia y Exclusión Mutua 12/10/07 Resumen preparado por Miguel Cotaña

El diseño de SO están relacionados con la gestión de procesos e hilos: Multiprogramación. Gestión de múltiples procesos dentro de un sistema monoprocesador. Multiprocesamiento. Gestión de múltiples procesos dentro de un multiprocesador. Procesamiento distribuido. Gestión de múltiples procesos que ejecutan sobre múltiples sistemas de cómputo distribuidos. 2

Principios de concurrencia Según el diccionario, concurrencia es: El Acaecimiento o concurso de varios sucesos en un mismo tiempo Concurrencia es el conjunto de actividades que se desarrollan de forma simultánea En computación cada una de esas actividades se suele llamar proceso 3

Comunicación entre procesos. Compartición y competencia por los recursos. Sincronización de la ejecución de varios procesos. Asignación del tiempo de procesador a los procesos. 4

Programa y proceso Puede haber múltiples procesos en ejecución que correspondan al mismo programa Ejemplo: Un servidor de aplicaciones donde reside un navegador de Internet y existen varios usuarios ejecutando ese navegador 5

Dos procesos serán concurrentes cuando exista solapamiento (intercalado) en la ejecución de sus instrucciones Tres procesos (independientes) concurrentes ejecutándose al mismo tiempo sobre el sistema operativo (cada proceso corresponde a una instancia del programa del navegador) 6

Un Programa al ponerse en ejecución, puede dar lugar a más de un proceso, c/u de ellos ejecutando una parte del programa Por ejemplo: El programa del navegador de Internet formado por n procesos: uno que controla las acciones del usuario con la interfaz, otro que hace las peticiones al servidor, etc. 7

El Proceso p1.1 y el Proceso p1.2 pueden estar colaborando para hacerle la vida más fácil al usuario El proceso p1.2 y el proceso p2.2 pueden estar compitiendo para acceder a disco 8

En un sistema multiprogramado único, los procesos se entrelazan en el tiempo para ofrecer la apariencia de ejecución simultánea tiempo Proceso 1 bloqueando ejecutando Proceso 2 Proceso 3 Intercalado (multiprogramación, un procesador) 9

En un sistema de múltiples procesadores no sólo es posible entrelazar la ejecución de múltiples procesos sino también solaparlas tiempo Proceso 1 Proceso 2 Proceso 3 Intercalado y solapamiento (multiproceso; 2 procesadores) 10

El entrelazado y el solapamiento son técnicas que pueden verse como ejemplos de procesamiento concurrente. En el caso de un monoprocesador, los problemas surgen de una característica básica de los sistemas multiprogramados: no puede predecirse la velocidad relativa de ejecución de los procesos. Ésta depende de la actividad de los otros procesos, de la forma en que el SO maneja las interrupciones y de las políticas de planificación del SO. 11

Se plantean las siguientes dificultades: 1) La compartición de recursos globales está cargada de peligros. Por ejemplo, si 2 procesos utilizan ambos la misma variable global y ambos realizan lecturas y escritura sobre esa variable, entonces el orden en que se ejecuten las lecturas y escrituras es crítico 12

2) Para el SO es complicado gestionar la asignación de recursos óptimamente. Por ejemplo, un proceso puede solicitar el uso de un canal concreto de E/S, y serle concedido el control, y luego ser suspendido justo antes de utilizar ese canal. 3) Llega a ser muy complicado localizar errores de programación. 13

En un sistema multiprocesador, también se presentan todas las dificultades mencionadas void echo() ent = getchar(); sal = ent; putchar(sal); 14

Es necesario proteger las variables globales compartidas (así como otros recursos globales compartidos) y que la única manera de hacerlo es controlar el código que accede a la variable Hemos ido suponiendo de que se trata de un SO multiprogramado para un monoprocesador. En un sistema multiprocesador, aparecen los mismos problemas de recursos compartidos protegidos, y funcionan las mismas soluciones. 15

Supóngase que no hay mecanismo para controlar los accesos a la variable global compartida: Proceso P1 Proceso P2.. ent = getchar();... ent = getchar(); sal = ent; sal = ent; putchar(sal);.. putchar(sal);.. 16

En el caso de un sistema monoprocesador, el motivo por el que se tiene un problema es que una interrupción puede parar la ejecución de instrucciones en cualquier punto de un proceso. En un sistema multiprocesador, se tiene el mismo motivo y, además, puede suceder porque 2 procesos pueden estar ejecutando simultáneamente y ambos intentando acceder a la misma variable global. Sin embargo, la solución es la misma: controlar los accesos a los recursos compartidos. 17

Condición de carrera Una condición de carrera sucede cuando múltiples procesos o hilos leen y escriben datos de manera que el resultado final depende del orden de ejecución de las instrucciones en los múltiples procesos. Ejemplo1: Considere los procesos P1 y P2, que comparten las variables globales b y c, con valores iniciales b=1 y c=2. En algún punto de su ejecución, P1 ejecuta b=b+1 y en algún punto de su ejecución, P2 ejecuta c=b+c 18

Interacción de procesos Podemos clasificar las formas en que los procesos interaccionan en base al grado en que perciben la existencia de cada uno de los otros: Procesos que no se perciben entre sí. Son procesos independientes que no se pretende que trabajen juntos. Aunque los procesos no estén trabajando juntos, el SO necesita preocuparse de la competencia por recursos. 19

Procesos que se perciben indirectamente entre sí. Son procesos que no están necesariamente al tanto de la presencia de los demás mediante sus respectivos ID de procesos, pero que comparten accesos a algún objeto, como un buffer de E/S. Tales procesos exhiben cooperación en la compartición del objeto común Procesos que se perciben directamente entre sí. Capaces de comunicarse entre sí vía el ID del proceso. Tales procesos exhiben cooperación. 20

Competencia entre procesos por recursos Los procesos concurrentes entran en conflicto entre ellos cuando compiten por el uso del mismo recurso. No existe intercambio de información entre los procesos en competencia. Si 2 procesos desean ambos acceder al mismo recurso único, el SO reservará el recurso para uno de ellos y el otro tendrá que esperar. Por tanto, el proceso al que se le deniega el acceso será ralentizado 21

En el caso de procesos en competencia, deben afrontarse 3 problemas de control: Exclusión mutua Interbloqueo Inanición Recurso crítico Sección crítica 22

Suponiendo que 2 o más procesos requieren acceso a un recurso (impresora) único no compartible. Durante la ejecución, cada proceso estará enviando mandatos al dispositivo de E/S, recibiendo información de estado, enviando o recibiendo datos. Tal recurso es un recurso crítico, y a la porción del programa que lo utiliza como la sección crítica del programa 23

La aplicación de la exclusión mutua crea 2 problemas: interbloqueo e inanición. El interbloqueo se define como: El Bloqueo permanente de un conjunto de procesos que ya sea, compiten por los recursos del sistema o bien se comunican unos con otros. 24

Situación en la que se encuentran un conjunto de procesos, (al menos dos), tal que cada proceso del conjunto espera la ocurrencia de un evento que sólo puede ser provocado por otro proceso del mismo conjunto. Todos los interbloqueos suponen demandas contradictorias de recursos por parte de 2 o más procesos. 25

Un conjunto de procesos está en bloqueo mutuo/interbloqueo si cada proceso del conjunto está esperando un evento que sólo otro proceso del conjunto puede causar. Los bloqueos ocurren en entornos multiprogramación, cuando varios procesos compiten por un número limitado de recursos. El bloqueo ocurre cuando un proceso monopoliza el acceso a un recurso y requiere otro recurso que ha sido ya asignado a un segundo proceso, que a su vez necesita el recurso monopolizado por el primer proceso. 26

Ejemplos: Ley del estado de Kansas: Si dos trenes se aproximan uno al otro en un cruce, ambos harán alto total y ninguno arrancará de nuevo hasta que el otro se haya ido 2 personas llamándose por teléfono mutuamente 27

28

29

Recursos: Son los objetos otorgados/usados por los procesos en un instante dado. Secuencia de eventos necesarios para utilizar un recurso: 1. Solicitar el recurso 2. Utilizar el recurso 3. Liberar el recurso 30

De acuerdo a su estructura real hay 2 tipos: Físicos (dispositivos de HW): Memoria, dispositivos. etc. Lógicos (elemento de información): archivos, semáforos, cerrojos, mensajes, señales, etc. De acuerdo a su uso hay 2 tipos: Reutilizables Consumibles 31

Recursos Reutilizables: Es aquél que puede ser usado por un proceso y no se agota con el uso. Los procesos obtienen recursos que liberan posteriormente para que otros procesos las reutilicen. Ejemplo: Procesadores, canales E/S, memoria principal y secundaria, archivos, BD, etc, 32

Recursos Consumibles Es aquél que puede ser creado (producido) y destruido (consumido). Ej: Interrupciones, señales, mensajes, etc. 33

Un ejemplo de inanición: Suponiendo 3 procesos (P1,P2, P3) requieren todos accesos periódicos al recurso R. Si P1 está en posesión del recurso y P2 y P3 están ambos retenidos, esperando por ese recurso. Cuando P1 termine su sección crítica, debería permitírsele acceso a R a P2 o P3. Suponiendo que el SO le concede acceso a P3 y que P1 solicita acceso otra vez antes de completar su sección crítica. Si el SO le concede acceso a P1 después de que P3 haya terminado, y posteriormente concede alternativamente acceso a P1 y P3, entonces a P2 puede denegársele indefinidamente el acceso al recurso, aunque no suceda interbloqueo 34

En términos abstractos la exclusión mutua, se puede ilustrar: /*PROCESO 1 */ Void P1 while (true) /* código anterior */; entrarcritica (Ra); /* sección crítica */; salircritica (Ra); /* código posterior */; /*PROCESO 2 */ Void P1 while (true) /* código anterior */; entrarcritica (Ra); /* sección crítica */; salircritica (Ra); /* código posterior */; /*PROCESO n */ Void P1 while (true) /* código anterior */; entrarcritica (Ra); /* sección crítica */; salircritica (Ra); /* código posterior */; 35

Cooperación entre procesos vía compartición Cubre procesos que interaccionan con otros procesos sin tener conocimiento explícito de ellos. Por ejemplo, múltiples procesos pueden tener acceso a variables compartidas o a BD. Los procesos pueden usar y actualizar los datos compartidos sin referenciar otros procesos pero saben que otros procesos pueden tener acceso a los mismos. Así, los procesos deben cooperar para asegurar que los datos compartidos son manipulados adecuadamente. 36

Tomando en cuanta que los datos están contenidos en recursos (dispositivos, memoria), los problemas de exclusión mutua, interbloqueo e inanición están presentes de nuevo. La única diferencia es que los datos individuales pueden ser accedidos de dos maneras diferentes, lectura y escritura, y sólo las operaciones de escritura deben ser mutuamente exclusivas 37

Por encima de estos problemas, surge un nuevo requisito: el de la coherencia de datos Ejemplo: P1 y P2 que comparten datos a y b que deben cumplir a=b P1 P2 (I 11 ) a = a + 1; (I 21 ) b = b * 2; (I 12 ) b = b + 1; (I 22 ) a = a * 2; Supóngase ahora la secuencia de ejecución siguiente: (I 11, I 21 I 12 I 22 ) Sí el estado es inicialmente consistente, cada proceso tomado por separado dejará los datos compartidos en un estado consistente. 38

Cooperación entre procesos vía comunicación En los 2 casos tratados, cada proceso tiene su propio entorno aislado que no incluye a los otro procesos. Las interrelaciones entre los proceso son indirectas. En ambos casos hay cierta compartición. En el caso de la competencia hay recursos compartidos sin ser conscientes de los otros procesos. En el segundo caso, hay compartición de valores y aunque cada proceso no es explícitamente consciente de los demás procesos, es conciente de la necesidad de mantener la integridad de datos. 39

Cuando los procesos cooperan vía comunicación, en cambio, los diversos procesos involucrados participan en un esfuerzo común que los vincula a todos ellos. La comunicación proporciona una manera de sincronizar o coordinar actividades varias. Típicamente, la comunicación se fundamenta en mensajes de algún tipo. Las primitivas de envío y recepción de mensajes deben ser proporcionadas como parte del lenguaje de programación o por el núcleo del SO. 40

Requisitos para la exclusión mutua Cualquier mecanismo o técnica que vaya a proporcionar exclusión mutua debería contemplar los siguientes requisitos: 1. La exclusión mutua debe hacerse cumplir: sólo se permite un proceso al tiempo dentro de su sección crítica, de entre todos los procesos que tienen secciones críticas para el mismo recurso compartido. 2. Un proceso que se pare en su sección no crítica debe hacerlo sin interferir con otros procesos. 41

3. No debe ser posible que un proceso que solicite acceso a una sección crítica sea postergado indefinidamente: ni interbloqueo ni inanición. 4. Cuando ningún proceso esté en una sección crítica, a cualquier proceso que solicite entrar en su sección crítica debe permitírsele entrar sin demora. 5. No se hacen suposiciones sobre las velocidades relativas de los procesos ni sobre el número de procesadores. 6. Un proceso permanece dentro de su sección crítica sólo por un tiempo finito. 42

Exclusión mutua: soporte hardware Deshabilitar interrupciones En una máquina monoprocesador, los procesos concurrentes no pueden solaparse, sólo pueden entrelazarse. Es más, un proceso continuará ejecutando hasta que invoque un servicio del SO o hasta que sea interrumpido. Por tanto, para garantizar la exclusión mutua, basta con impedir que un proceso sea interrumpido 43

Un proceso puede cumplir la exclusión mutua, de la siguiente forma: While (true) /*deshabilitar interrupciones */; /*sección crítica */; /*habilitar interrupciones */; /*resto */; 44

Instrucciones máquina especiales A un nivel de hardware, el acceso a una posición de memoria excluye cualquier otro acceso a la misma posición. Con este fundamento, los diseñadores de procesadores han propuesto varias instrucciones máquina que llevan a cabo 2 acciones atómicamente, como leer y escribir o leer y comprobar, sobre una única posición de memoria con un único ciclo de búsqueda de instrucción. 45

Durante la ejecución de la instrucción, el acceso a la posición de memoria se le bloquea a toda otra instrucción que referencie esa posición. Típicamente, estas acciones se realizan en un único ciclo de instrucción. Se consideran: Instrucción Test and Set Instrucción Exchange 46

Instrucción Test and Set (comprueba y establece). Esta instrucción puede definirse como: boolean testset (int i) if (i==o) i=1; return true; else return false; 47

/* programa exclusión mutua */ const int n= /* número de procesos */; int cerrojo; void P(int i) while (true) while (!testset (cerrojo)) /* no hacer nada */; /* sección crítica */; cerrojo=0; /* resto */ void main() cerrojo=0; paralelos (P(1), P(2),..,P(n)); 48

Instrucción Exchange. La instrucción exchange como: (intercambio) puede definirse void exchange (int registro, int memoria) int temp; temp = memoria; memoria = registro; registro = temp; 49

/* programa exclusión mutua */ const int n= /* número de procesos */; int cerrojo; void P(int i) int llavei = 1; while (true) do exchange (llavei, cerrojo) while (llavei!=0); /* sección crítica */; exchange (llavei, cerrojo); /* resto */ void main() cerrojo=0; paralelos (P(1), P(2),..,P(n)); 50

Propiedades de la solución instrucción máquina. El uso de una instrucción máquina especial para conseguir exclusión mutua tiene ciertas ventajas: Es aplicable a cualquier número de procesos sobre un procesador único o multiprocesador de MP compartida. Es simple y, por tanto, fácil de verificar. Puede ser utilizado para dar soporte a múltiples secciones críticas: cada sección crítica puede ser definida por su propia variable. 51

Entre las desventajas serias: Se emplea espera activa. Mientras un proceso está esperando para acceder a una sección crítica, continúa consumiendo tiempo de procesador. Es posible la inanición. Cuando un proceso abandona su sección crítica y hay más de un proceso esperando, la selección del proceso en espera es arbitraria. Es posible el interbloqueo. 52

Semáforos Una de las soluciones más famosas y significantes del problema de cooperación entre procesos paralelos fue la propuesta de Dijkstra. Su solución introdujo un nuevo tipo de variables, llamadas semáforos, y 2 operaciones especiales. 53

La propuesta de Dijkstra es el resultado de su crítica a las soluciones con espera activa. Y dice, cuando un proceso está ejecutando las instrucciones de la sección crítica, ningún otro puede estar en la sección. Además, si alguno quiere entrar, tiene que esperar hasta que termine la ejecución del proceso en turno. 54

Durante este tiempo nada se puede cambiar, entonces no tiene caso que el proceso esté esperando, repitiendo inútilmente la revisión del valor de una variable (o más). Mejor que descanse abriendo la posibilidad de que el tiempo de procesador lo aproveche quien lo necesite verdaderamente. La idea básica es la suspensión de los procesos que no pueden entrar y su reactivación, cuando algún proceso sale de la sección. 55

Dos o más procesos pueden cooperar por medio de simples señales, tales que un proceso pueda ser obligado a parar en un lugar específico hasta que haya recibido una señal específica. Cualquier requisito complejo de coordinación puede ser satisfecho con la estructura de señales apropiada 56

Para la señalización, se utiliza la variable semáforo. Para transmitir una señal vía el semáforo s, el proceso ejecutará la primitiva semsignal(s). Para recibir una señal vía el semáforo s, el proceso ejecutará la primitiva semwait(s); si la correspondiente señal no se ha transmitido todavía, el proceso se suspenderá hasta que la transmisión tenga lugar. 57

Las 3 operaciones son: 1. Un semáforo puede ser inicializado a un valor no negativo 2. La operación semwait decrementa el valor del semáforo. Si el valor pasa a ser negativo, entonces el proceso que está ejecutando semwait se bloquea. En otro caso, el proceso continúa su ejecución. 3. La operación SemSignal incrementa el valor del semáforo. Si el valor es menor o igual que cero, entonces se desbloquea uno de los procesos bloqueados en la operación semwait. 58

Struct semaphore int cuenta; queuetype cola; void semwait(semaphore s) s.cuenta--; if (s.cuenta<0) poner este proceso en s.cola; bloquear este proceso; void semsignal(semaphore s) s.cuenta++; if (s.cuenta <= 0) extraer un proceso P de s.cola; poner el proceso P en la lista de listos; Definición de primitivas del semáforo 59

Un semáforo binario, define 3 operaciones 1. Un semáforo binario puede ser de inicio 0 o 1 2. La operación semwaitb comprueba el valor del semáforo. Si el valor es cero, entonces el proceso que está ejecutando samwaitb se bloquea. Si el valor es 1, entonces se cambia el valor a cero y el proceso continúa su ejecución. 3. La operación semsignalb comprueba si hay algún proceso bloqueado en el semáforo. Si lo hay, entonces se desbloquea uno de los procesos bloqueados en la operación semwaitb. Si hay bloqueados, entonces el valor del semáforo se pone a uno. 60

Struct binary_semaphore enum cero, uno valor; queuetype cola; void semwaitb(binary_semaphore s) if (s.valor == 1) s.valor = 0; else poner este proceso en s.cola; bloquear este proceso; void semsignalb(binary_semaphore s) if (esta_vacia(s.cola)) s.valor = 1; else extraer un proceso P de s.cola; poner el proceso P en la lista de listos; Def. de prim. del semáforo binario o mutex 61

El orden en que son extraídos de la cola es FIFO: el proceso que lleve más tiempo bloqueado es el primero en ser extraído de la cola; un semáforo cuya definición incluye esta política se denomina semáforo fuerte. Un semáforo que no especifica el orden en que los procesos son extraídos de la cola es un semáforo débil. 62

Ejemplo de mecanismo de semáforo fuerte: 1 procesador A s = 1 C D B Cola de bloqueados semáforo Cola de listos 2 B s = 0 A C D 3 Cola de bloqueados D Cola de listos s = -1 A C Cola de bloqueados Cola de listos 63

4 D s = 0 B A C Cola de bloqueados Cola de listos 5 C s = 0 D B A Cola de bloqueados Cola de listos 6 D 7 B A Cola de bloqueados C s = -3 D Cola de listos B A Cola de bloqueados s = -2 Cola de listos C 64

Exclusión mutua usando semáforos El problema de la exclusión mutua se puede resolver correctamente usando los semáforos con sus respectivas operaciones. Los semáforos fuertes garantizan estar libres de inanición, mientras que los semáforos débiles no. Se asumirán semáforos fuertes dado que son más convenientes y porque ésta es la forma típica del semáforo proporcionado por los SO. 65

/* programa exclusión mutua */ const int n= /* número de procesos */; semafore s = 1; void P(int i) while (true) semwait(s); /* sección crítica */; semsignal(s); /* resto */ void main() paralelos (P(1), P(2),..,P(n)); 66

El problema productor/consumidor En algún sistema están trabajando en paralelo N (N>=1) procesos de productores y K(K>=1) procesos consumidores. Cada proceso productor está preparando una porción de datos, mandándola después para que la pueda usar alguno de los consumidores. Cada proceso consumidor recibe una porción de datos y la consume 67

Productor: while (true) /*preparación de datos*/; /*envio de datos*/; Consumidor: while (true) /*recepción de datos*/; /*consumo de datos*/; 68

Es decir, hay uno o más procesos generando algún tipo de datos (registros, caracteres) y poniéndolos en un buffer. Hay un único consumidor que está extrayendo datos de dicho buffer de uno en uno. El sistema está obligado a impedir la superposición de las operaciones sobre los datos. Asumiremos que el buffer es infinito (buffer no restringido) y consiste en un vector de datos: 69

Productor: while (true) /*producir dato v */; b[entra] = v; entra++; Consumidor: while (true) while (entra <= sale) /*no hacer nada*/; w = b[sale]; sale++ /*consumir dato w */ 70

/* programa productor consumidor con */ /* buffer infinito usando semáforos binarios */ int n; binary_semaphore s = 1; binary_semaphore retardo = 0; void productor() while (true) producir(); semwaitb(s); anyadir(); n++; if (n==1) semsignalb(retardo); semsignalb(s) 71

void consumidor() int m; /* una variable local */ semwaitb(retardo); while (true) semwaitb(s); extraer(); n--; m = n; semsignalb(s); consumir(); if (m==0) semwaitb(retardo); void main() n = 0; paralelos (productor, consumidor); 72

Monitores Los semáforos proporcionan una herramienta potente y flexible para conseguir la exclusión mutua y para la coordinación de procesos. Sin embargo, puede ser difícil producir un programa correcto utilizando semáforos. La dificultad es que las operaciones semwait semsignal pueden estar dispersas a través de un programa y no resulta fácil ver el efecto global de estas operaciones sobre los semáforos a los que afectan. y 73

El monitor es una construcción del lenguaje de programación que proporciona una funcionalidad equivalente a la de los semáforos pero es más fácil de controlar. La construcción monitor ha sido implementada en cierto número de lenguajes de programación, incluyendo Pascal Concurrente, Pascal-Plus, Modula-2, Modula-3 y Java. También ha sido implementada como una biblioteca de programa. 74

Monitor con señal Un monitor es un módulo software consistente en uno o más procedimientos, una secuencia de inicialización y datos locales. Las características son: Las variables locales de datos son solo accesibles por los procedimientos del monitor y no por ningún procedimiento externo Un proceso entra en el monitor invocando uno de sus procedimientos 75

Sólo un proceso puede estar ejecutando dentro del monitor al tiempo; cualquier otro proceso que haya invocado al monitor se bloquea, en espera de que el monitor quede disponible Las 2 primeras características guardan semejanza con las de los objetos en software OO. 76

/* programa productor consumidor usando monitor */ monitor bufferacotado; char buffer[n]; int dentro, fuera; int cuenta; cond nolleno, novacio; void anyadir(char x) if (cuenta == N) cwait(nolleno); buffer[dentro] = x; dentro = (dentro +1) % N; cuenta++; csignal(novacio); Void extraer (char x) if (cuenta == 0) cwait(novacio); x = buffer[fuera]; fuera = (fuera + 1) % N; cuenta--; csignal(no lleno); dentro = 0; fuera = 0; cuenta = 0; 77

void productor() char x; while (true) producir(x); anyadir(x); void consumidor() char x; while (true) extraer(x); consumir(x); Void main() paralelos (productor, consumidor); 78

Paso de mensajes Cuando los procesos interaccionan entre sí, deben satisfacerse 2 requisitos fundamentales: sincronización y comunicación. Los proceso necesitan ser sincronizados para conseguir exclusión mutua. Los procesos cooperantes pueden necesitar intercambiar información. Un enfoque que proporciona ambas funciones es el paso de mensajes. 79

El paso de mensajes tiene la ventaja añadida de que se presta a ser implementado tanto en sistemas distribuidos como en multiprocesadores de memoria compartida y sistemas monoprocesador. La funcionalidad real del paso de mensajes se da en forma de un par de primitivas: send(destino, mensaje) receive(origen, mensaje) 80

Formato de mensaje S1 S1 PUERTO R1 PUERTO R1 a) uno a uno Sn b) Muchos a uno R1 S1 R1 S1 BUZON BUZON c) uno a muchos Sn Sn d) Muchos a muchos Rn 81