PROGRAMA CONCURRENTE.

 

Un programa concurrente es un programa que tiene mas de una linea logica de ejecucion, es decir, es un programa que parece que varias partes del mismo se ejecutan simultaneamente. Un ejemplo de  de esto es un programa que realice determinada funcion y, simultaneamente, exponga datos en la pantalla. Un programa concurrente puede correr en varios procesadores simultaneamente o no. Esta importancia de la concurrencia es especialmente destacable en sistemas operatives como Linux, que ademas de concurrentes, presentan unos mecanismos de concurrencia estables.

El concepto fundamental de la programacion concurrente es la nocion de proceso. El termino proceso fue utilizado por primera vez por los diseñadores del sistema Multics en los años 60’s. Desde entonces, el termino proceso, utilizado a veces como sinonimo de tarea, ha tenido muchas definiciones. A continuacion se presentan algunas:

Un programa en ejecucion.

Aunque se han dado muchas otras definiciones, no hay una definicion universalmente aceptada, pero el concepto de “Programa en ejecucion” parece ser el que se utiliza con mas frecuencia. Un programa es una entidad inanimada; solo cuando un procesador le “infunde vida” se convierte en la entidad “activa” que se denomina proceso.

Un proceso pasa por una serie de datos discretos. Se dice que un proceso se esta ejecutando (estado de ejecucion), si tiene asignada la CPU. Se dice que un proceso esta listo(estado listo) si pudiera utilizar la CPU en caso de haber una disponible. Un proceso esta bloqueado (estado bloqueado) si se esta esperando que suceda algun evento antes de poder seguir la ejecucion.

 

Oval: EN EJECUCION

 

 

 

 

                                                                                                                        BLOQUEADO

DESPACHAR                                     EXPIRACION

                                                            DE TIEMPO

                                                           

 

 

Oval:       LISTO

Oval: BLOQUEAR

                                                                                    DESPERTAR

 

 

 

 

 

Los procesos secuenciales se han usado tradicionalmente para estudiar la concurrencia. ADA, es un lenguaje que maneja procesos secuenciales.

Tanto sistemas paralelos como distribuidos son concurrentes; pero un sistema concurrente puede ser no paralelo ni distribuido, como acontece, por ejemplo, con los sistemas operatives monoprocesadores y multitarea, que son concurrentes pero no son paralelos ni distribuidos.

Como ya se menciono los procesos son concurrentes si existen simultanemente. La concurrencia es el punto clave de la Multiprogramacion, el Multiproceso y el Proceso distribuido y fundamental para el diseño de sistemas operativos. La concurrencia comprende un gran numero de cuestiones diseño, incluyendo la comunicacion entre procesos, comparticion y competencia por lo recursos, sincronizacion de la ejecucion de varios procesos y asignacion del tiempo de procesador a los procesos.

La concurrencia puede presentarse en tres contextos diferentes:

 

 

 

Principios Generales de la concurrencia

En un sistema multiprogramado con un unico procesador, los procesos se intercalan en el tiempo  para dar la apariencia de ejecucion simultanea

 

En un sistema con varios procesadores, no solo es posible intercalar los procesos, sino tambien superponerlos. La intercalacion y la superposicion representan formas de ejecucion muy diferentes. Ambas tecnicas pueden contemplarse como ejemplos de proceso concurrente y ambas plantean los mismos problemas. En el caso de un sistema monoprocesador, los problemas creados por la multiprogramacion parten del hecho de  que la velocidad relativa de ejecucion de los procesos no puede predecirse.

 

 Los procesos concurrentes pueden  funcionar en forma totalmente independiente unos de otros, o pueden ser asincronos, lo cual significa que en ocasiones requieren cierta sincronizacion o cooperacion.

Cuando dos o mas procesos  llegan al mismo tiempo a ejecutarse, se dice que se ha presentado una concurrencia de procesos. Es importante mencionar que para que dos o mas procesos sean concurrentes, es necesario que tengan alguna relacion entre ellos como puede ser la cooperacion para un determinado trabajo o el uso de informacion o recursos compartidos, por ejemplo: en un sistema de un procesador, la multiprogramacion es una condicion necesaria pero no suficiente para que exista concurrencia, ya que los procesos pueden ejecutarse de forma totalmente independiente.

 

 

 

Las interacciones entre procesos tienen dos formas:

 

            Primero comunicacion.-  Si tenemos varios procesos ejecutando y queremos que interactuen entre ellos para solucionar un determinado problema, y por tanto, necesitan intercambiar informacion, es decir necesitan comunicarse. Esto implica el intercambio de datos entre procesos, ya sea por medio de un mensaje implicito o a traves de variables compartidas. Una variable es compartida entre procesos si es visible al codigo de esos procesos.

Mediante la comunicacion se consigue que la ejecucion de un proceso influya en la ejecucion de otro.

            Segundo sincronizacion.-  La sincronizacion (sinonimo de espera) es habitualmente necesaria cuando dos procesos se comunican puesto que la velocidad a la que se ejecutan no es predecible. Para que un proceso se communiqué con otro, aquel debera realizar acciones que sea capaz de detectar y esto solo funciona si realizar y detectar ocurren en este orden. Relaciona el seguimiento de un proceso con el seguimiento de otro. En otras palabras, la sincronizacion implica intercambio de informacion de control entre procesos.

 

La necesidad de contar con comunicacion y sincronizacion puede verse en terminos de competencia y cooperacion entre procesos. La competencia ocurre cuando el proceso requiere el uso exclusivo de un recurso, como cuando dos procesos compiten por usar la misma impresora, o para reservar un asiento en un vuelo. Aqui la sincronizacion es necesaria para garantizar a un proceso el uso exclusivo de un recurso. La cooperacion ocurre cuando dos procesos trabajan en distintas partes del mismo problema y por lo general incluyen a la comunicacion y a la sincronizacion.

 

PROPIEDADES DE VIDA.

 

La ejecucion concurrente de un proceso genera dos tipos de correccion: la seguridad y la vida. La seguridad se encarga de obtener la respuesta “correcta”. La vida tiene que ver con la tasa de avance de un proceso, es decir, con la velocidad a la cual avanza el calculo.

La competencia por los recursos impone restricciones en el entrelazamiento de seguimientos.

 

 

Existen dos visiones del paralelismo:

 

 

El paralelismo se presenta, a su vez, en dos formas:

 

 

En relacion al paralelismo hardware, Michael Flynn realizo la siguiente clasificacion de arquitecturas de computadoras de acuerdo a los flujos de datos (data stream) y a los flujos de instrucciones (instruction stream). El concepto de flujos de datos se refiere al numero de operandos que se pueden procesar al tiempo y el de flujo de instrucciones se refiere a cuantos programas se pueden ejecutar al tiempo. De acuerdo a su clasificacion existen cuatro tipos de computadoras:

 

COMPUTADORES

 
 

 


 

                                                           

      SISD

 

 

      SIMD

 

 

      MIMD

 

 

Vectoriales

 

 

Paralelos

 

 

Memoria

Compartida

 

 

Memoria

Privada

 

 
 

 

 

 

 

 

 

 

 

 

           

Arquitectura                                        

            Von Neuman                                                               

                                                            Cray                             Illiac IV

                                                            Cyber205                     CM-2             

                                                            NEC SX

                                                                                                                    NYU                    Hypercube

                                                                                                                  Ultracomputer      Transputer

                                                                                                                 IBM RP3               

                                                                                                                                   

 

 

                                                                                                                   Sequent                 Estaciones

                                                                                                                  Encore Firefly       de trabajo

                                                                                                                                                 en 1 LAN       

 

  1. SISD (Single Instruction stream over a Single Data stream): Es la arquitectura de las maquinas secuenciales convencionales de un solo procesador. Un solo flujo de instrucciones y un solo flujo de datos.
  2. SIMD ( Single Instruction stream over a Multiple Data stream): Es la arquitectura de las computadoras con hardware para proceso vectorial. Un solo flujo de instrucciones y varios flujos de datos.
  3. MISD (Multiple Instruction stream over a Single Data stream) :Es la arquitectura de las computadoras que poseen un conjunto de procesadores que ejecutan diferentes instrucciones sobre los mismos datos. Varios flujos de instrucciones y un solo flujo de datos.
  4. MIMD (Multiple Instruction stream over a Multiple Data stream): Es la arquitectura mas generica para los computadores paralelos, ya que es applicable a cualquier tipo de problema, al contrario que las dos anteriores.

 

 

Comparacion entre las arquitecturas SIMD Y MIMD

 

SIMD                                                                          MIMD

Requiere menos hardware:1 unidad                               Requiere menos hardware

de control.                               

Necesita menos memoria:1 sola copia               Necesita memoria para cada uno de los

del programa.                                                               Programas.

Adecuada para programas de datos paralelos:   Puede ejecutar varias tareas distintas al

se requiere ejecutar el mismo programa sobre   mismo tiempo o emular,un procesadorSIMD

un gran numero de datos.                                              Mediante mecanismos de sincronizacion.

Menor tiempo de arranque para comunicarse                Para comunicarse es necesario usar mecanismos

con los vecinos:debido a que se posee un reloj  de sincronizacion.

Global.

Mas costosa: Se requiere diseñar un microchip de         Mas barata: se pueden construir usando

Arquitectura.                                                                Procesadores SISD de proposito general a gran

                                                                                    Escala, los cuales son muy baratos debido a la

                                                                   Economia de escala.

 

 

Es habitual encontrar en la bibliografia el termino del programa concurrente en el mismo contexto que el programa paralelo o distribuido. Existen diferencias sutiles entre estos dos conceptos:

 

 

 

Cuando se emplea un solo procesador para la ejecucion de programas concurrentes se habla de seudoparalelismo.

 

El problema basico en la escritura de un programa concurrente es identificar  que actividades pueden realizarse concurrentemente. Ademas la programacion concurrente es mucho mas dificil que la programacion secuencuencial clasica por la dificultad de asegurar que el programa concurrente es correcto.

 

 

 

 

CARACTERISTICAS DE LA CONCURRENCIA.

Los procesos concurrentes tienen las siguientes caracteristicas :

 

  1. Indeterminismo: Las acciones que se especifican en un programa secuencial tienen un orden total, pero en un programa concurrente el orden es parcial, ya que existe una incertidumbre sobre el orden exacto de ocurrencia de ciertos sucesos, esto es, existe un indeterminismo en la ejecucion. De esta forma si se ejecuta un programa concurrente varias veces pude producir resultados diferentes partiendo de los mismos datos.
  2. Interaccion entre procesos: Los programas concurrentes implican interaccion entre los distintos procesos que los componen:

 

- Los procesoso que comparten recursos y compiten por el acceso a los mismos.

- Los procesos que se comunican entre si  para intercambiar datos.

 

 

1.      1.      Gestion de recursos: Los recursos compartidos necesitan una gestion especial. Un proceso que desee utilizar un recurso compartido debe solicitar dicho recurso, esperar a adquirirlo, utilizarlo y despues liberarlo. Si el proceso solicita el recurso pero no puede adquirirlo en ese momento, es suspendido hasta que el recurso este disponible. La gestion de recursos compartidos es problematica y se debe realizar de tal forma que se eviten situaciones de retraso indefinido ( espera indefinidamente por un recurso) y de deadlock (bloqueo indefinido o abrazo mortal).

2.      2.      Comunicacion: La comunicacion entre procesos puede ser sincrona, cuando los procesos necesitan sincronizarse para intercambiar los datos, o asincrona, cuando un proceso que suministra los datos no necesita esperar a que el proceso receptor los recoja, ya que los deja en un buffer de comunicacion temporal.

 

 

 

 

PROBLEMAS DE LA CONCURRENCIA.

 

En los sistemas de tiempo compartido (aquellos con varios usuarios, procesos, tareas, trabajos que reparten el uso de CPU entre estos) se presentan muchos problemas debido a que los procesos compiten por los recursos del sistema. Los programas concurrentes a diferencia de los programas secuenciales tienen una serie de problemas muy particulares derivados de las caracteristicas de la concurrencia:

 

  1. Violacion de la exclusion mutua: En ocasiones ciertas acciones que se realizan en un programa concurrente no proporcionan los resultados deseados. Esto se debe a que existe una parte del programa donde se realizan dichas acciones que constituye una region critica, es decir, es una parte del programa en la que se debe garantizar que si un proceso accede a la misma, ningun otro podra acceder. Se necesita pues garantizar la exclusion mutua.
  2. Bloqueo mutuo o deadlock: Un proceso se encuentra en estado de deadlock si esta esperando por un suceso que no ocurrira nunca. Se puede producir en la comunicacion de procesos y mas frecuentemente en la gestion de recursos. Existen cuatro condiciones necesarias para que se pueda producir deadlock:

 

 

  1. Retraso indefinido o starvation: Un proceso se encuentra en starvation si es retrasado indefinidamente esperando un suceso que no puede ocurrir. Esta situacion se puede producir si la gestion de recursos emplea un algoritmo en el que no se tenga en cuenta el tiempo de espera del proceso.
  2. Injusticia o unfairness: Se puden dar situaciones en las que exista cierta injusticia en relacion a la evolucion de un proceso. Se deben evitar situaciones de tal forma que se garantice que un proceso evoluciona y satisface sus necesidades sucesivas en algun momento.
  3. Espera ocupada: En ocasiones cuando un proceso se encuentra a la espera por un suceso, una forma de comprobar si el suceso se ha producico es verificando continuamente si el mismo se ha realizado ya. Esta solucion de espera es muy poco efectiva, porque desperdicia tiempo de procesamiento, y se debe evitar. La solucion ideal es suspender el proceso y continuar cuando se haya cumplido la condicion de espera.
  4. Condiciones de Carrera o Competencia: La condicion de carrera (race condition) ocurre cuando dos o mas procesos accesan un recurso compartido sin control, de manera que el resultado combinado de este acceso depende del orden de llegada.
  5. Postergacion o Aplazamiento Indefinido(a): Consiste en el hecho de que uno o varios procesos nunca reciban el suficiente tiempo de ejecucion para terminar a su tarea. Por ejemplo, que un proceso ocupa un recurso y lo marque como ocupado y que termine sin marcarlo como desocupado. Si algun otro proceso pide ese recurso, lo vera ocupado y esperara indefinidamente a que se desocupe.
  6. Condicion de Espera Circular:Esto ocurre cuando dos o mas procesos forman una cadena de espera que los involucra a todos.
  7. Condicion de No apropiacion: Esta condicion no resulta precisamente de la concurrencia, pero juega un papel muy importante en este ambiente. Esta condicion especifica que si un proceso tiene asignado un recurso, dicho recurso no puede arrebatarsele po nungun motivo, y estara disponible hasta que el proceso lo suelte por su voluntad.

 

Se debe evitar, pues, que dos procesos se encuentren en su seccion critica al mismo tiempo.

 

Las tecnicas para prevenir el deadlock consiste en proveer mecanismos para evitar que se presente una o varias de las  cuatro condiciones necesarias de  deadlock.

 

 

Para detectar un deadlock, se pude usar el mismo algoritmo del banquero, que aunque no dice que hay un deadlock, si dice cuando se esta en estado inseguro que es la antesala de deadlock. Sin embargo, para detectar el deadlock se puede usar las graficas de recursos. En ellas se puede usar cuadrados para indicar procesos  y circulos para los recursos, y las flechas para indicar si un recurso ya esta asignado a un proceso o si un proceso esta esperando un recurso. El deadlock es detectado cuando se puede hacer un viaje de ida y vuelta desde un proceso o recurso.

 

SECCIONES CRITICAS

La exclusion mutua necesita ser aplicada solo cuando un proceso acceda a datos compartidos; cuando los procesos ejecutan operaciones que no esten en conflicto entre si, debe permitirseles proceder de forma concurrente. Cuando un proceso esta accesando datos se dice que el proceso se encuentra en su seccion critica ( o region critica).

Mientras un proceso se encuentre en su seccion critica, los demas procesos pueden continuar su ejecucion fuera de su secciones criticas. Cuando un proceso abandona su seccion critica, entonces debe permitirsele proceder a otros procesos que esperan entrar en su propia seccion critica ( si hubiera un proceso en espera). La aplicacion de la exclusion mutual es uno de los problemas clave de la programacion concurrente. Se han diseñado muchas soluciones para esto: algunas de software y algunas de hardware, mas de bajo nivel y otras de alto nivel; algunas que requieren de cooperacion voluntaria, y algunas que demandan una adherencia rigida a protocolos estrictos.

Estar dentro de una seccion critica es un estado muy especial asignado a un estado. El proceso tiene acceso exclusivo a los datos compartidos, y todos los demas procesos que necesitan accesar a esos datos permanecen en espera. Por tanto, las secciones criticas deben ser ejecutadas lo mas rapido posible, un programa no debe bloquearse dentro de su seccion critica, y las secciones criticas deben ser codificadas con todo cuidado.

Si un proceso dentro de una seccion criticaa termina, tanto de forma voluntaria como involuntaria, entonces, al realizar su limpieza de terminacion, el sistema operativo debe liberar la exclusion mutua para que otros procesos puedan entrar en sus secciones criticas

 

 

 

Asi para garantizar la exclusion mutua tenemos las siguientes opciones:

 

  1. Desactivar las interrupciones: Consiste en desactivar todas las interrupciones del proceso antes de entrar a al region critica, con lo que se evita su desalojo de la CPU, y volverlas activar a la salida de la seccion critica. Esta solucion no es buena, pues la desactivacion de las interrupciones deja a todo el sistema en manos de la voluntad del proceso unitario, sin que exista garantia de reactivacion de las interrupciones.
  2. Emplear variables de cerradura: Consiste en poner una variable compartida, una cerradura, a 1 cuando se va a entrar en la region critica, y devolverla al valor 0 a la salida. Esta solucion en si misma no es valida porque la propia cerradura es una variable critica. La cerradura puede estar a 0 y ser comprobada por un proceso A, este ser suspendido, mimentras un proceso B chequea la cerradura, la pone a 1 y puede entrar a su region critica; a continuacion A la pone a 1 tambien, y tanto A como B pueden encontrar en su seccion critica al mismo tiempo. Existen muchos intentos de la solucion a este problema:

 

 

-         -         El algoritmo de Dekker

-         -         El algoritmo de Peterson

-         -         La instruccion hardware TSL : Test & Set Lock

 

 

Las soluciones de Deker , Peterson y TSL son correctas pero emplean espera ocupada. Basicamente lo que realizan es que cuando un proceso desea entrar en su seccion critica comprueba si esta permitida la entrada o no. Si no esta permitida, el proceso se queda en un bucle de espera hasta que se consigue el permiso de acceso. Esto produce un gran desperdicio de tiempo de CPU, pero pueden aparecer otros problemas como la espera indefinida.

 

Una solucion mas adecuada es la de bloquear o dormir el proceso (SLEEP) cuando esta a la espera de un determinado evento, y despertarlo (WAKEUP) cuando se produce dicho evento. Esta idea es la que emplean las siguientes soluciones:

 

1.      1.      Semaforos.- Esta solucion fue propuesta por Dijkstra [DIJ65]. Un semaforo es una variable contador que controla la entrada a la region critica. Las operaciones P o (WAIT) y V (o SIGNAL)  controlan, respectivamente, la entrada y salida de la region critica. Cuando un proceso desea acceder a su seccion critica realiza un WAIT(var_semaf). Lo que hace esta llamada es, si var_semaf = = 0 entonces el proceso se bloquea, sino var_semaf = var_semaf – 1. Al finalizar su region critica, libera el acceso con SIGNAL (var_semaf), que realiza var_semaf = var_semaf + 1. Las acciones que realizan de forma atomica, de tal forma que mientras se realiza la operacion P o V ningun otro proceso pueda acceder al semaforo. Son el mecanismo mas empleado para resolver la exclusion mutual, pero son restrictivos y no totalmente seguros (depende de su implementacion), aunque son empleados en ocasiones para implementar otros metodos de sincronizacion.

2.      2.      Regiones criticas condicionales.- Esta solucion fue  propuesta por HOARE [HOA74] y Brinch Hansen [BRI75] como mejora de los semaforos. Consiste en definir las variables de una region critica como recursos con un nombre, de esta forma la seccion critica se precede con el nombre de recurso que se necesita y opcionalmente una condicion que se debe cumplir para acceder a la misma. Es un buen mecanismo, pero  no suele ser soportado por la mayoria de los lenguajes de programacion.

3.      3.      Monitores.- Esta solucion tambien fue propuesta por Brinch Hansen [BRI75] y Hoare [HOA74].  Un monitor es una construccion de concurrencia que contiene los datos y procedimientos necesarios para realizar la asignacion de un recurso compartido determinado, o de un grupo de recursos compartidos. Para cumplir con la funcion de asignacion de recurso, un procedimiento debe llamar a determinada entrada al monitor. Muchos procesos pueden tartar de entrar  al monitor en diversos momentos. Pero la exclusion mutual es aplicada rigidamente en los limites del monitor. Solo se permite la entrada a un proceso a la vez. Los procesos que deseen entrar cuando el monitor  esta en uno debe esperar. La espera es administrada de forma automatica por el monitor. Como la exclusion mutual esta garantizada, se evitan los desagradables problemas de concurrencia ( como  los resultados indeterminados). Los datos contenidos en el monitor pueden ser globales, para todos los procedimientos dentro del monitor, o locales, para un procedimiento especifico. Los procesos pueden llamar a los procedimientos del monitor cuando lo deseen para realizar las operaciones sobre los datos compartidos, pero no pueden acceder directamente a las estructuras de datos internas del monitor. Su principal propiedad para conseguir la exclusion mutual es que solo un proceso puede estar activo en un monitor es cada momento.

4.      4.      Paso de mensajes o transferencia de mensajes.- Es sin duda, el modelo mas empleado para la comunicacion entre procesos. Para la comunicacion se emplean las primitives SEND ( para enviar un mensaje) y RECEIVE ( para poner al proceso a la espera de un mensaje). Su ventaja es que se puede emplear para la sincronizacion de procesos en sistemas distribuidos. La comunicacion puede ser asincrona o sincrona. Empleando mensajes se pueden implementar semaforos o monitores, y viceversa.

 

 

CARACTERISTICAS DE LENGUAJES PARALELOS

 

Ø      Ø      Optimizacion: paralelizacion automatica o no, soporte interactivo de restructuracion de software.

Ø      Ø      Disponibilidad: escalabilidad, compatibilidad secuencial, portabilidad.

Ø      Ø      Comunicacion: Single assigment, variables compartidas, paso de mensajes, rpc, dataflow.

Ø      Ø      Control de paralelismo: granularidad, explicito o no, paralelismo de ciclos, paralelismo de tareas.

Ø      Ø      Paralelismo de datos: reparticion automatica, SPMD.

Ø      Ø      Manejo de procesos: creacion dinamica, hilos, replicacion, particion de la maquina, balanceo de carga automatico.

 

 

 

 

 

 

C CONCURRENTE

 

C  CONCURRENTE

 
 

 


C concurente es el resultado de un esfuerzo de mejoramiento de C, para que pueda ser utilizado para el desarrollo de programas concurrentes que puedan correr eficientemente en una sola computadora, en redes de computadoras distribuidas o en computadoras multiprocesadores. C concurrente es una extension compatible hacia arribe de C. Esta extensiones incluyen macanismos para la declaracion y creacion de procesos, para la sincronizacion e iteracion de procesos y la terminacion de procesos.

La programacion concurrente es esencial para la utilizacion eficiente de las arquitecturas multiprocesador. Hay veces en donde no es conveniente y conceptualmente elegante el desarrollo de sistemas en donde varios eventos ocurren concurrentemente.

 

Un programa C concurrente consiste de uno o mas procesos. Los procesos son los bloques de desarrollo de la programacion concurrente. Cada procesos es un componente secuencial del programa que tiene su propio “control de flujo”, y su propio stack y registros. En teoria todos los proceso se ejecutan en paralelo (esto no es cierto si solamente hay un solo procesador). En alguans implementaciones multiprocesador, cada procesador tiene su propio calendarizador. Esto depende de la implementacion; una implementacion diferente podria dedicar un procesador a cada proceso.

Cuando un programa C concurrente empieza su ejecucion, nomas existe un solo proceso activo. Este proceso es conocido como el proceso main y llama a la funcion main.

 

 

Archivo: hola.cc

#include<stdio.h>

 

main( )

{

Printf(“Hola Mundo\n”)

}

 

 

El siguiente programa el proceso  main crea otrro proceso que tambien imprime mensajes.

 

Archivo: printer1.cc

#include<stdio.h>

process spec printer( );

process body printer( )

{

Printf(“Hola del proceso printer\n”);

main( )

{

printf (“Hola del main\n”);

create printer ( );

printf( “Adios del main\n”);

}

 

 

 

 

 

 

 

 

 

 

BIBLIOGRAFIA CONSULTADA

 

 v http://itver.edu.mx/so1/definiciones%20de%20proceso.htm

        El termino “proceso”, fue utilizado por primera vez por los diseñadores del sistema

        Multics en los años 60`s.

 

v http://lara.pue.udlap.mx/sist_oper/capitulo5.html

En los sistemas de tiempo compartido se presentan muchos problemas debido a los            procesos que compiten por algun recurso. Aqui se muestran algunos de los problemas de Concurrencia.

 

v http://agamenon.uniandes.edu.co/~c21437/ma-bedoy/taxonomi.htm

        Taxonomia de las arquitecturas de computadoras, la cual se le debe a Flynn.

 

v http://itver.edu.mx/so1/Definiciones%2032.htm

        Concurrencia de procesos. Definicion de concurrencia.

 

 

v http://1ml.ls.fi.upm.es/~angel/concurrente/96notes/nodel15.html

        Estado de un programa concurrente

 

 

v http://www.biocristalografria.df.ibilce.unesp.br/irbis/disertacion/node239.html

        Concepto de concurrencia

 

 

v http://gsyc.escet.urjc.es/simple_com/phd-thesis-es/node53.html

        Ejecucion de un programa concurrente

 

v http://1ml.ls.fi.upm.es/~angel/concurrente/96notes/nodel16.html

        Concepto de sincronizacion

 

 

v http://tiny.uasnet.mx/prof/cln/ccu/mario/sisop/sisop06.htm

        Concepto de monitores.

 

 

v http://fciencias.ens.uabc.mx/notas_cursos/so2/c_concu.html

        C concurrente.

 

v http://www.geocities.com/SiliconValley/Bay/9418/2_CONCEPTOS.htm

        Conceptos basicos  de paralelismo y concurrencia.

 

v      http://research.cem.itesm.mx/jesus/cursos/compd2/s2/node2.html

Caracteristicas de los lengiajes paralelos.

      -Paralelismo explicito

      -Paralelismo implicito

 

v       http://www.inf.ufrgs.br/procpar/tools/cc++exeCp.htm

Ejemplo de C paralelo.