enrique+23-02-07

**Introducción.**
La mayor parte de los procesadores de hoy en día presentan las siguientes características:


 * 1) Utlizan una arquitectura **VLWI** (Very Large Instruction Word). Este tipo de instrucciones es sobre todo utilizada por los procesadores graficos. Otro ejemplo de estos procesadors es el Itanium.
 * 2) El **paralelismo asimétrico** se basa en que varios procesadores diferentes realizan tareas distintas.
 * 3) La arquitecturas de altas presataciones se caraterizan por **arquitecturas multiebra**, por la cuales es posible intriducir en el pipeline instruciones de diferentes hebras. Este tipo de arquitecturas esta presente ya tanto en los procesadores de Intel como en AMD. ¿Qué sentido tiene aumentar indefinidamente el número de procesadores?
 * 4) **Paralelismo simétrico**, con varios nucleos por procesador.
 * 5) **La conectividad**. Todos los ordenadores llevan ya conectividad bluetooth o wifi, los móviles..., prácticamente se da por sentado que parte del procesamiento se va a realizar fuera. Vista requiere la activación de forma externa. Google ha sacado una suite ofmática on-line.

Sin embargo los sitmas opertaivos no estan aún demasiado preparados para llevar a cabo este reparto de carga de trabajo. A esto hay que añadir que los procesadores se encuentran la mayor parte del tiempo desocupados. El área de la informática que trata de aprovechar al máximo estos recursos es la computación distribuida o la computación concurrente.

Vamos a ver diferentes tipos de lenguajes de programación. La programación distribuida no tiene un lenguaje estricto, en cada caso se puede utilizar el lenguaje más adecuado. En principio utilizaremos JavaScript, Ruby, y Perl. Vamos a trabajar a nivel de aplicaiación. Hoy en día tal y como cambia el hardware no merece la pena aprender las características de bajo nivel de la tecnología actual que en un par de años puede quedar anticuada.

Computación distribuida
La idea de la computacion distribuida es trabajar con varios sitemas separados físicamente. LLamamos nodos a aquellos puntos de la red con capacidad de procesamiento. La computacion distribida tratra de diseñar y programar sistemas distribudos físicamente. Los sistemas distribuidos son tolerantes a fallos, pero según que fallos, existen fallos que pueden provocar caídas en el rendimiento del sistema. Los sistemas distribuidos se tratan de programar de forma que sean transparentes al hardware.

En computacion paralela es necesario conocer explicitamente la existencia de diferentes sistemas, no es tan transparente como pueden ser los sistemas distribuidos. Los sistemas paralelos ya casi no se utlizan, han sido sustituidos por los sistema distribudos que pueden ser de diferentes tipos:


 * Los sistemas //cluster// se caracterizan porque las máquinas que los componene tienen una misma congfiguración. Así mismo los sitemas cluster tienen cierta sincronizacion entre los nodos y requieren del control de todos los nodos por un único administrador.
 * Los //sistemas grid// son muy parecidos a los cluster, los componenetes de estos pueden estar conectados en distinto sitios y no tienen poruqe tener un unico administrador.
 * Las //redes overlay// incluyen diferentes recursos unidos por una aplicación que mantiene simultáneamente la conectividad, y proporciona todos los demás servicios relacionados con el mantenimiento de la red. Se denominan //overlay// por estar construidos //encima// de otras redes.
 * Sistemas //entre pares// son redes overlay. Se caracterizan porque no difernecian entre máquinas, todos las máquinas estan en mismo nivel, son pares. Algunas de las más usadas son Bittorrent, eMule y Gnutella. Tanto emule como Bittorrent descargan el fichero por partes. Dentro de eMule existe dos tps de serviodres ed2k y kad que se dirferencian en la estructura centralizada o distribuida utilizada. Gnutella se descarga el fichero completo de un mismo nodo.
 * Computación //de ciclos redundantes//: se trata de aprovechar la capacidad de un ordenador que está encendido, pero sin realizar ninguna tarea que lo cargue, esto es aprovechar los ciclos desperdiciados. El sistema más popular es SETI@home que se ejecuta con un salvapantallas cuando el ordenador no está siendo usado.

Midleware es cualquier tipo de cosa que se ajuste a la estructura cliente/servidor. Los servicios web son formas semantica y sintacticamente ricas de conectarse a un serividor, el cliente conoce la forma de conectarse al servidor y las funciones de este. El paradgma básico de un sistema cliente /servidor es el fichero, creas el fichero y lo envías, con el servicio web conoces las fuciones del servidor.