Sei sulla pagina 1di 20

Asignatura Arquitectura de Computadores II

INTRODUCCIN A LA PROGRAMACIN CONCURRENTE

Ing. Brbara Briceo

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Programa: Conjunto de instrucciones que una computadora puede interpretar o ejecutar.


Normalmente, los programas son escritos usando un lenguaje de alto nivel y guardados en un archivo de texto para ser posteriormente interpretados o compilados, de modo que se obtiene un cdigo de nivel intermedio (por ejemplo, bytecodes de java) o un cdigo mquina (ejecutables). Un programa compilado y guardado en un archivo ejecutable puede ser ejecutado en el entorno del Sistema Operativo para el que ha sido diseado. El mapa de memoria de un programa en ejecucin depender del Sistema Operativo para el que se ha compilado. El mapa de memoria conceptual de un programa depende del compilador y del tipo de compilacin con el que se trabaja. El mapa conceptual de un programa en C es el siguiente:

Pila

Montn

Variables globales

Cdigo del programa

Mantiene las direcciones de vuelta para las llamadas a funciones. Mantiene las variables locales.

Regin de memoria libre que puede usar el programa mediante las funciones de asignacin dinmica.

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Proceso: Instancia ejecutada de un programa.


Cuando un programa se ejecuta, las direcciones relativas se convierten en direcciones absolutas. El contador de programa apunta a la primera instruccin del programa.

Direcciones absolutas SP

CS

PC

Direcciones relativas

Pila

Montn

Variables globales

Cdigo del programa

Proceso
El sistema operativo consiste en un conjunto de programas que permiten la manipulacin de los recursos hardware del sistema, as como su gestin. Cuando un programa se ejecuta, el intrprete de comandos resuelve el nombre del programa, dicho nombre corresponde normalmente a un archivo ejecutable cuya informacin est contenida en un dispositivo de almacenamiento secundario. Dicha informacin es volcada a la memoria, las direcciones relativas son resueltas y se convierten en direcciones absolutas, los registros almacenan los valores de las direcciones de los diferentes segmentos del programa: pila, datos, cdigo, contador de programa, etc. El sistema operativo sigue ejecutndose junto con el programa: sistemas monotarea y sistemas multitarea.

Sistema operativo

CP Intrprete de comandos Programa

Programa

Control retorna cuando programa finaliza Interpretacin del comando

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Sistemas monotarea
Slo puede ejecutarse una tarea simultneamente. MS DOS. No es necesaria la planificacin de procesos. Posibilidad de crear entornos de programacin concurrente mediante interpretacin o simulacin: PASCAL FC.

Lectura del archivo

Simulacin de concurrencia Sistema operativo

CP Intrprete de comandos Programa

Pascal FC

Control retorna cuando programa finaliza Interpretacin del comando

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Sistemas multitarea
Se pueden ejecutar varias tareas simultneamente (varios procesos). Versiones de Windows a partir del 95, Unix, Minix, Linux, etc. Es necesaria la planificacin de procesos. Posibilidad de crear entornos de programacin concurrente en el espacio de usuario. Por ejemplo, planificacin en mquina virtual de JAVA.

Espacio de usuario

Kernel S.O.
Hardware

Espacio de usuario Kernel S.O. Hardware Microkernel (Organizacin por capas): MINIX Monoltico : LINUX Espacio de usuario Kernel S.O. Hardware

Sistemas multitarea
Si existen varios procesadores, y el S.O. es capaz de distribuir la carga computacional entre los mismos, hablamos de un sistema operativo multiprocesamiento. Dos tipos de sistemas multitarea: Memoria compartida Memoria distribuida

Sistemas multitarea de memoria compartida


La memoria es un recurso compartido por todos los procesos HILOS en java o en POSIX. Los procesos en memoria compartida son instancias de un programa que realizan tareas sobre datos comunes.

Memoria compartida
Pr1P1 Pr2P1 Pr2P2 Pr3P3

Planificador

S.O.

Programa 1

Programa 2

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Sistema operativo LINUX


Creacin de procesos pesados: fork(). Posibilidad de crear procesos ligeros (threads) usando libreras adecuadas: POSIX Threads. Los procesos creados con fork() tienen un espacio de direccionamiento propio. Slo comparten el cdigo. Los hilos creados con Pthreads comparten una parte del espacio de direccionamiento adems del cdigo, teniendo un contador de programa especfico as como el espacio de pila, donde se almacenan llamadas y variables locales entre otras cosas.

Memoria compartida
H1

H2

H3

H4

H5 H6

H7

Planificacin posible en espacio de usuario

Pr1P1

Pr2P1

Pr2P2

Pr3P3

Planificador

S.O.

Programa 1

Programa 2

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Definicin formal de programacin concurrente

Programacin secuencial: Las acciones se ejecutan una tras otra, en un sentido estricto, esto es una accin posterior no se inicia hasta que se haya completado la anterior. Programacin paralela: Las acciones se ejecutan de forma independiente, obviamente por diferentes elementos de procesos, y al final los resultados parciales se unen formando la solucin global. Ventajas: Reduccin del tiempo para completar el trabajo. Reduccin del esfuerzo individual. Inconvenientes: Necesidad de compartir el trabajo. Necesidad de compartir los recursos. Necesidad de esperas en puntos clave. Necesidad de comunicacin. Necesidad de resolucin de posibles errores. Programacin Concurrente: Las acciones se ejecutan por nico elementos de procesos capaz de seleccionar una de ellas segn una determinadas caractersticas. Ventajas No depende de la arquitectura o n de elementos de proceso Menos necesidad de compartir el trabajo Menos necesidad de resoluciones de errores Permite resolver problemas que no sera posible con un procesamiento secuencial

Introduccin a la Programacin Concurrente

1.- Conceptos bsicos.

(a) Programa.
(b) Proceso. (c) Sistemas monotarea. (d) Sistemas multitarea. (e) Sistema operativo LINUX.

2.- Caractersticas de la programacin concurrente.

(a) Definicin.
(b) Propiedades de los programas concurrentes.

Caractersticas de los programas concurrentes

Orden: Orden en que se ejecutan las instrucciones. Parcial: No se conoce exactamente la secuencia en la que sern ejecutadas las instrucciones. Total: Se conoce exactamente el orden en el que se deben ejecutar todas las instrucciones. ORDEN TOTAL => DETERMINISMO ORDEN PARCIAL => INDETERMINISMO Requisitos para la Programacin Concurrente: Situacin de los procesos en un sistema: Independientes. Colaborando o Compitiendo son necesarias normas o protocolo. Requisitos Sincronizacin Capacidad de informar de la situacin de un proceso a otro. Objetivo: Establecer la secuencialidad correcta del programa Exclusin Mutua. Asegurar que un solo proceso tiene acceso a un recurso compartido nico. Por condicin. Asegurar que un proceso no progrese hasta que se cumpla una determinada condicin. Comunicacin Capacidad de transmitir informacin desde un proceso a otro. Objetivo: Intercambio de informacin entre procesos. Prioridad Capacidad de establecer una ordenacin de importancia en los procesos. Objetivo: Permitir la ejecucin de procesos ms importantes (prioritarios) antes que otros.

Problemas de la programacin concurrente

Interbloqueos: Espera de un proceso por un evento que nunca va a suceder. Violacin de la exclusin mutua: Acceso simultneo a un recurso por 2 o ms procesos, cuando dicho recurso slo puede ser accedido por un nico proceso cada vez. Postergacin indefinida o inanicin: Uno o ms procesos nunca son seleccionados para ejecutarse en la CPU.

Propiedades de los programas concurrentes

Seguridad (safety): Asegurar que nada no permitido ocurrir durante la ejecucin. El programa no llegar a un estado inconsistente, debido a posibles problemas por un mal uso de los recursos compartidos. Ejemplo: Asegurar la exclusin mutua. Viveza (liveness): Asegurar que lo deseado ocurrir finalmente en la ejecucin del programa. El programa no se bloquear o provocar que un proceso no se pueda ejecutar. Ejemplo: No permitir la postergacin indefinida. Correccin Parcial (propiedad de seguridad) Si el programa termina, la salida es la deseada Correccin Total (propiedad de seguridad y viveza) El programa termina y la salida es la correcta

Ejemplo de problema y solucin concurrente

Sumar dos matrices de 3 x 3. Usamos 3 procesos para sumar cada fila, un proceso que lea las matrices y un ltimo proceso que genere la matriz resultado.

Sum filas 0

Leer matrices

Dividir en filas

Sum filas 1

Formar matriz resultado

Sum filas 2

Secuencial

for (i=0; i<3; i++) filares0[i]=filam1[i]+filam2[i] return(filares0)

Zona concurrente

Potrebbero piacerti anche