Concurrencia. Programación Concurrente Procesos Comunicación entre Procesos

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

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

Concurrencia. Programación Concurrente Procesos Comunicación entre Procesos

Concurrencia. Primitivas IPC con bloqueo

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

Concurrencia. Paso de Mensajes Control de Recursos Deadlock

Concurrencia de Procesos

ISO Tema 8,

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

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

Sistemas multiprogramados

Concurrencia. Primitivas IPC con bloqueo

SISTEMAS OPERATIVOS Manejo de procesos

Acceso coordinado a recursos compartidos

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

Comunicación y sincronización

Hilos Secciones Stallings:

Guillermo Román Díez

Lenguajes de Programación

Sincronización de procesos

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS

Unidad 1: Gestión de Procesos

Sistemas Operativos (Parte 2)

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

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

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

Sistemas Operativos. Procesos

PROCESAMIENTO DISTRIBUIDO

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

SISTEMAS OPERATIVOS:

MECANISMOS PARA SINCRONIZACIÓN. Semáforos

PROCESOS E HILOS - Hilo

Procesos. Procesos. Sistemas Operativos Procesos KMC 2017

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

Sistemas Operativos Tema 6. Concurrencia

Uso de recursos compartidos

TEMA 1. FUNDAMENTOS DE LA CONCURRENCIA

Sobre la programación concurrente

dit Programación concurrente Sincronización condicional UPM

7. Programación Concurrente

Concurrencia Monitores. Guillermo Román Díez

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

PROGRAMACIÓN CONCURRENTE

Simultaneidad + Sincronización

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda

Procesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo)

Concurrencia. Concurrencia

Tema 12: El sistema operativo y los procesos

Cena de filosofos y sincronizacion java

Por ejemplo, el siguiente error conduce inmediatamente a un deadlock:

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

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

Tema 12: Programación multihilo

Unidad 3 Sistemas con memoria común

Sistemas Operativos. MODULO I. ANTECEDENTES 1.2 introducción a los ordenadores

CAPITULO 6. Control de Concurrencia y Recuperación

Unidad 1: Gestión de Procesos

Tema 4: Gestión de Procesos

Arquitecturas cliente/servidor

1- UNIVERSIDAD DE CIENCIAS EMPRESARIALES Y SOCIALES FACULTAD DE CIENCIAS EMPRESARIALES. Tecnicatura Universitaria en Programación de Sistemas

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

El kernel forma parte del sistema operativo, para ser más claros es el núcleo, la parte más importante.

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

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

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

Sistemas Operativos- Evolución Histórica

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

Introduccion a Sistemas Operativos. Ej: Linux

Unidad 2: Gestión de Procesos

Manipulación de procesos

Tema II. Descripción y control de procesos. UNED Manuel Fernández Barcell. Blog:

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

Necesidad de Protección

TEMA 9. SISTEMAS OPERATIVOS DISTRIBUIDOS

UPM Concurrencia en Java

Teoría de Sistemas Operativos Sincronización Procesos

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

Programación concurrente

Concurrencia y paralelismo

Laboratorio I Java Threads (Silberschatz Galvin)

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

Tema 1: Programación Multiproceso. Curso

DE SISTEMAS CONCURRENTES

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

ESCUELA DE INGENIERIA Informática Y Sistemas

TEMA 1. Introducción a las arquitecturas distribuidas

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Introducción a los Sistemas Operativos

TEMA 1. FUNDAMENTOS DE LA CONCURRENCIA. Ingeniería en Informática Curso

Contenidos. Contenidos. Bibliografía. Paralelismo vs concurrencia. Qué es la concurrencia? Ingeniería en Informática Curso

Guía práctica de estudio 12: Hilos

Ingeniería en Computación

Procesos Definición y Estados

Interbloqueo. Concurrencia: Interbloqueo e Inanición

Paralelismo _Arquitectura de Computadoras IS603

Facultad de Ingeniería Industrial y de Sistemas v1.0 MA781U PROCESOS DISTRIBUIDOS

Transacciones y Control de concurrencia

Transcripción:

Concurrencia Programación Concurrente Procesos Comunicación entre Procesos

Introducción a Procesos Todas las computadoras moderas realizan varias cosas al mismo tiempo. En cada instante la CPU ejecuta un único programa. Existen programas con un único hilo de control. Los sistemas de tiempo real son inherentemente concurrentes. 2

Programación secuencial vs programación concurrente Pascal, C, Fortran, Cobol Java, Ada, Posix Secuenciales Concurrentes único hilo de control varios hilos de control 3

Concurrencia Son la notación y las técnicas de programación que expresan el paralelismo potencial. Un programa concurrente es un conjunto de procesos autónomos que se ejecutan en paralelo. 4

Procesos concurrentes El trabajar con procesos concurrentes añade complejidad a la tarea de programar. Cuáles son entonces los beneficios que aporta la programación concurrente? 5

Beneficios de la programación concurrente Mejor aprovechamiento de la CPU. Velocidad de ejecución. Solución de problemas de naturaleza concurrente: Sistemas de control Tecnologías web Aplicaciones basadas en interfaces de usuarios Simulación SGDB 6

Proceso Es una instancia de ejecución de un programa. Incluye un contador de programa, registros, variables, etc. Tiene un ciclo de vida, es decir pasa por distintos estados. 7

8 El modelo de los procesos secuenciales

El modelo de los procesos secuenciales La CPU conmuta de un proceso a otro. La velocidad a la cual un proceso realiza su cómputo no es uniforme y probablemente ni siquiera es reproducible. Los procesos no deben programarse bajo suposiciones preconcebidas sobre su velocidad de ejecución. Cuando un proceso tiene requerimientos de tiempo real críticos es necesario tomar medidas especiales para asegurar que efectivamente los sucesos ocurran dentro de ciertos límites de tiempo. 9

El modelo de los procesos secuenciales Un proceso tiene un programa, entrada, salida y un estado. Un único procesador puede compartirse entre varios procesos utilizando un algoritmo de planificación que determine cuándo hay que detener el trabajo sobre un proceso y pasar a atender a otro diferente. 10

Ciclo de vida de un proceso nacido No existente 11 listo 4 3 bloqueado 2 ejecución terminado 1 1. El proceso se bloquea esperando un dato 2. El planificador selecciona otro proceso 3. El planificador selecciona este proceso 4. El dato está disponible

Creación de un proceso 1. La inicialización del sistema 2. La ejecución por parte de un proceso (en ejecución) de una llamada al sistema de creación de un nuevo proceso. 3. La petición por parte del usuario de la creación de un nuevo proceso. 4. El inicio de un trabajo en batch. 12

Finalización de un proceso 13 1. Finaliza la ejecución de su cuerpo. 2. Ejecución de alguna sentencia de auto finalización. 3. Condición de error sin tratar. 4. Aborto por medio de la intervención de otro proceso. 5. Nunca: procesos que se ejecutan en bloques que no terminan. 6. Cuando ya no son necesarios.

Programa concurrente Es un conjunto de procesos secuenciales autónomos que se ejecutan en paralelo 14

Implementación de un conjunto de procesos 1. Multiplexar sus ejecuciones en un único procesador (multiprogramación). 2. Multiplexar sus ejecuciones en un sistema multiprocesador con acceso a memoria compartida (multiprocesamiento). 3. Multiplexar sus ejecuciones en diversos procesadores que no comparten memoria (sistema distribuido). 15

Ejecución de un programa concurrente Los procesos deben ser creados, distribuidos en los procesadores y finalizados. Estas actividades la realiza el núcleo de ejecución conocido como Run Time System Support (RTSS). Se encarga de la creación, terminación y multiplexado de los procesos 16

Run Time System Support Estructura software programada como parte de la aplicación (Modula-2). Sistema software generado junto al código objeto del programa por el compilador (Ada y Java). Estructura hardware microcodificada en el procesador. Es más eficiente (Occam2). 17

Quién provee los mecanismos de concurrencia? Sistema operativo (SO de Tiempo real) Lenguaje (lenguaje que proporciona mecanismos para concurrencia) 18

Ejecución de los procesos Todos los SO tiene formas de crear procesos. Cada proceso se ejecuta en su propia máquina virtual. Los SO modernos permiten crear hilos (procesos ligeros) dentro de la misma máquina virtual. 19

Ventajas si el lenguaje proporciona los mecanismos de concurrencia Programas más legibles. Programas más portables. Si el sistema es embebido puede que no tenga un SO residente. 20

Ventajas si el SO proporciona la concurrencia El modelo de concurrencia es el mismo para todos los lenguajes. Puede no ser fácil implementar el modelo de concurrencia sobre algún modelo de SO. 21

Threads Hay situaciones en las que es deseable contar con múltiples hilos de control (threads) en el mismo espacio de direcciones ejecutándose quasi-paralelamente, como si fueran procesos separados (excepto que comparten el mismo espacio de direcciones). 22

Threads Tener múltiples threads ejecutándose en paralelo dentro de un proceso es análogo a tener múltiples procesos ejecutándose en paralelo dentro de un ordenador. Los threads comparten el espacio de direcciones (variables globales), archivos abiertos y otros recursos. Se los suele llamar procesos ligeros (lightweight process). También se utiliza el término de multihilo (multithreaded) para describir la situación en la cual se permite que haya múltiples threads en el mismo proceso. 23

24 Threads

Threads Un thread puede estar en cualquiera de los estados de un proceso tradicional: en ejecución, bloqueado, listo o terminado. Un thread en ejecución tiene actualmente la CPU y está activo. Un thread bloqueado está esperando a que algún suceso lo desbloquee. Un thread puede bloquearse esperando a que tenga lugar algún suceso externo o a que algún otro thread lo desbloquee. Un thread listo está planificado para ejecutarse y lo hace tan pronto como le llega su turno. 25 Las transiciones entre los estados de un thread son las mismas que las transiciones entre los estados de un proceso. código

Programación concurrente Los lenguajes concurrentes tiene elementos para: Crear procesos Sincronizar procesos Comunicar procesos 26

Comportamiento de procesos Independientes: no se sincronizan ni comunican (son muy raros). Cooperativos: se comunican y sincronizan sus actividades. Competitivos: compiten por recursos del sistema. 27

Sincronizar y Comunicar Sincronizar: Satisfacer las restricciones en el enlazado de las acciones de los distintos procesos. Comunicar: pasar información de un proceso a otro. 28

Modelo de concurrencia Estructura: nro de procesos fijo o variable. Nivel: paralelismo soportado. Granularidad: muchos o pocos procesos. Inicialización: paso de parámetros, o comunicación explícita después de su ejecución Finalización: término, error, aborto, nunca, suicidio, no son necesarios Representación: proceso responsable de la creación (padre/hijo) y proceso afectado por su finalización (guardián/dependiente). 29

Sincronizar y Comunicar Variables compartidas: objetos a los que puede acceder más de un proceso Paso de mensajes: intercambio explícito de datos entre dos procesos mediante el paso de un mensaje mediante alguna forma que brinda el SO o el propio lenguaje. 30

Comunicación entre procesos (IPC) Cómo un proceso puede pasarle información a otro. Cómo asegurar que dos o más procesos no se interfieran mientras realizan tareas críticas. Cómo secuenciar correctamente cuando existen dependencias. 31

Sincronización y comunicación basada en variables compartidas Son objetos a los que puede acceder más de un proceso. La comunicación se logra accediendo a dichas variables cuando sea necesario. 32 Trae problemas

Variables compartidas Considere dos procesos que actualizan una variable compartida, X, mediante la sentencia: X:= X+1 1. Carga el valor de X en algún registro. 2. Incrementa el valor en el registro en 1. 3. Almacena el valor del registro de nuevo en X. Como ninguna de las tres operaciones es indivisible, dos procesos que actualicen la variable simultáneamente generarían un entrelazamiento que podría producir un resultado incorrecto. 33

Variables compartidas Las situaciones donde los resultados dependen del orden en que se ejecutan los procesos se llaman Condiciones de Competencia. Las partes de un proceso que tienen acceso a las variables compartidas han de ejecutarse indivisiblemente unas respecto a las otras. Estas partes se denominan Secciones Críticas. La protección requerida se conoce como Exclusión Mutua. 34

Variables compartidas Sección crítica: secuencia de instrucciones que debe ejecutarse sin perder el control, y afecta variables compartidas. Si un proceso está ejecutando código de su sección crítica, ningún otro proceso puede estar ejecutando código de su sección crítica. 35

El problema de la sección crítica(sc) Intenta sistematizar el estudio de la sincronización. Sean n procesos que tienen datos compartidos. Cada proceso tiene un segmento de código llamado SC en el cual se accede a los datos compartidos. Se pretende que cuando un proceso está en su sección crítica, ningún otro esté en su SC. Sección de entrada Sección crítica Sección de salida Sección siguientes 36

Secciones o regiones críticas Para obtener una solución se deben cumplir: 1. Ningún par de procesos pueden estar simultáneamente dentro de sus regiones críticas. 2. No debe hacerse ninguna suposición sobre la velocidad o el número de CPUs. 3. Ningún proceso fuera de su región crítica puede bloquear a otros procesos. 4. Ningún proceso deberá tener que esperar infinitamente para entrar en su región crítica. 37

Sincronizaciones necesarias en la programación concurrente Exclusión mutua: es el mecanismo que asegura que sólo un proceso está haciendo algo en un instante determinado. Sincronización para proteger una sección crítica. Es necesario si dos procesos comparten variables. Sincronización condicionada: necesaria cuando un proceso necesita realizar alguna acción, sólo después que se haya cumplido una condición. 38

Exclusión Mutua con Espera Ocupada Posibles soluciones: Inhabilitación de interrupciones Variables de cerradura Alternancia estricta Solución de Peterson 39

Inhabilitación de Interrupciones Se inhabilitan las interrupciones antes de entrar a la sección crítica. Se rehabilitan al salir. La CPU no podrá interrumpir la ejecución por timeout. Ventaja: muy simple Desventajas: Los procesos de usuario no pueden deshabilitar las interrupciones 40 Si hay más de un procesador no funciona, pues la inhabilitación afecta a un solo CPU.

Variables de Cerradura Variable compartida inicialmente en 0. Antes de entrar a su sección crítica un proceso chequea la bandera: Si está 0, el proceso la setea en 1 y entra a su SC. Si está en 1, espera hasta que se ponga en 0. Desventajas: Espera ocupada. No funciona por condiciones de competencia. 41

Alternancia Estricta 42 Desventajas: Ineficiente si un proceso es más lento que el otro. Viola la condición 3. Espera ocupada.

43 Solucion de Peterson

Primitivas de IPC con bloqueo Son primitivas que bloquean al proceso que las invoca. Permite a la CPU continuar sin desperdiciar tiempo como en la espera ocupada. Sleep es una llamada al sistema que provoca que el proceso que la invoca se bloquee, esto es, se suspenda hasta que otro proceso lo despierte. Wakeup tiene un parámetro, que es el proceso a ser despertado. 44

El problema del Productor-Consumidor 45 Son aquellos problemas en los que existe un conjunto de procesos que producen información que otros procesos consumen, siendo diferentes las velocidades de producción y consumo de la información. Este desajuste en las velocidades, hace necesario que se establezca una sincronización entre los procesos de manera que la información no se pierda ni se duplique, consumiéndose en el orden en que es producida.

El problema del Productor-Consumidor código 46

Variables compartidas Semáforos. Monitores tipos protegidos. Métodos sincronizados. 47

Semáforos Los introdujo Dikstra en 1968. Permiten resolver la mayoría de los problemas de sincronización entre procesos y forman parte del diseño de muchos sistemas operativos y de lenguajes de programación concurrentes. 48

Semáforos Es una estructura de datos: con una variable tipo entera. una cola de procesos en espera. typedef semaforo { int contador; cola: lista de procesos; } 49

Semáforos 50 down(s) sleep(s) wait(s) Espera(S) Mientras S sea cero suspende el proceso y lo ingresa a la cola asociada. Decrementa el contador. up(s) wakeup(s) notify() Signal(S) Incrementa el contador. Si el resultado es positivo despierta a un proceso que se encuentra en la cola (y le permite completar su down).

Semáforos public final class Semaforo { String nombre; int s; // constructor public synchronized void down() { while (s == 0) { try { wait(); } catch (InterruptedException e) {} } s--; } 51 } public synchronized void up() { s++; notify(); }

Sincronización de condición con semáforos var S : semaforo (inicialmente en 0) 52 process p1... wait(s); //espera hasta que S=1... end p1; process p2... signal(s);... end p2; El uso de wait y signal se da en dos procesos por separado. En uno se ejecuta wait y en el otro signal.

Solución al problema del Productor- Consumidor con semáforos tuberia.full.down(); tuberia.mutex.down(); c = tuberia.consumir(); tuberia.mutex.up(); tuberia.empty.up(); tuberia.empty.down(); tuberia.mutex.down(); tuberia.producir(c); tuberia.mutex.up(); tuberia.full.up(); código 53

Características de los semáforos Los semáforos tienen algunas características que pueden generar incovenientes: las variables compartidas son globales a todos los procesos. las acciones que acceden y modifican dichas variables están diseminadas por los procesos. para poder decir algo del estado de las variables compartidas, es necesario mirar todo el código. la adición de un nuevo proceso puede requerir verificar que el uso de las variables compartidas es el adecuado. 54 Programas poco escalables

Críticas a los semaforos Si el semáforo se ubicó en un lugar erróneo falla No se garantiza la exclusión mutua Posible solución : monitores 55

Monitores Es un conjunto de procedimientos que proporciona el acceso con exclusión mutua a un recurso o conjunto de recursos (datos o dispositivos) compartidos por un grupo de procesos. Los procedimientos van encapsulados dentro de un módulo que tiene la propiedad especial de que sólo un proceso puede estar activo cada vez para ejecutar un procedimiento del monitor. 56

Características de un monitor Es un TAD: uso independiente de la implementación. el usuario no conoce la implementación. nada se sabe del orden en que se van a invocar acciones del monitor. por lo que necesita una correcta especificación. 57

Funcionamiento de un monitor Respecto a la sincronización: la exclusión mutua se asegura por definición: por lo tanto, sólo un proceso puede estar ejecutando acciones de un monitor en un momento dado. aunque varios procesos pueden en ese momento ejecutar acciones que nada tengan que ver con el monitor. 58

Funcionamiento de un monitor la sincronización condicionada: cada proceso puede requerir una sincronización distinta, por lo que hay que programar cada caso. para ello, se usarán 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 59

Monitores Existe necesidad de sincronización de condición. Se maneja con dos operadores que se llaman wait y signal. 60

Monitores Un wait siempre bloquea y se ubica en una cola asociada a esa variable de condición. Cuando un proceso bloqueado libera su bloqueo permitirá ingresar a otro proceso. Cuando un proceso ejecuta una operación signal, liberará un proceso bloqueado. Productor-Consumidor con monitores código 61

Críticas a monitores Solución elegante a problemas de exclusión mutua. No soluciona bien las sincronizaciones de variables de condición. Sólo lo implementan muy pocos lenguajes (Mesa, Pascal Concurrente y Modula-1) 62

Métodos sincronizados Es el concepto de monitor implementado en el paradigma de Orientación a Objetos Se utilizan en lenguajes como Java, que tiene la concurrencia totalmente integrada. 63

Métodos sincronizados Los métodos se califican con el modificador synchronized. Puede existir también synchronized a nivel de bloque. 64

Sincronizacion y comunicación basada en mensajes El envío de mensajes se usa tanto para sincronizar como para comunicar. Se necesita un proceso emisor y uno receptor. Información para intercambiar. Operaciones básicas son: Enviar (mensaje) (, dest) Recibir (mensaje) (, fuente) 65

Paso de mensajes Se debe establecer un enlace entre receptor y emisor: Modelo de sincronización. Cómo nombrar los procesos. Estructura del mensaje. Confiabilidad 66

Modelo de sincronización Sincronización implícita: un proceso no puede recibir un mensaje antes que el emisor lo haya emitido. El receptor puede leer una variable que no haya sido escrita por el emisor. Un proceso que ejecuta una recepción de mensaje incondicional cuando no existe ningún mensaje, permanecerá suspendido hasta que llegue el mensaje. 67

Modelo de sincronización de procesos Operación envía (send): Asíncrona: el emisor continua trabajando sin saber si el mensaje llegó o no (o se envió completamente o no). Síncrona: el emisor continua trabajando sólo cuando se recibió el mensaje (o cuando se envió completamente). Invocación remota: el emisor continúa sólo cuando se recibió una respuesta desde el receptor. 68

Primitivas con o sin bloqueo send síncrono o con bloqueo: mientras se envía el mensaje, el proceso emisor se bloquea (la instrucción siguiente se ejecuta una vez que el mensaje se haya enviado en su totalidad). send asíncrono o sin bloqueo: Cuándo vuelve a estar disponible el búffer? 69

Primitivas con o sin bloqueo send con bloqueo (CPU inactivo durante la transmisión de los mensajes). send sin bloqueo, con copia (se desperdicia el tiempo del CPU para la copia adicional). send sin bloqueo, con interrupción (dificulta la programación). 70

Nombrado de procesos Dirección: nombrado directo: envía <msj> <proceso> nombrado indirecto: envía <msj> <buzón> Simetría: simétrico: si el emisor y el receptor se nombran entre sí envía <msj> <proceso> espera <msj> <proceso> 71 asimétrico: acepta mensajes de cualquier proceso espera <msj>

Nombrado de procesos Una dirección se refiere a un proceso específico (primitiva sin almacenamiento en buffers). Una dirección se refiere a un buzón - mailbox - (primitiva con almacenamiento en buffers) Una llamada a receive elimina un mensaje del buzón o se bloquea. 72

Estructura del mensaje Idealmente: cualquier objeto. Cada lenguaje ha impuesto sus restricciones. 73

Primitivas confiables vs. no confiables Los mensajes se pueden perder. Si send es no confiable el sistema no garantiza la entrega (se deja en manos de los usuarios). Se puede exigir al sistema del receptor enviar un acuse de recibo (acknowledgement). Se puede utilizar la respuesta del servidor como acuse de recibo. 74

75 Primitivas confiables vs. no confiables

Acciones atómicas Hasta aquí la comunicación entre dos procesos se expresó como una comunicación simple. No siempre ocurre así: Ej: extracción por cajero automático Necesito que todos vean un estado consistente del sistema. Estado: valores de las variables en un momento dado de tiempo. 76

Acciones Atómicas Traspaso de fondos de una cuenta bancaria a otra: Proceso de pedido de transferencia Proceso de autenticación de cliente Proceso de autenticación de cuenta a la que se transfiere Proceso de debito Proceso de Acreditación 77 Acción atómica

Acciones Atómicas 78 Una acción es atómica si los procesos que la realizan no saben de la existencia de ningún otro proceso activo, y ningún otro proceso activo tiene constancia de las actividades de los procesos durante el tiempo en el que están realizando la acción. Una acción es atómica si los procesos que la realizan no se comunican con otros procesos mientras se está realizando la acción.

Acciones atómicas Una acción es atómica si los procesos que la realizan no pueden detectar ningún cambio de estado salvo aquellos realizados por ellos mismos, y si no revelan sus cambios de estado hasta que la acción se haya completado. Las acciones son atómicas si, en lo que respecta a otros procesos, pueden ser consideradas indivisibles e instantáneas, de forma que los efectos sobre el sistema sean como si estuvieran entrelazadas y no en concurrencia. 79

Acciones atómicas de dos fases Primer fase Petición de recursos Segunda fase Liberación de recursos Si se liberan recursos antes que la acción atómica finalice puede existir problemas con la recuperación de un fallo. 80

Control de recursos Tienen injerencia los procesos competitivos. Aunque no se comuniquen entre ellos, pueden comunicarse para coordinar el acceso a recursos. Muy pocos recursos admiten el acceso concurrente de procesos. 81

Control de recursos Cuando varios procesos que compiten necesiten recursos el modo de operación es el siguiente: Petición del recurso Utilización Liberación 82

Petición de recursos Un recurso se puede solicitar con: Acceso compartido: se puede utilizar concurrentemente por más de un proceso. Acceso exclusivo: acceso en cada instante a un único proceso. Algunos se pueden utilizar en cualquier modo 83

Petición de recursos Si un proceso pide acceso compartido mientras otro lo está usando en forma exclusiva, entonces debe esperar. Si se estaba usando en forma compartida puede seguir. 84

Petición de recursos Como los procesos pueden bloquearse al solicitar recursos, no deben pedirlos hasta que lo necesiten. Una vez asignados deben liberarse tan pronto como sea posible, una vez que la acción que se quería realizar con el recurso haya finalizado 85

Interbloqueo ( deadlock, abrazo mortal) Dos procesos forman un interbloqueo cuando cada uno mantiene un recurso mientras que espera el recurso mantenido por el otro. Interbloqueo activo Dos procesos forman un interbloqueo activo si cada uno se ejecuta, pero ninguno es capaz de avanzar. 86

Interbloqueo Condiciones necesarias Exclusión mutua. Espera circular. No desalojo. Mantenimiento y espera. 87

Inanición Varios procesos están intentando continuamente conseguir acceso exclusivo al mismo recurso. Si la política con que se asignan no es justa, puede que un proceso no acceda nunca al recurso. Vivacidad (liveness): Si se supone que algo puede ocurrir, en algún momento ocurrirá. 88