Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización • • • • Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Capítulo 5 Concurrencia • Aplicación Múltiple – Multiprogramación • Aplicación Estructurada – La aplicación puede ser un conjunto de procesos concurrentes • Estructura del Sistema Operativo – Al sistema operativo es un conjunto de procesos o threads (microkernel) Dificultades con la Concurrencia • Compartir recursos globales • Gestión de asignación de recursos • Errores de programación difíciles de localizar Un Ejemplo Simple void echo() { chin = getchar(); chout = chin; putchar(chout); } Ocupaciones del Sistema Operativo • Seguir la pista a los procesos activos • Asignar y liberar recursos – – – – Tiempo del procesador Memoria Ficheros Dispositivos de E/S • Proteger datos y recursos • El resultado de un proceso debe ser independiente de la velocidad de ejecución de cualquier otro proceso concurrente Un Ejemplo Simple Proceso P1 Proceso P2 . . chin = getchar(); . . chin = getchar(); chout = chin; chout = chin; putchar(chout); . . putchar(chout); . . Interacción entre Procesos • Los procesos se ignoran unos a otros • Los procesos se dan cuenta indirectamente de los otros • Los procesos son conscientes de los otros directamente Competencia entre Procesos por los Recursos • Exclusión Mutua – Secciones críticas • En cada momento sólo se permite a un programa estar en una sección crítica • Por ejemplo, en un momento dado, sólo se permite a un proceso enviar comandos a la impresora Cooperación entre Procesos mediante la Compartición • La escritura debe ser exclusiva (mutuamente) • Las secciones críticas se usan para asegurar la integridad de los datos • Interbloqueo (deadlock) • Inanición (starvation) Cooperación entre Procesos mediante la Comunicación • Los mensajes son permisos – La exclusión mutua no es una necesidad de control • Posible interbloqueo – Cada proceso espera un mensaje del otro proceso • Posible inanición – Dos procesos envían mensajes uno al otro mientras un tercero espera un mensaje que no llega Requisitos para la Exclusión Mutua • En cada momento sólo se la permite a un proceso estar en sección critica para un recurso ¡¡¡ pero no sólo esto !!!, sino además: • Un proceso que termina en su sección nocrítica debe hacerlo sin interferir con otros procesos • No interbloqueo o inanición Requisitos para la Exclusión Mutua • Un proceso no debe ser demorado en su acceso a la sección crítica cuando no hay otro proceso usándola • No se debe asumir nada relativo a la velocidad de los procesos o el número de ellos • Un proceso permanece en su sección crítica por un tiempo finito Corutina • Diseñada para ser capaz de transmitir el control de ejecución de acá para allá entre ellos • Inadecuada para dar soporte al procesamiento concurrente Exclusión Mutua: Software Alg. Dekker: Primera Tentativa • Ocupado Esperando – El proceso chequea continuamente si puede entrar en la sección crítica – El proceso no puede hacer nada productivo hasta que obtiene permiso para entrar en su sección crítica Exclusión Mutua: Software Alg. Dekker: Segunda Tentativa • Cada proceso puede examinar el estado de otro pero no puede alterarlo • Cuando un proceso quiere entrar en la sección crítica primera comprueba el estado de los otros procesos • Si ningún otro proceso esta en sección crítica, activa sus flag de estado para la sección crítica • Este método no garantiza la exclusión mutua • Cada proceso puede comprobar su flag y proceder a la entrada en la sección critica al mismo tiempo Exclusión Mutua: Software Alg. Dekker: Tercera Tentativa Exclusión Mutua: Software Alg. Dekker: Cuarta Tentativa • Activar el flag para entrar en sección crítica antes de comprobar el resto de procesos • Si algún proceso está en la sección crítica cuando el flag está activado, el proceso se bloquea hasta que el otro proceso sale de la sección crítica • El interbloqueo es posible cuando dos procesos activan sus flags para entrar en sección crítica y luego deben esperar a que el otro salga de la sección crítica • Un proceso activa su flag para indicar su deseo de entrar en su sección crítica pero está preparado para desactivar el flag • Se comprueban los otros procesos. Si alguno está en sección crítica, el flag se desactiva y más tarde se vuelve a activar para indicar su intención de entrar en región crítica. Esto se repite hasta que el proceso finalmente entra en su región crítica Exclusión Mutua: Software Alg. Dekker: Cuarta Tentativa • Es posible que todos los procesos activen sus flags, comprueben los otros procesos y desactiven sus flags. Pero esto no dura mucho tiempo, por eso no se considera interbloqueo aunque este retraso es injustificable Exclusión Mutua: Software Alg. Dekker: Solución Correcta • Cada proceso obtiene un turno para su sección crítica • Si un proceso quiere entrar en su sección crítica, activa un flag y espera su turno Exclusión Mutua: Soporte Hardware • Inhibición de Interrupciones – Un proceso se ejecuta hasta que invoca un servicio del sistema operativo o hasta que es interrumpido – Inhibir las interrupciones garantiza la exclusión mutua – Se limita la habilidad del procesador para entrelazar los programas – Multiprocesadores • inhibir las interrupciones en un procesador no garantiza la exclusión mutua – Sólo un tipo de sección critica, no una para cada recurso Exclusión Mutua: Soporte Hardware • Instrucción Test and Set (comprueba y activa) boolean testset (int i) { if (i == 0) { i = 1; return true; } else { return false; } } Exclusión Mutua: Soporte Hardware • Instrucciones máquina especiales – Se realizan en un ciclo de reloj – No está sujeta a interferencias de otras instrucciones – Lectura y escritura – Lectura y comprobación Exclusión Mutua: Soporte Hardware • Instrucción de intercambio void exchange(int register, int memory) { int temp; temp = memory; memory = register; register = temp; } Instrucciones Máquina para la Exclusión Mutua • Ventajas Instrucciones Máquina para la Exclusión Mutua • Inconvenientes – Aplicable a cualquier número de procesos sobre mono y multiprocesadores que comparten memoria principal – Es simple y además fáciles de verificar – Se pueden utilizar para dar soporte a múltiples secciones críticas Semáforos • El semáforo es un tipo de variable especial que se usa para la señalización • Si un proceso está esperando una señal, se suspende hasta que se envía esa señal • Las operaciones de espera y señalización no pueden ser interrumpidas • Se usa una cola para que los procesos que esperen un semáforo – La espera-activa consume tiempo del procesador – Es posible la inanición si un proceso sale de la sección crítica y hay muchos esperando – Interbloqueo • Si un proceso de baja prioridad está en sección crítica y un proceso de mayor prioridad necesita entrar, el proceso de mayor prioridad obtendrá el procesador para esperar entrar en la sección crítica Semáforos • El semáforo es una variable que tiene un valor entero – Debe inicializarse a un número no negativo – Las operaciones de espera (wait) decrementan el valor del semáforo – Las operaciones de señalización (signal) incrementan el semáforo. El Problema del Productor/Consumidor • Uno o más productores generan datos y los colocan en un buffer • Un único consumidor extrae dichos datos del buffer uno a uno • Sólo un productor o el consumidor puede acceder al buffer en cada instante Consumidor consumer: while (true) { while (in <= out) /*do nothing */; w = b[out]; out++; /* consume item w */ } Productor producer: while (true) { /* produce item v */ b[in] = v; in++; } Productor con Buffer Circular producer: while (true) { /* produce item while ((in + 1) /* do nothing b[in] = v; in = (in + 1) % } v */ % n == out) */; n Consumidor con Buffer Circular consumer: while (true) { while (in == out) /* do nothing */; w = b[out]; out = (out + 1) % n; /* consume item w */ } Buffer infinito El Problema del Barbero Monitores • El Monitor es un módulo software • Características principales – Las variables locales son accedidas sólo por el monitor – El proceso entra en el monitor invocando uno de sus procedimientos – Sólo un proceso puede estar ejecutando el monitor en cada instante Pase de Mensajes • Fuerza la exclusión mutua • Intercambio de información send (destination, message) receive (source, message) Sincronización • El emisor y el receptor puede o no bloquearse en espera • Envío bloqueante, recepción bloqueante – Ambos el emisor y el receptor se bloquean hasta que se entrega el mensaje – Se le llama ‘rendezvous’ (cita) Sincronización • Emisor no bloqueante, receptor bloqueante – El emisor continua procesando tan rápido como el mensaje es enviado – El receptor se bloquea hasta que llega el mensaje que solicitó • Emisor y receptor no bloqueantes – No se requiere que ninguna parte espere Direccionamiento • Direccionamiento Indirecto – los mensajes se envían a una estructura de datos compartida que consiste en colas – estas colas se llaman ‘mailboxes’ – un proceso envía un mensaje al mailbox y el otro proceso recoge el mensaje del mailbox Direccionamiento • Direccionamiento Directo – la primitiva de envío incluye un identificador específico del proceso destinatario – la primitiva de recepción puede saber con antelación de qué proceso espera el mensaje – la primitiva de recepción puede usar el parámetro fuente para devolver un valor cuando la operación de recepción ha tenido lugar Formato de Mensaje Problema del Lector/Escritor • Un número indeterminado de lectores pueden leer un fichero simultáneamente • Sólo un escritor puede escribir en el fichero cada vez • Si un escritor está escribiendo en el fichero, ningún lector puede leerlo