Subsecciones

- 2.1.1 Visión histórica
- 2.1.2 Problemas que se pueden resolver con sistemas paralelos
- 2.1.3 Soluciones actuales que se dan a dichos problemas

# 2.1 INTRODUCCIÓN

## 2.1.1 Visión histórica

En lo que se refiere a la capacidad de procesamiento, existen varias alternativas para el futuro. Actualmente la capacidad de integración y el abaratamiento de las tecnologías permite que casi cualquier empresa pueda contar con una capacidad de cómputo antes inimaginable para las tareas que necesita. Se prevé que la capacidad de integración llegue a un techo tecnológico, en el cual se necesite un nuevo paradigma para poder seguir incrementando la capacidad de procesamiento de las máquinas. Uno de esos paradigmas es el procesamiento paralelo.

Por procesamiento paralelo se entiende la capacidad de utilizar varios elementos de proceso para ejecutar diferentes partes del mismo programa simultáneamente.

La resolución de problemas mediante procesamiento paralelo no es nueva, está basada en el viejo y conocido método de divide y vencerás utilizado para resolver problemas de carácter computacional.

Un analogía para explicar las ventajas y límites de este método es la siguiente: se ha decidido ordenar una biblioteca mediante el criterio tipo y autor. Una solución sería separar todos los libros por su tipo en pilas y luego que una sola persona ordenara cada uno de esas pilas por el nombre de su autor. En la resolución paralela del problema se añadiría una segunda persona, de manera que cada persona catalogase según el tipo la mitad de la biblioteca, tardándose la mitad de tiempo en esta fase, y luego que cada uno fuese colocando las pilas de los tipos por autor. La solución paralela obtiene como ventaja, en este caso, la reducción del tiempo a la mitad para solucionar el problema. ¿Qué sucedería si se añadiesen más personas dedicadas a catalogar la biblioteca? En un principio, cuantas más personas trabajen en el proceso, antes acabará éste, es decir, existe una relacción lineal entre el tiempo de resolución del problema y el número de personas que trabajan en la ordenación de la biblioteca. Pero por otro lado, parece estúpido contratar a 200 personas para colocar una biblioteca de 200 libros.

Esta analogía muestra las ventajas que puede tener la resolución de un problema mediante el procesamiento paralelo, pero también muestra los límites en la resolución.

Relativo al mundo de la tecnología y al campo de los procesadores en general, se descubrió que las arquitecturas paralelas podían solventar de manera más rápida cierto tipo de problemas. Desde 1955 personas como Gene Amdahl2.1 han investigado en el campo de arquitecturas paralelas obteniendo aquellos parámetros que optimizaban las arquitecturas así como aquellos que hacían que la relación coste-rendimiento aumentase. Empresas como IBM, DEC y desde luego muchas otras organizaciones como el MIT, se llevan interesando en la computación paralela desde las décadas de los 50-60, y de hecho siguen investigando y obteniendo resultados en la actualidad, hasta el punto en que prácticamente todos los ordenadores que existen actualmente en el mercado explotan de una u otra manera soluciones paralelas.

En la década de los 80, la compartición de recursos mediante redes de computadores hizo posible un nuevo planteamiento para aprovechar no solo recursos como capacidad de almacenamiento o capacidad de impresión, sino para utilizar ciclos de CPU de otras máquinas conectadas a la red (los llamados multicomputadores). En los 70 y a primeros de los 80, personas como Bruce J.Nelson2.2 de Xerox expusieron trabajos teóricos de cómo se podía utilizar mediante software esta capacidad de procesamiento paralelo que hasta ahora estaba relegada principalmente al hardware, limitándose el software a aprovecharlo mediante técnicas de programación explícita. En 1985, Intel produjo el primer iPSC/1. Este multicomputador era una combinación de muchos 80286 conectados en una topología hipercubo a través de controladoras ethernet, mostrando que era real y posible utilizar este tipo de redes para explotar los sistemas paralelos.

En la década de los 90, el uso de las redes de computadores se extendió de manera exagerada en comparación a otros campos como el de sistemas operativos o el de arquitectura de computadores.

Otro concepto importante que no se debe confundir con el de paralelo es el término concurrente. Edger Dijstra en 1965 describió el problema de las regiones críticas en las arquitecturas paralelas y como solucionarlo mediante semáforos (solucionado en 1968), pero fue en 1975 cuando introdujo el concepto de concurrencia, basándose en sus trabajos anteriores. Actualmente la implementación de concurrencia la realizan muchos lenguajes de programación.

Si por paralelismo se entienden procesos que se ejecutan en varios elementos de proceso para llegar la resolución conjunta de un problema, por concurrencia se entiende procesos que se ejecutan de manera independiente en un mismo procesador, para la resolución de uno o varios problemas (multitarea). Un ejemplo de concurrencia lo tenemos en prácticamente todos los sistemas operativos que se utilizan en la actualidad, puesto que comparten el mismo procesador para prestar un único servicio al usuario.

Otro ejemplo sería la utilización de un programa concurrente en el cual dos procesos solucionen un problema único2.3. El uso de concurrencia y de paralelismos conllevan principalmente un problema de comunicación entre los elementos de proceso o los procesos entre sí para que la resolución de un problema mediante estos paradigmas sea viable.

## 2.1.2 Problemas que se pueden resolver con sistemas paralelos

Se pueden distinguir dos épocas en las cuales los problemas que han provocado la aparición de sistemas paralelos y distribuidos han sido diferentes:

- Por un lado las décadas de los 60-70-802.4, en las cuales el máximo problema era optimizar la capacidad de procesamiento, y de esta manera aumentar el rendimiento de las máquinas y la producción de éstas.
- Por otro lado, desde la década de los 90 hasta la actualidad, donde los problemas han aumentado: a los que existían en las décadas anteriores se han sumado los provocados por la red Internet y el fenómeno de la nueva economía.

Este último punto es sencillo de entender: la nueva economía está formada por comercios a imagen y semejanza de los de la tradicional, pero con las ventajas aportadas por el mundo de las máquinas. Son nuevas tiendas y negocios que funcionan 24 horas al día 7 días a la semana, que no necesitan de personal, excepto técnico, para su puesta en marcha y al que se accede a través de Internet. Con este nuevo tipo de negocio, muchas empresas hacen inversiones en equipo y personal técnico, para ofrecer a nivel mundial soluciones que de otra manera podrían ser inviables por precio, tiempo u organización. Las empresas exigen a esta nuevas tecnologías, lo mismo que han exigido siempre a las antiguas:

- Máximo rendimiento, mínimo coste. Intentando hacer lo imposible por que las inversiones realizadas sean amortizadas sin desperdiciar ningún recurso.

- Máximo aprovechamiento de los recursos existentes.

- Disponibilidad máxima. En en un negocio tradicional si uno de los trabajadores se pone enfermo, se intenta cubrir esta vacante con otro trabajador que satisfaga el trabajo. Con las nuevas tecnologías sucede lo mismo, se han creado infinidad de soluciones para evitar cierres de negocios temporales mediante UPS (para las caídas de luz), fuentes redundantes, equipos redundantes y otras muchas técnicas dedicadas a cubrir por completo el término alta disponibilidad.

- Confiabilidad máxima. Sabiendo que el sistema se va a comportar de la manera que se espera de él.

- Adaptación a los cambios. Tanto en forma de carga para el sistema como en forma de nuevo planteamiento del negocio. El sistema debe ser flexible y escalable.

Este último punto es importante por motivos claramente económicos (no solo a nivel de empresa) y supone un gran reto en el diseño de sistemas para que estos puedan adaptarse de manera eficiente a nuevas exigencias. Hablamos de un término muy importante que se utilizará a lo largo de todo el documento, la escalabilidad. Véase en un ejemplo. Una empresa quiere poner un negocio en Internet, contratan un asesor técnico que les explica que para lo que ellos quieren hacer necesitarán una capacidad de proceso equivalente al número máximo de clientes potenciales que creen que sus productos pueden acaparar en el mercado. La empresa compra los ordenadores que poseen dicha capacidad de proceso, sabiendo que éstos cumplirán con las expectativas iniciales planteadas, de manera que todos los recursos invertidos estarán siendo utilizados de manera continua.

Pasado un tiempo de continua prosperidad empresarial, la empresa se da cuenta de que el sistema se quedó pequeño para el volumen de ventas, vuelven a contactar con el asesor técnico y este les explica que la única opción es comprar un segundo sistema, esta vez el doble de potente (y varias veces más costoso).

La empresa decide negarse porque la inversión realizada en el primer equipo aún está por amortizarse, además del gasto inútil que habrían realizado en el primer equipo, que en un principio quedaría inoperativo después del cambio.

He aquí que la competencia decide invertir en otro sistema más potente y mejor diseñado (no necesariamente más caro), con lo que da mejor servicio a los clientes y en poco tiempo provoca la quiebra de la primera. Ésta pues decide intentar dedicarse a otro sector, en el cual necesitarán nuevas tecnologías. Llaman a otro asesor técnico (esta vez mucho más listo que el anterior), que les explica como podrían reutilizar componentes del anterior sistema ahorrándose la inversión inicial para el nuevo proyecto.

Este ejemplo, algo drástico, refleja la realidad de muchas empresas que han quebrado por su popularidad y por su incapacidad de crecimiento. En cualquier caso, no es más que un ejemplo para introducir un concepto de escalabilidad. Ilustra la ventajas de sistemas fácilmente escalables como pueden ser cluster con respecto a otros, no tan fácilmente escalables, como pueden ser mainframes y otros supercomputadores vectoriales.

La definición de escalabilidad más apropiada a los términos que se referirá en este documento es: un sistema se dice escalable si es capaz de escalar, es decir, de incrementar sus recursos y rendimiento a las necesidades solicitadas de manera efectiva o, en el caso de scale down, reducir costes.

Aunque la mayoría de las veces se habla de escalar hacia arriba, es decir de hacer el sistema más grande, no es siempre necesario. Muchas veces interesa hacer el sistema más pequeño pudiendo reutilizar los componentes excluidos. Que un sistema sea escalable implica:

1. Funcionalidad y rendimiento. Si un sistema escala, mejora su rendimiento, de manera que de forma ideal, al aumentar en `N` el número de elementos de proceso del sistema éste debe aumentar en `N` el rendimiento.

2. Escalabilidad en coste. De lo anterior se deduce que idealmente el coste de la escalabilidad de 1 a `N` en un sistema lleve un coste de `N` por el coste de un procesador. La escalabilidad perfecta es lineal, si una potencia 10 veces superior nos cuesta 15 veces más, el sistema no está escalando bien.

3. Compatibilidad de componentes. De manera que la inclusión o exclusión de componentes en el sistema no suponga la inutilización, infrautilización o coste adicional en los componentes.

Con todo esto queda patente que tener un alto factor de escalabilidad es un requisito interesante para cualquier sistema.

También es importante hacer notar que los sistemas distribuidos (y otros sistemas paralelos) son, por ahora, los sistemas que más se acercan a la escabilidad lineal. En el ejemplo anterior (supercomputador, mainframe) realmente un equipo el doble de potente no vale el doble sino varias veces más; en cambio en sistemas distribuidos al doble de precio se consigue mejor relación. Esta relación de precios puede verse en los precios de microprocesadores: costar el doble no significa el doble de potencia, sino que los precios siguen una curva exponencial según aumentan sus prestaciones.

## 2.1.3 Soluciones actuales que se dan a dichos problemas

Respecto a la evolución de los sistemas y con objeto de obtener mayor capacidad de procesamiento, el paralelismo a todos los niveles ha sido una de las soluciones más utilizadas, de hecho en la actualidad, la práctica totalidad de los ordenadores y microprocesadores explotan de una manera u otra tecnologías paralelas, ya sea en multiprocesadores, en multicomputadores o en procesadores independientes2.5MMX en los procesadores Intel, 3DNow! en los AMD, Altivec en la arquitectura PPC, entre otras.

Respecto a los requisitos de alta disponibilidad que requieren las soluciones actuales se proponen soluciones como UPS, generadores redundantes, hardware redundante2.6, soluciones software de alta disponibilidad como la tecnología HA-Linux u otros clusters de este tipo de otras compañías como Piranha de RedHat, Va-Linux, Compaq, Sun... prácticamente todas las grandes marcas de ordenadores han sacado su sistema cluster específico al mercado.

Otra solución existente es el balanceo de carga. Este tipo de cluster es muy utilizado en conjunción con los de alta disponibilidad, sobre todo en las conexiones de servidores a Internet, de manera que varios servidores dan un único servicio de manera transparente a sus usuarios.

Otro balanceo distinto, relativo a los clusters de alto rendimiento y a la migración de procesos, es el ofrecido por los llamados multicomputadores, o los sistemas distribuidos. En general estos son los sistemas que se acercan más a el concepto de sistema operativo distribuido del que se hablará más adelante. Clusters o sistemas de este tipo son openMosix, Beowulf y otros en el mundo del software libre y otros tantos en el del software propietario. A otra escala existen los paquetes software que permiten construir grids con todo el tratamiento de certificados y permisos de usuario necesarios. Estos sistemas no se tratarán en este manual.

Como se puede ver existen una infinidad de soluciones distintas para cada sección de problema concreto, no obstante no existe un sistema de carácter general que resuelva todos los problemas planteados debido a las dispares finalidades con que se diseñan.