2. HISTORIA DE LA PROGRAMACIÓN CONCURRENTE
La programación concurrente tiene sus raíces en los sistemas operativos.
En los años 60’s se introdujeron en las computadoras dispositivos
controladores independientes de entrada-salida llamados canales.
La programación de sistemas con capacidades de concurrencia se hacía a
bajo nivel, en ensamblador.
3. HISTORIA DE LA PROGRAMACIÓN CONCURRENTE
Los pioneros en este campo fueron:
EdsgerWybe Dijkstra fue un científico de la computación de los Países Bajos.
Per Brinch Hansen fue un informático danés-estadounidense conocido por la teoría de la
programación concurrente.
Charles Antony Richard Hoare también conocido familiarmente como Tony Hoare, es un
científico británico en computación.
4. PROGRAMACION CONCURRENTE
La programación concurrente es la simultaneidad en la ejecución de
múltiples tareas interactivas. Estas tareas pueden ser un conjunto de
procesos o hilos de ejecución creados por un único programa.
6. MULTITAREAS
Es la capacidad de un sistema operativo para ejecutar varios procesos al
mismo tiempo corriendo sobre un procesador. Con los sistemas operativos
DOS esto era incapaz de realizarse.
7. TIPOS DE MULTITAREA
Multitarea Nula (Usada cuando solo existía un procesador)
Multitarea Cooperativa (Usada por los sistemas operativos Windows antes
de la versión 1995.
Multitarea Preferente (Usada porWindows en los años 2000)
Multitarea Real (Usada Actualmente)
8. MULTIPROGRAMACIÓN
Es la técnica que permite que dos o más programas ocupen la misma unidad de
memoria principal y que sean ejecutados al mismo tiempo.
9. VENTAJAS DE LA PROGRAMACIÓN
CONCURRENTE
Proporciona el modelo más simple y natural de concebir muchas
aplicaciones.
Facilita el diseño orientado a objeto de las aplicaciones, ya que los objetos
reales son concurrentes.
Hace posible compartir recursos y subsistema complejos. En sistemas
monoprocesador permite optimizar el uso de los recursos.
Facilita la programación de tiempo real, ya que se pueden concebir como
procesos cuya ejecución se planifican de acuerdo con la urgencia.
Permite reducir los tiempos de ejecución sobre plataformas
multiprocesadoras.
Facilita la realización de programas fiables por despliegue dinámico de los
procesos en los procesadores.
Notas del editor
La programación concurrente tiene sus raíces en los sistemas operativos y en la programación de sistemas, no en vano, los primeros programas concurrentes fueron los propios sistemas operativos de multiprogramación en los que un solo procesador de gran capacidad debía compartir su tiempo entre muchos usuarios. En los años 60’s se introdujeron en las computadoras dispositivos controladores independientes de entrada-salida llamados canales. Estos canales eran programables en sí mismos. Los sistemas operativos fueron organizados como una colección de procesos ejecutándose concurrentemente (“al mismo tiempo”), algunos en los canales y otros ejecutándose en el procesador principal o CPU.
Por otro lado en esos años la programación de sistemas con capacidades de concurrencia se hacía a bajo nivel, en ensamblador, pues aparte de no disponer de lenguajes de alto nivel con capacidades de concurrencia, se primaba la supuesta eficiencia del código escrito directamente en ensamblador. La aparición en 1972 del lenguaje de alto nivel Concurrent Pascal, desarrollado por Brinch Hansen abrió la puerta a otros lenguajes de alto nivel que incorporaban concurrencia.
La programación concurrente es la simultaneidad en la ejecución de múltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa. Las tareas se pueden ejecutar en un sola UCP (Unidad central de procesamiento) (multiprogramación), en varios procesadores o en una red de computadores distribuidos . La programación concurrente está relacionada con la programación paralela , pero enfatiza más la interacción entre tareas. Así, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina.
Multitareas: Es la capacidad de un sistema operativo para ejecutar varios procesos al mismo tiempo corriendo sobre un procesador. Con los sistemas operativos DOS esto era incapaz de realizarse. Existen varios tipos de multitareas y son:
Multitarea Nula: Es aquella en la que el sistema operativo carece de multitarea. Aun así puede simularla implementándola en un espacio de usuario o usando trucos. Justamente la familia DOS son ejemplos de sistemas operativos de multitarea nula.
Multitarea Cooperativa: Tipo de multitarea en donde los procesos de usuario son quieres ceden la CPU al sistema operativo a intervalos regulares. Los sistemas operativos Windows antes de la versión 1995 implementaban este tipo de multitarea.
Multitarea Preferente: Multitarea en donde el SO se encarga de administrar uno o más procesadores, repartiendo el tiempo de uso del mismo entre los distintos procesos que esperan utilizarlo (tareas en ejecución).
Multitarea Real: Multitarea en donde el SO ejecuta los procesos realmente al mismo tiempo haciendo uso de múltiples procesadores (más de dos). Todos los sistemas operativos modernos soportan esta capacidad.
Multiprogramación
Es la técnica que permite que dos o más programas ocupen la misma unidad de memoria principal y que sean ejecutados al mismo tiempo. La multiprogramación se refiere a dos o más programas corriendo o procesándose al mismo tiempo; La multiprogramación se controla a través del sistema operativo, el cual observa los programas y los vigila hasta que estén concluidos. El número de programas que pueden multiprogramarse en forma efectiva, depende de una combinación de la cantidad de memoria, de la velocidad de la CPU y del número y velocidad de los recursos periféricos que tenga conectados, así como de la eficiencia del SISTEMA OPERATIVO.