Conceptos de Concurrencia

Slides:



Advertisements
Presentaciones similares
Tabla de Contenido Concurrencia.
Advertisements

Internet y tecnologías web
TEMA 1 Introducción a la Programación Concurrente
1.3. PROGRAMACION PARALELA
Tipos de Organización ... La organización de máquinas multiprocesadores más típicas son: Mesh Networks. Binary Tree Networks. Hypertree Networks. Pyramid.
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
Planificación con Prioridades Fijas
SISTEMAS OPERATIVOS Un Sistema operativo (SO) es un software que actúa de interfaz entre los dispositivos de hardware y los programas de usuario.
Base de Datos Distribuidas FUNDAMENTOS DE BASES DE DATOS DISTRIBUIDAS
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
Universidad Nacional Autónoma de Honduras
Carlos Rojas Kramer Universidad Cristóbal Colón
Tecnologías Cliente / Servidor Capitulo III Richard Jiménez V. clienteserver.wordpress.com.
Servicios Web.
Arquitectura Orientada a Servicios (SOA)
Subsistemas De un Sistema Operativo Celeste Domínguez Romo
Tecnologías Cliente / Servidor Capitulo III Richard Jiménez V. clienteserver.wordpress.com.
Introducción al software
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Introducción a los Sistemas de Bases de Datos Distribuidos
Mejoras a las Máquinas Von Neumann
Universidad Centroamericana
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
Sistemas Operativos Distribuidos Plataforma Cliente/Servidor
Direcciones físicas y direcciones virtuales (lógicas)
Introducción a los SSOO Sebastián Sánchez Prieto.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Análisis y Diseño de Algoritmos
Conceptos generales: Concurrencia: Existencia simultánea de varios procesos en ejecución. IMPORTANTE: EXISTENCIA SIMULTÁNEA NO IMPLICA EJECUCIÓN SIMULTÁNEA.
PROGRAMACIÓN PARALELA Tema 4: Metodología de la programación
Unidad III Administración de procesos
Arquitectura de una aplicación
DISEÑO DE SOFTWARE 1ª. Parte
Sistemas Concurrentes: programación concurrente
Sistemas en tiempo real (STR)
(Organización y Manejo de Archivos)
SISTEMAS OPERATIVOS.
EL SISTEMA OPERATIVO.
Características de un sistema operativo
Introducción a los Sistemas Operativos
Un sistema de gestión de bases de datos: Es un conjunto de programas que permite a los usuarios crear y mantener una base de datos. Por tanto, el SGBD.
LENGUAJES DE PROGRAMACIÓN
Sincronización de Procesos
TEMA 10. SISTEMAS OPERATIVOS DISTRIBUIDOS
Universidad Central de Venezuela Facultad de Ciencias Postgrado en Ciencias de la Computación Sistemas Distribuidos Albany Márquez.
PROGRAMACIÓN PARALELA Modelos de programación paralela Modelos computacionales Paradigmas de programación paralela Programación en memoria compartida:
Integrantes: Ma Carmen Zaragoza Santiago Leticia González Hernández Abraham Obispo Antonio Alexis González Ramírez Eduardo Hernández Tolentino.
Administrador de procesos
- 1 - Sistema Embebidos: Propiedades de los Lenguajes y SDL Agustín J. González 1s06 Se ha tomado como base el material generado por Peter Marwedel de.
Introducción a los SOs.
Tema 8: Introducción a los SOs. Tema 8: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.), Introducción.
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
1.1 Silberschatz, Galvin y Gagne ©2002 Sistems Operativos – 6ta. Edición Capítulo 1: Introducción ¿Qué es un sistema operativo? Sistemas Operativos por.
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Estructura de los Sistemas Operativos
Modelo OSI Surgimiento del Modelo OSI ¿Que es el Modelo OSI?
Unidad 2 – Gestión de Procesos
UNIDAD 7 “OTROS PARADIGMAS DE PROGRAMACIÓN“ LI & MSC OSCAR RAMIREZ CORTÉS Universidad de la Huasteca Veracruzana.
LIA. SUEI CHONG SOL, MCE..  1.- SOFTWARE BÁSICO O DE SISTEMA. Conjunto de programas imprescindibles para el funcionamiento del sistema.  2.- SOTWARE.
ARQUITECTURA ALTERNATIVA DE SERVIDORES SISTEMAS OPERTIVOS DE RED En un sistema operativo de red los usuarios saben que están conectados a la red y que.
UTFSM - Sistemas Operativos
Ingeniería del Software I
 Panorama General Fundamentos de Programación M.I. Jaime Alfonso Reyes Cortés.
MEMORIA DINÁMICA.
PROCESADOR.- El procesador es el cerebro del sistema, encargado de procesar toda la información. Básicamente, es el "cerebro" de la computadora. Prácticamente,
Harware Software Yuneidy moreno 7-2 Tecnología i. E. devora Arango.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Servicios Web Conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre.
Conociendo el modelo Cliente-Servidor
Transcripción de la presentación:

Conceptos de Concurrencia Un thread de control = programación secuencial, monoprocesador. Múltiples threads de control procesos concurrencia. Los procesos se comunican y sincronizan, en base a dos criterios: Exclusión mútua en el acceso a secciones críticas de código o datos. Espera por condición. La historia de la concurrencia= En los 60’s = Evolución de los sistemas operativos. Controladores de dispositivos independientes(canales). Multiprogramación. En los 70´s  Necesidad de formalizar la concurrencia en los lenguajes. En los 80’s Redes, procesamiento distribuido. En los 90’s = MPP , InterNet, CS, Web computing...

Concurrencia: Clases de Aplicaciones El primer tipo de aplicaciones se corresponde cuando ejecutamos N procesos independientes sobre M procesadores, con N > M. Un sistema de software de “multithreading” maneja simultáneamente tareas independientes, asignando (por ejemplo por tiempos) los procesadores de que dispone. Ejemplos típicos: Sistemas de ventanas en PCs o WS. Time sharing en sistemas operativos multiprocesador. Sistemas de tiempo real en plantas industriales.

Concurrencia: Clases de Aplicaciones El segundo tipo de aplicaciones es el cómputo distribuido: una red de comunicaciones vincula procesadores diferentes sobre los que se ejecutan procesos que se comunican esencialmente por mensajes. Cada componente del sistema distribuido puede hacer a su vez multithreading. Ejemplos típicos: Servidores de archivos (recursos) en una red. Sistemas de Bases de datos distribuidas (bancos, reservas de vuelos). Servidores WEB distribuidos. Arquitecturas cliente-servidor. Sistemas tolerantes a fallas.

Concurrencia: Clases de Aplicaciones El procesamiento paralelo es el tercer tipo de aplicaciones. Se trata de resolver un dado problema en el menor tiempo posible, utilizando una arquitectura multiprocesador en la que se pueda distribuir la tarea global en tareas (independientes? interdependientes?) que puedan ejecutarse en diferentes procesadores. Paralelismo de datos y paralelismo de procesos. Ejemplos típicos: Cálculo científico. Modelos de sistemas (meteorología, movimiento planetario). Gráficos, procesamiento de imágenes, realidad virtual, procesamiento de video. Problemas combinatorios y de optimización lineal y no lineal. Modelos econométricos.

Paradigmas de resolución de programas concurrentes Si bien el número de aplicaciones es muy grande, en general los “patrones” de resolución concurrente son pocos: 1-Paralelismo iterativo, 2-paralelismo recursivo, 3-productores y consumidores, 4-clientes y servidores, 5-pares que interactúan. En el paralelismo iterativo un programa tiene un conjunto de procesos (posiblemente idénticos) cada uno de los cuáles tiene uno o más loops. Es decir cada proceso es un programa iterativo. La idea es que si estos procesos cooperan para resolver un único problema (ejemplo un sistema de ecuaciones) pueden trabajar independientemente y sincronizar por memoria compartida o envío de mensajes.

Paradigmas de resolución de programas concurrentes En el paralelismo recursivo el problema general (programa) puede descomponerse en procesos recursivos que trabajan sobre partes del conjunto total de datos. Ejemplos clásicos son por ejemplo el sorting by merging o el cálculo de raíces en funciones continuas. Los esquema productor-consumidor muestran procesos que se comunican. Es habitual que estos procesos se organicen en pipes a través de los cuáles fluye la información. Cada proceso en el pipe es un filtro que consume la salida de su proceso predecesor y produce una salida para el proceso siguiente.

Paradigmas de resolución de programas concurrentes Cliente-servidor es el esquema dominante en las aplicaciones de procesamiento distribuido. Los servidores son procesos que esperan pedidos de servicios de múltiples clientes. Naturalmente unos y otros pueden ejecutarse en procesadores diferentes. Los mecanismos de invocación son variados (rendezvous y RPC por ejemplo). El soporte distribuido puede ser muy simple (LAN) o extendido a toda la WEB. En los esquemas de pares que interactúan los procesos (que forman parte de un programa distribuido) resuelven partes del problema (normalmente mediante código idéntico) e intercambian mensajes para avanzar en la tarea. El esquema permite mayor grado de asincronismo que C-S.

Programa Concurrente Un programa concurrente especifica dos o más programas secuenciales que pueden ejecutarse concurrentemente en el tiempo como tareas o procesos. Un proceso o tarea es un elemento concurrente abstracto que puede ejecutarse simultáneamente con otros procesos o tareas, si el hardware lo permite. (recordar los TASKs de ADA). Un programa concurrente puede tener N procesos habilitados para ejecutarse concurrentemente y un sistema concurrente puede disponer de M procesadores cada uno de los cuales puede ejecutar uno o más procesos.

Objetivos de los sistemas concurrentes Ajustar el modelo de arquitectura de hardware y software al problema del mundo real a resolver. Incrementar la perfomance, mejorando los tiempos de respuesta de los sistemas de procesamiento de datos, a través de un enfoque diferente de la arquitectura física y lógica de las soluciones. Algunas ventajas que merecen comentarse son la velocidad de ejecución que se puede alcanzar, la mejor utilización de la CPU de cada procesador, y la explotación de la concurrencia inherente a la mayoría de los problemas reales.

Areas de estudio en Programación Concurrente ELECCION DE LA GRANULARIDAD : Significa optimizar (para una dada aplicación) la relación entre el número de procesadores y el tamaño de la memoria total. MANEJO DE LOS RECURSOS: Asignación de recursos compartidos, métodos de acceso a los recursos, bloqueo y liberación de recursos, seguridad y consistencia de los recursos. SINCRONIZACIÓN: Se debe asegurar el orden correcto (incluyendo el tiempo) de las acciones que los procesos ejecutan. Este orden es dinámico e interdependiente. El objetivo de la sincronización es restringir las “historias”o “threads” de un programa concurrente sólo a las permitidas.

Sincronización en Programación Concurrente Sincronización por exclusión mútua Significa asegurar que sólo un proceso tenga acceso a un recurso compartido en un instante de tiempo. Si el programa tiene “secciones críticas” que pueden compartir más de un proceso, la exclusión mútua evita que dos o más procesos puedan encontrarse en la misma sección crítica al mismo tiempo. Sincronización por condición: Debe permitir bloquear la ejecución de un proceso hasta que se cumpla una condición dada. Ejemplos de los dos mecanismos de sincronización en un problema de utilización de un área de memoria compartida (buffer limitado con productores y consumidores).

Comunicación y Prioridad en Programación Concurrente La comunicación entre procesos concurrentes indica el modo en que se organiza y trasmiten datos entre tareas concurrentes. Esta organización requiere especificar protocolos para controlar el progreso y corrección de la comunicación. Los protocolos deben contemplar la posibilidad de pérdida de información. Un proceso que tiene mayor prioridad puede causar la suspensión (pre-emption) de otro proceso concurrente. Análogamente puede tomar un recurso compartido, obligando a retirarse a otro proceso que lo tenga en un instante dado.

Conceptos relacionados con la Programación Concurrente Dos o más procesos pueden entrar en deadlock, si por un error en la programación concurrente ambos se quedan esperando que el otro libere un recurso compartido.La ausencia de deadlock es una propiedad necesaria en los procesos concurrentes. Una propiedad deseable en los sistemas concurrentes es el equilibrio en el acceso a los recursos compartidos por todos los procesos (fairness). Dos situaciones NO deseadas en los programas concurrentes son la inanición de un proceso (no logra acceser a los recursos compartidos) y el overloading de un proceso (la carga asignada excede su capacidad de procesamiento).

Desventajas de la Programación Concurrente En Programación Concurrente los procesos no son completamente independientes y comparten recursos. La necesidad de utilizar mecanismos de exclusión mútua y sincronización agrega complejidad a los programas ===> menor confiabilidad. Los procesos iniciados dentro de un programa concurrente pueden NO estar “vivos”. Esta pérdida de la propiedad de liveness puede indicar deadlocks o una mala distribución de recursos. Hay un no determinismo implícito en el interleaving de los procesos concurrentes. Esto significa que dos ejecuciones del mismo programa no necesariamente son idénticas ===> dificultad para la interpretación y debug. La comunicación y sincronización produce un overhead de tiempo, inútil para el procesamiento. Esto en muchos casos desvirtúa la mejora de perfomance buscada.

Problemas asociados con Progr. Concurrente La mayor complejidad en la especificación de los procesos concurrentes significa que los lenguajes de programación tienen requerimientos adicionales. ===> mayor complejidad en los compiladores y sistemas operativos asociados. Aumenta el tiempo de desarrollo y puesta a punto respecto de los programas secuenciales. También puede aumentar el costo de los errores ===> mayor costo de los ambientes y herramientas de Ingeniería de Software de sistemas concurrentes. La paralelización de algoritmos secuenciales NO es un proceso directo, que resulte fácil de automatizar. Para obtener una real mejora de perfomance, se requiere adaptar el software concurrente al hardware paralelo.

Mecanismos de comunicación y sincronización entre procesos. Memoria compartida: Los procesos intercambian mensajes sobre la memoria compartida o actúan coordinadamente sobre datos residentes en ella. Lógicamente los procesos no pueden operar simultáneamente sobre la memoria compartida, lo que obligará a BLOQUEAR y LIBERAR el acceso a la memoria. La solución más elemental será una variable de control tipo “semáforo” que habilite o no el acceso de un proceso a la memoria compartida. Pasaje de Mensajes: Es necesario establecer un “canal” (lógico o físico) para trasmitir información entre procesos. También el lenguaje debe proveer un protocolo adecuado. Para que la comunicación sea efectiva los procesos deben “saber” cuando tienen mensajes para leer y cuando deben trasmitir mensajes.

Mecanismos de comunicación y sincronización entre procesos. Independientemente del mecanismo de comunicación / sincronización entre los procesos, los lenguajes de programación concurrente deberán proveer primitivas adecuadas para la especificación e implementación de las mismas. De un lenguaje de programación concurrente se requiere: Indicar las tareas o procesos que pueden ejecutarse concurrentemente. Mecanismos de exclusión mútua. Mecanismos de comunicación entre los procesos. Recordar el ejemplo de ADA.

Programación Distribuida Los métodos de sincronización que han visto se basan en leer y escribir variables compartidas, lo cual significa que los programas concurrentes se ejecuten sobre hardware con acceso a memoria compartida. Las arquitecturas de memoria distribuida son cada vez más habituales. Esto implica procesadores + memoria local + red de comunicaciones + otro mecanismo de comunicación/sincronización----> mensajes. Para escribir programas sobre una arquitectura de memoria distribuida, es necesario definir la interfaz con el sistema de comunicaciones---> primitivas de pasaje de mensajes ---> los procesos no comparten memoria, sino canales (físicos o lógicos).

Programación Distribuida Los programas concurrentes que se comunican por mensajes se denominan programas distribuidos. Esto supone la ejecución sobre una arquitectura de memoria distribuída, aunque puedan ejecutarse sobre una arquitectura de memoria compartida ( o híbrida). En un programa distribuido los canales son el único objeto que los procesos comparten ===> no hay acceso concurrente a variables y la exclusión mutua no requiere ningún mecanismo especial. Entre los mecanismos para la programación distribuida (que dependen del modo en que interactúan los procesos) tenemos productores-consumidores, clientes-servidores e interacción entre pares.

Programación Distribuida. Conceptos de pasaje de mensajes. Los canales pueden proveer comunicaciones half-duplex o full-duplex. A su vez estas comunicaciones pueden ser asincrónicas (no bloqueantes) o sincrónicas (bloqueantes). Las combinaciones dan lugar a AMP, SMP, RPC y Rendezvous que son los 4 mecanismos (equivalentes funcionalmente ya que pueden intercambiarse) cuya sintaxis y semántica serán nuestro objetivo. Si bien decimos que son equivalentes, veremos que AMP y SMP son mejores para modelos tipo productor-consumidor o pares interactivos, mientras RPC y Rendezvous serán más útiles para esquemas C-S. El pasaje de mensajes (AMP o SMP) puede verse como una extensión de semáforos con datos. En RPC y Rendezvous se combina la interfaz procedural de los monitores con pasaje de mensajes implícito.