Marisa Gil Marisa Gil Introducción a los Sistemas Operativos CONCURRENCIA Concurrencia Sistemas multiprogramados 1. Introducción. Concurrencia y paralelismo. 2. Comunicación y sincronización. 3. Exclusión mutua y sincronización. 4. Modelos de programación. 5. Memoria Compartida. Postulados de Dijkstra. 6. Paso de mensajes. 7. Abrazo mortal (deadlock). Estado seguro. Varios procesos coexisten en el mismo tiempo en el sistema. • Comparten recursos del sistema impresora red ficheros • Participan en la realización de un trabajo comandos con pipes procesos padre/hijos/hermanos Bibliografía Silberschatz and Galvin Sistemas Operativos. Conceptos fundamentales. Parte I: Aspectos generales Birrell An Introduction to Programming with threads Digital SRC, 1.989 Thuan Q.Pham and PanKaj K.Garg Multithreaded Programming with Win32 Prentice-Hall, PTR, 1.999 En alabi: ~marisa/pub/concu_slides.ps o concu_slides.pdf Introducció als Sistemes Operatius Introducció als Sistemes Operatius 1 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA Comparten recursos del sistema A Cooperan en realizar un trabajo: filtros $ who | wc -l imprimir() stdin no se envía a la impresora, sino a un fichero en disco (dispositivo compartible) B imprimir() C 2 imprimir() Introducció als Sistemes Operatius who stdout wc -l stdout la impresora estará imprimiendo un fichero de modo no compartible 3 Introducció als Sistemes Operatius 4 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA Relación padre/hijo padre Relación hermanos write(fd[1],&i, sizeof(int)) links ptro L/E acceso i-node 2 10 hijo1: read(fd[0],&x, sizeof(int)) padre: TFA (open table) rw 5 hijo2: read(fd[0],&y, sizeof(int)) T.C. Una operación del padre (read, write, lseek...) modificará el puntero también para el hijo, y viceversa. hijo No se puede saber de antemano qué hijo leerá el “5” y qué hijo se quedará bloqueado hasta que el padre entre otro número. T.C. Introducció als Sistemes Operatius 5 Introducció als Sistemes Operatius 6 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA Ventajas de la Programación Concurrente Concurrencia y paralelismo • Hay concurrencia entre varios procesos cuando existen al mismo tiempo. PROCESOS CONCURRENTES • Programación modular • Considerar aisladamente cada tarea • Hay paralelismo entre varios procesos cuando se ejecutan al mismo tiempo. PROCESOS PARALELOS • Aprovechar desde un programa el paralelismo (multiprocesadores). • El paralelismo requiere un soporte físico: varios procesadores. • La concurrencia es el caso general y el paralelismo un caso particular. • La concurrencia (y el paralelismo) se refiere a la ejecución de código: Hay procesos concurrentes y flujos concurrentes. • Tratar el trabajo con E/S lenta con flujos dedicados. • el flujo principal del programa puede seguir trabajando • Atención a varias peticiones simultáneas (sistemas distribuidos) • Hablaremos en general de flujos concurrentes: Pueden ser del mismo proceso o diferentes procesos. Pueden correr en un único procesador o varios. Introducció als Sistemes Operatius 7 Introducció als Sistemes Operatius 8 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA Algunos ejemplos de concurrencia Programación Concurrente Master/Slave S Peticiones • Avance de una tarea con múltiples puntos de ejecución. • Cada punto de ejecución es un “thread”. • El trabajo de cada thread “se ve” simultáneo desde el programa. • Son parte de la misma tarea y hay puntos de encuentro M S cola de trabajos Spooler S • Sincronización • Comunicación • La gestión de la concurrencia se hace por software Dispositivo Datos Filtro • Sistema operativo • Librerías • No consideramos hardware “especializado” Pantalla Productor/Consumidor Introducció als Sistemes Operatius Introducció als Sistemes Operatius 9 10 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA El proceso y el flujo Librerías de flujos • Proceso (o task): unidad de asignación de recursos: • Se ofrece la posibilidad de cambio de contexto, entidades de flujo y primitivas de sincronización • Se ofrece un interfaz de trabajo, pero se puede acceder a cualquier rutina pública. • La planificación de flujos es totalmente transparente al SO • espacio de direcciones (registros de la MMU) • tabla de canales (y por tanto, dispositivos asignados) • etc.... • Flujo: unidad de ejecución • código • pila • registros del procesador • No sabe la concurrencia que hay en la librería. • Sólo podrá haber tanto paralelismo como “procesadores virtuales” ofrezca. • Un bloqueo de un servicio del SO, impide la planificación de cualquier flujo. • En UNIX cada proceso sólo puede tener un flujo: • el concepto “proceso” engloba todo. • Los signals permiten que el proceso sea avisado de acontecimientos. • A través del sistema de ficheros, los procesos pueden pasarse datos. • El espacio de direcciones es privado para cada proceso (para cada flujo). Introducció als Sistemes Operatius 11 Introducció als Sistemes Operatius 12 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA EJEMPLO: Calcular concurrentemente Comunicación y sincronización f(x) = 2(3x + 4) /*padre*/ f1, f2,f3 • Varios procesos o flujos que cooperan en una tarea, están relacionados - Necesitan comunicarse: X main() • pasarse datos, • enviarse avisos f1 = crear_fluxe(flux1, (long)0); f2 = crear_fluxe(flux2,(long)0); f3 = crear_fluxe(flux3,(long)0); - Necesitan sincronizarse: • esperar que haya cambiado un estado • ordenar temporalmente sus acciones No puede predecirse la velocidad de dos procesos concurrentes /*flujo 1*/ /*flujo 3*/ /*flujo 2*/ Introducció als Sistemes Operatius Introducció als Sistemes Operatius 13 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA Ejemplo: compilador y ensamblador concurrentes var lista_de_lineas_de_texto; Algunos conceptos básicos de la concurrencia fichero objeto ........ process COMP { leer de fichero fuente traducir de LAN a ASM almacenar código en lineas } process ASS { leer y ensamblar lineas sucesivas } El compilador produce código ensamblador para el ensamblador y el ensamblador produce código objeto para el cargador. Los dos procesos están trabajando con los mismos datos, la lista de líneas, pero ha de garantizarse el acceso en el orden adecuado. Introducció als Sistemes Operatius 14 15 • Nunca se puede predecir nada sobre la velocidad de los procesos. - Condición de carrera (race condition) en el acceso a los datos. • La exclusión mutua garantiza que no haya un cambio de condiciones desconocido. - Sección crítica de código de acceso a los datos. - Secuencialización en el acceso de los diferentes flujos a la S.C. - Ejecución atómica respecto al estado. • Diferentes modelos de programación dan diferentes soluciones a la correcta comunicación entre procesos concurrentes. - Memoria compartida. - Paso de mensajes. Introducció als Sistemes Operatius 16 Marisa Gil Marisa Gil CONCURRENCIA CONCURRENCIA Modelos de programación Memoria compartida • Desde el punto de vista de la sincronización y comunicación entre procesos. • Exclusión mutua • Postulados de Dijkstra • Secuencialización (tipos de espera) • Protocolos • Herramientas • Los dos modelos básicos que existen tradicionalmente: - Memoria compartida: • los procesos comparten variables, y se pasan información a través de ellas • la aplicación es la responsable de la corrección del trabajo (mutex, etc) • es la comunicación natural entre flujos de un mismo proceso • entre procesos, el SO ha de permitir tener una zona de memoria compartida - Paso de mensajes: • el SO se encarga de la comunicación Introducció als Sistemes Operatius 17 Introducció als Sistemes Operatius 18 Marisa Gil Marisa Gil MEMORIA COMPARTIDA MEMORIA COMPARTIDA Exclusión mutua Postulados de Dijkstra • Trabajar con una secuencia de código que necesita ser accedida en exclusividad - protocolo de entrada, que garantice esa exclusividad - protocolo de salida, para avisar que la zona ha quedado libre Requisitos para garantizar un funcionamiento correcto: • Exclusión mutua: como máximo, hay un proceso ejecutando la sección crítica. • Progreso: no se puede postponer indefinidamente la decisión de qué proceso entre varios entra primero en la zona. Protocolo de entrada • Espera acotada: existe un límite en el tiempo de espera de un proceso desde que pide entrar en la sección crítica hasta que puede entrar. ZONA ACCEDIDA EN MUTEX • Atomicidad: se asume que las instrucciones de lenguaje máquina se ejecutan atómicamente. Protocolo de salida Introducció als Sistemes Operatius 19 Introducció als Sistemes Operatius 20 Marisa Gil Marisa Gil MEMORIA COMPARTIDA MEMORIA COMPARTIDA Mecanismos de espera en la entrada a la S.C. Procolos de E/S en la sección crítica • Pueden implementarse en hardware o en software • El protocolo de entrada ha de ser accedido él mismo en mutex • Espera activa: un proceso se queda esperando en un bucle de encuesta. - Spin lock o busy waiting - Si hay muchos candidatos, incumple los postulados de Dijkstra • Bloqueo: un proceso que no puede entrar cede el procesador. - El protocolo de salida se encarga del desbloqueo - Permite seleccionar al siguiente candidato de entrada - Coste adicional de la gestión del bloqueo/desbloqueo de flujos • varios procesos compiten concurrentemente por la entrada • Un monoprocesador es siempre menos restrictivo que un multiprocesador • No hay paralelismo real • Pueden utilizarse algoritmos más sencillos • Peligro de pasar aplicaciones de un sistema a otro • Puntos básicos en un monoprocesador - inhibición de interrupciones (no siempre es necesario) - mantener la atomicidad sin desbanque del procesador • A nivel de hardware: - inhibición de interrupciones - instrucciones de lectura y modificación atómica • Mixto a dos niveles: mantener la espera activa un tiempo y luego bloquear. • test&set • fetch&add, fetch&swap.... Introducció als Sistemes Operatius 21 Introducció als Sistemes Operatius Marisa Gil Marisa Gil MEMORIA COMPARTIDA SEMAFOROS Protocolos software Semáforos • Algoritmos diseñados por el programador - generalmente, recaerán en una espera activa • Herramienta que permite la sincronización entre flujos. • Tipo abstracto de datos (TAD) que consta de un contador y una cola. • Operaciones sobre un semáforo: - wait(semaforo) - signal(semaforo) - además: init_semaforo(semaforo, contador), crear_semaforo(...),... • Es un mecanismo de bloqueo. • Si es una herramienta que ofrece el SO, las operaciones son llamadas al sistema. • Herramientas ofrecidas por el entorno de trabajo (sistema, librería, lenguaje) - ofrecen mecanismos de bloqueo de procesos que esperan entrar • semáforos • monitores • regiones críticas Introducció als Sistemes Operatius 22 23 Introducció als Sistemes Operatius 24 Marisa Gil Marisa Gil SEMAFOROS SEMAFOROS Semáforos Primitivas de los semáforos typedef struct { cua_id cua; int compt; } semafor_t; typedef semafor_t *sem_id; primitiva sem_wait(sem) si contador es menor o igual que cero entonces bloquea contador = contador - 1 primitiva sem_signal(sem) si contador es menor que cero entonces desbloquea contador = contador + 1 sem_id crear_sem(int compt_ini); int sem_signal(sem_id semafor); int sem_wait(sem_id semafor); int destruir_sem(sem_id semafor); • Se realiza estas secuencias atómicamente - Las primitivas wait y signal son ininterrumpibles - El semáforo es un objeto accedido él mismo en exclusión mutua. • El orden de inserción y extracción de la cola no es necesariamente FIFO - Si no es FIFO, no cumple los postulados de Dijkstra #define sem_ini(sem, n) sem = crear_sem(n) #define sem_init(sem, n) sem = crear_sem(n) Introducció als Sistemes Operatius 25 Introducció als Sistemes Operatius Marisa Gil Marisa Gil SEMAFOROS SEMAFOROS Tipos de semáforos 26 Funcionalidades del semáforo • Semáforos binarios - El contador sólo puede tomar los valores 0 y 1 - Se llaman también semáforos sin memoria Un semáforo puede utilizarse para: • Sincronización entre procesos o flujos • Exclusión mutua entre flujos (modelo de memoria compartida) • Filtro • no pueden acumular signals • Semáforos generales - El contador puede tomar cualquier valor positivo o negativo • Semáforos múltiples - Permite hacer wait o signal sobre varios semáforos a la vez - Algunas versiones de UNIX (System V) los ofrecen Exclusión mutua: S=1 repeat wait(S) sec. crit. signal(S) forever; Introducció als Sistemes Operatius 27 Introducció als Sistemes Operatius Sincronización: S=0 P1 P2 wait(S) Filtro: S=N signal(S) 28 Marisa Gil Marisa Gil TEST-AND-SET SEMAFORO Instrucciones especiales de LM: test&set El semáforo como herramienta de exclusión mutua De manera atómica (sin interrupción): A valor que devuelve la función er • Tiene que dajar pasar como máximo a un proceso: 1 postulado - contador inicializado a 1 • Si hay varios esperando, entra el que primero ejecute el signal: 2o postulado - las operaciones sem_wait/sem_signal son atómicas - signal al salir de la sección crítica • Todo proceso acaba entrando: 3er postulado - sólo garantizado si la cola del semáforo es FIFO carga un “1” Como protocolo de exclusión mutua: A = 0; de while (!tas(&A)); Protocolo entrada SECCIÓN CRÍTICA A = 0; Protocolo de salida Introducció als Sistemes Operatius 29 Introducció als Sistemes Operatius 30 Marisa Gil Marisa Gil PASO DE MENSAJES PASO DE MENSAJES Paso de mensajes Componentes de la comunicación • La comunicación corre a cargo del sistema operativo • llamadas al sistema proceso A proceso B send to B receive from A • Mensaje: - Tamaño fijo/tamaño variable - Mensajes especiales de control o sincronización Usuario S.O. comunicación a través del S.O. • No son modelos excluyentes (memoria compartida y paso de mensajes) • Paradigmas de comunicación: - Cliente/servidor - Rendez-vous (sincronización) - etc... Introducció als Sistemes Operatius 31 • Canal: implementación lógica que hace el sistema para llevar los mensajes de un proceso a otro. - a través de memoria compartida (misma máquina) - a través de cable - vía satélite, ... - combinación de varios medios Introducció als Sistemes Operatius 32 Marisa Gil Marisa Gil PASO DE MENSAJES PASO DE MENSAJES Características del canal Tipos de comunicación (I) • Permanente o temporal - coste de creación/destrucción - número máximo de objetos del isstema • Protegido o desprotegido - propietario del canal - derechos de acceso • Lógico o físico - estructura de datos del sistema - soporte hardware • Con capacidad o sin capacidad - poder mantener un número determinado de mensajes - capacidad infinita, N o 0 (rendez-vous, hand-shake) - comunicación síncrona/asíncrona • FIFO o seleccionable - mensajes con prioridad - mensajes de control - canales multicola Introducció als Sistemes Operatius • Unidireccional/Bidireccional - número de canales entre procesos Proceso 1 Introducció als Sistemes Operatius 33 Marisa Gil Marisa Gil PASO DE MENSAJES PASO DE MENSAJES Tipos de comunicación (II) 34 Tipos de comunicación (III) • Directa/indirecta - Buzones o ports - Permisos de acceso Proceso 1 Proceso 2 • Simétrica/asimétrica - parte cliente/parte servidor - comunicaciones “en igualdad” Proceso 2 Proceso 2 servidor send(servidor,petición) receive(p3,mess) receive(petición) Proceso 3 Proceso 3 send(p2,mess) Introducció als Sistemes Operatius 35 Introducció als Sistemes Operatius 36 Marisa Gil PASO DE MENSAJES Tipos de comunicación (IV) • Síncrona/asíncrona - garantizar la “llegada” del mensaje • al canal del sistema • al proceso • al buzón - mensajes de “reply” - si el canal es de tamaño N, hay sincronización con la entrada en el canal Introducció als Sistemes Operatius 37