\newpage
%===========================================================================
%       x.2 > Introducci\'on
%===========================================================================
\pagestyle{empty}
\begin{latexonly}
\ifpdf
 \begin{figure}[htbp]
       \includegraphics[bb = -300 220 0 0, scale=.8]{./TuXes/tux-newbies.png}
 \end{figure}
 \vspace{5in}
\else
 \begin{figure}
       \includegraphics[-230,600][0,0]{./TuXes/tux-newbies}
 \end{figure}
\fi
\hfill\line(1,0){400}
\end{latexonly}
\topmargin 1in
\section{INTRODUCCI\'ON}
\begin{latexonly}
\line(1,0){400}
\newpage
\end{latexonly}
\topmargin 0in
\pagestyle{fancy}
%========================cita===============================================
\begin{latexonly}
\hspace{1in}\textcolor{blue_omosix}{{\em Your theory is crazy,}}

\hspace{1in}\textcolor{blue_omosix}{{\em but it's not crazy enough to be true.}}

\hspace{4in}\textcolor{blue_omosix}{{\em Niels Bohr}}
\vspace{0.5in}
\end{latexonly}
%===========================================================================
\subsection{Visi\'on hist\'orica}
En lo que se refiere a la capacidad de procesamiento, existen varias alternativas
 para el futuro.
Actualmente la capacidad de integraci\'on y el abaratamiento de las tecnolog\'\i as
 permite que casi cualquier empresa pueda contar con
 una capacidad de c\'omputo antes inimaginable para las tareas que necesita.
 Se prev\'e que la capacidad de integraci\'on llegue a un techo tecnol\'ogico,
 en el cual se necesite un nuevo paradigma para poder seguir incrementando
 la capacidad de procesamiento de las m\'aquinas. Uno de esos paradigmas
 es el procesamiento paralelo.

\vspace{.2in}
Por {\bf procesamiento paralelo} se entiende {\bf la capacidad de utilizar varios elementos de proceso
 para ejecutar diferentes partes del mismo programa simult\'aneamente.}

\vspace{.2in} 
La resoluci\'on de problemas mediante procesamiento paralelo no
 es nueva, est\'a basada en el viejo y conocido m\'etodo de {\em divide
 y vencer\'as} utilizado para resolver problemas de car\'acter computacional.

Un analog\'\i a para explicar las ventajas y l\'\i mites de este m\'etodo
 es la siguiente: se ha decidido ordenar una biblioteca mediante
 el criterio tipo y autor. Una soluci\'on ser\'\i 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\'on paralela del problema se a\~{n}adir\'\i a una segunda persona,
 de manera que cada persona catalogase seg\'un el tipo la mitad de la biblioteca,
 tard\'andose la mitad de tiempo en esta fase, y luego que cada uno fuese
 colocando las pilas de los tipos por autor.
 La soluci\'on paralela obtiene como ventaja, en este caso, la reducci\'on del
 tiempo a la mitad para solucionar el problema.
 ?`Qu\'e suceder\'\i a si se a\~{n}adiesen m\'as personas dedicadas a catalogar la biblioteca?
 En un principio, cuantas m\'as personas trabajen en el proceso, antes acabar\'a
 \'este, es decir, existe una relacci\'on lineal entre el tiempo de resoluci\'on
 del problema y el n\'umero de personas que trabajan en la ordenaci\'on de la
 biblioteca. Pero por otro lado, parece est\'upido contratar a 200 personas
 para colocar una biblioteca de 200 libros.

 Esta analog\'\i a muestra las ventajas que puede tener la resoluci\'on de un
 problema mediante el procesamiento paralelo, pero tambi\'en
 muestra los l\'\i mites en la resoluci\'on.

\vspace{.2in} 
Relativo al mundo de la tecnolog\'\i a y al campo de los procesadores en general,
 se descubri\'o que las arquitecturas paralelas pod\'\i an solventar de manera
 m\'as r\'apida cierto tipo de problemas.
 Desde 1955 personas como Gene Amdahl\footnote{En aquellos momentos
 trabajaba en IBM como principal dise\~{n}ador de la arquitectura del 704, este ordenador fue el primer ordenador comercial en tener unidad de coma flotante, y ten\'\i a un rendimiento de unos 5Kflops.} han investigado en el campo de arquitecturas paralelas obteniendo aquellos
 par\'ametros que optimizaban las arquitecturas as\'\i\  como aquellos que hac\'\i an
 que la relaci\'on coste-rendimiento aumentase.
 Empresas como IBM, DEC y desde luego muchas otras organizaciones como el
 MIT, se llevan interesando en la computaci\'on paralela desde las d\'ecadas
 de los 50-60, y de hecho siguen investigando y obteniendo resultados
  en la actualidad, hasta el punto en que pr\'acticamente
 todos los ordenadores que existen actualmente en el mercado explotan de
 una u otra manera soluciones paralelas.

En la d\'ecada de los 80, la compartici\'on de recursos mediante redes de
computadores hizo posible un nuevo planteamiento para aprovechar no solo
recursos
 como capacidad de almacenamiento o capacidad de impresi\'on, sino para utilizar
 ciclos de CPU de otras m\'aquinas conectadas a la red (los llamados multicomputadores).
 En los 70 y a primeros de los 80, personas como Bruce J.Nelson\footnote{Propuso en 1981 una primera descripci\'on de lo que se llamar\'\i a RPC (Remote Procedure Call), que permiti\'o crear luego infinidad de aplicaciones distribuida
s as\'\i  como sistemas distribuidos.} de Xerox expusieron trabajos te\'oricos de c\'omo se pod\'\i a utilizar mediante software esta capacidad de procesamiento paralelo que hasta ahora estaba
 relegada principalmente al hardware, limit\'andose el software a aprovecharlo mediante t\'ecnicas de programaci\'on expl\'\i cita.
 En 1985, Intel produjo el primer iPSC/1.
 Este multicomputador era una combinaci\'on de muchos 80286 conectados en
 una topolog\'\i a hipercubo a trav\'es de controladoras ethernet, mostrando que
 era real y posible utilizar este tipo de redes para explotar los sistemas
 paralelos.

 En la d\'ecada de los 90, el uso de las redes de computadores se extendi\'o
 de manera exagerada en comparaci\'on 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 {\em paralelo}
 es el t\'ermino {\em concurrente}.
 Edger Dijstra en 1965 describi\'o el problema de las regiones cr\'\i ticas en
 las arquitecturas paralelas y como solucionarlo mediante sem\'aforos (solucionado
 en 1968), pero fue en 1975 cuando introdujo el concepto de concurrencia, bas\'andose en sus trabajos anteriores.
 Actualmente la implementaci\'on de concurrencia la realizan muchos lenguajes
 de programaci\'on.

 Si por paralelismo se entienden procesos que se ejecutan en varios elementos
 de proceso para llegar la resoluci\'on conjunta de un problema, por concurrencia
 se entiende procesos que se ejecutan de manera independiente en un mismo
 procesador, para la resoluci\'on de uno o varios problemas ({\em multitarea}).
 Un ejemplo de concurrencia lo tenemos en pr\'acticamente todos los sistemas
 operativos que se utilizan en la actualidad, puesto que comparten el mismo procesador
 para prestar un \'unico servicio al usuario.

 Otro ejemplo ser\'\i a la utilizaci\'on de un programa concurrente en el cual
 dos procesos solucionen un problema \'unico\footnote{Por ejemplo la adquisici\'on
 de datos mediante varios sensores en procesos independientes y su procesamiento.}.
 El uso de concurrencia y de paralelismos conllevan principalmente un problema
 de comunicaci\'on entre los elementos de proceso o los procesos entre s\'\i\ 
 para que la resoluci\'on de un problema mediante estos paradigmas sea viable.
%===========================================================================
\subsection{Problemas que se pueden resolver con sistemas paralelos}
Se pueden distinguir dos \'epocas en las cuales los problemas que han provocado
 la aparici\'on de sistemas paralelos y distribuidos han sido diferentes:
\begin{itemize}
\item  Por un lado las d\'ecadas de los 60-70-80\footnote{En los 50 la optimizaci\'on de los sistemas dependian de manera casi \'unica de los avances tecnol\'ogicos m\'as que de
 los t\'eoricos.}, en las cuales el m\'aximo problema era optimizar la capacidad de procesamiento,
 y de esta manera aumentar el rendimiento de las m\'aquinas y la producci\'on
 de \'estas.
\item Por otro lado, desde la d\'ecada de los 90 hasta la actualidad,
 donde los problemas han aumentado: a los que exist\'\i an
 en las d\'ecadas anteriores se han sumado los provocados por la red Internet y el fen\'omeno
 de la nueva econom\'\i a.
\end{itemize}
 Este \'ultimo punto es sencillo de entender: la nueva econom\'\i a est\'a formada
 por comercios a imagen y semejanza de los de la tradicional, pero con las
 ventajas aportadas por el mundo de las m\'aquinas.
 Son nuevas tiendas y negocios que funcionan 24 horas al d\'\i a 7 d\'\i as a
 la semana, que no necesitan de personal, excepto
 t\'ecnico, para su puesta en marcha y al que se accede a trav\'es de Internet.
 Con este nuevo tipo de negocio, muchas empresas hacen inversiones en equipo
 y personal t\'ecnico, para ofrecer a nivel mundial soluciones que de otra
 manera podr\'\i an ser inviables por precio, tiempo u organizaci\'on.
 Las empresas exigen a esta nuevas tecnolog\'\i as, lo mismo que han exigido
 siempre a las antiguas:
\begin{itemize}
   \item M\'aximo rendimiento, m\'\i nimo coste.
 Intentando hacer lo imposible por que las inversiones realizadas sean amortizadas sin desperdiciar ning\'un recurso.

   \item M\'aximo aprovechamiento de los recursos existentes.

   \item Disponibilidad m\'axima. 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\'\i as sucede lo mismo, se han creado infinidad de
 soluciones para evitar cierres de negocios temporales mediante UPS (para
 las ca\'\i das de luz), fuentes redundantes, equipos redundantes y otras muchas
 t\'ecnicas dedicadas a cubrir por completo el t\'ermino {\em alta disponibilidad}.

   \item Confiabilidad m\'axima.
 Sabiendo que el sistema se va a comportar de la manera que se espera de
 \'el.

   \item Adaptaci\'on 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.
\end{itemize}

Este \'ultimo punto es importante por motivos claramente econ\'omicos (no solo a nivel de empresa) y supone
 un gran reto en el dise\~{n}o de sistemas para que estos puedan adaptarse de
 manera eficiente a nuevas exigencias.
Hablamos de un t\'ermino muy importante que
 se utilizar\'a a lo largo de todo el documento, la {\em escalabilidad}.
V\'ease en un ejemplo.
Una empresa quiere poner un negocio en Internet, contratan
 un asesor t\'ecnico que les explica que para lo que ellos quieren hacer
 necesitar\'an una capacidad de proceso equivalente al n\'umero m\'aximo 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 \'estos cumplir\'an con las expectativas iniciales planteadas,
 de manera que todos los recursos invertidos estar\'an siendo utilizados de
 manera continua.

 Pasado un tiempo de continua prosperidad empresarial, la empresa se da cuenta de que
 el sistema se qued\'o peque\~{n}o para el volumen de ventas,
 vuelven a contactar con el asesor t\'ecnico y este les
 explica que la \'unica opci\'on es comprar un segundo sistema, esta vez el
 doble de potente (y varias veces m\'as costoso).

 La empresa decide negarse porque la inversi\'on realizada en el primer equipo
 a\'un est\'a por amortizarse, adem\'as del gasto in\'util que habr\'\i an realizado
 en el primer equipo, que en un principio quedar\'\i a inoperativo despu\'es del
 cambio.

He aqu\'\i\ que la competencia decide invertir en otro sistema m\'as potente y mejor dise\~{n}ado (no necesariamente m\'as caro),
 con lo que da mejor servicio a los clientes y en poco tiempo provoca la
 quiebra de la primera. \'Esta pues decide intentar dedicarse a otro sector, en el cual necesitar\'an nuevas
 tecnolog\'\i as. Llaman a otro asesor t\'ecnico (esta vez mucho m\'as listo
 que el anterior), que les explica como podr\'\i an reutilizar componentes del
 anterior sistema ahorr\'andose la inversi\'on inicial para el nuevo proyecto.

\vspace{.1in}
Este ejemplo, algo dr\'astico, refleja la realidad de muchas empresas
 que han quebrado por su popularidad y por su incapacidad de crecimiento.
 En cualquier caso, no es m\'as que un ejemplo para introducir un concepto de escalabilidad.
 Ilustra la ventajas de sistemas f\'acilmente escalables como pueden ser cluster
 con respecto a otros, no tan f\'acilmente escalables, como pueden ser {\em mainframes}
 y otros supercomputadores vectoriales.

La definici\'on de escalabilidad m\'as apropiada a los t\'erminos que se referir\'a 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 {\em
 scale down}, reducir costes.

 Aunque la mayor\'\i a de las veces se habla de {\em escalar hacia arriba}, es decir
 de hacer el sistema m\'as grande, no es siempre necesario. Muchas veces
 interesa hacer el sistema m\'as peque\~{n}o pudiendo reutilizar los componentes
 excluidos.
 Que un sistema sea escalable implica:
\begin{enumerate}
   \item Funcionalidad y rendimiento.
 Si un sistema escala, mejora su rendimiento, de manera que de forma ideal,
 al aumentar en {\tt N} el n\'umero de elementos de proceso del sistema \'este debe
 aumentar en {\tt N} el rendimiento.

   \item Escalabilidad en coste.
 De lo anterior se deduce que idealmente el coste de
 la escalabilidad de 1 a {\tt N} en un sistema lleve un coste de {\tt N} por el coste
 de un procesador.
 La escalabilidad perfecta es lineal, si una potencia 10 veces superior
 nos cuesta 15 veces m\'as, el sistema no est\'a escalando bien.

   \item Compatibilidad de componentes.
 De manera que la inclusi\'on o exclusi\'on de componentes en el sistema no
 suponga la inutilizaci\'on, infrautilizaci\'on o coste adicional en los componentes.
\end{enumerate}
Con todo esto queda patente que tener un alto factor de {\bf escalabilidad es un requisito interesante para cualquier sistema.}

Tambi\'en es importante hacer notar que los sistemas distribuidos (y otros
 sistemas paralelos) son, por ahora, los sistemas que m\'as 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\'as; en cambio en sistemas distribuidos al doble de precio se consigue mejor relaci\'on. 
 Esta relaci\'on 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\'un aumentan sus prestaciones.
%=========================================================================== 
\subsection{Soluciones actuales que se dan a dichos problemas}
Respecto a la evoluci\'on 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\'as utilizadas, de hecho en la actualidad, la pr\'actica totalidad
 de los ordenadores y microprocesadores explotan de una manera u otra tecnolog\'\i as paralelas, ya sea en multiprocesadores, en multicomputadores o en procesadores
 independientes{\footnote MMX en los procesadores Intel, 3DNow! en los AMD, Altivec en la arquitectura PPC, entre otras}.

Respecto a los requisitos de {\em alta disponibilidad} que requieren las soluciones
 actuales se proponen soluciones como UPS, generadores redundantes, hardware
 redundante\footnote {Mainboards y microprocesadores que replican el procesamiento que hace su hom\'ologo
 a los datos de manera que cuando uno de los dos cae, el otro toma el trabajo
 y lo contin\'ua de manera transparente e intenta solucionar, si es que puede,
 los problemas de su espejo. Supone un alto precio pero una gran disponibilidad.}, soluciones software de alta disponibilidad como la tecnolog\'\i a HA-Linux u otros clusters de
 este tipo de otras compa\~{n}\'\i as como Piranha de RedHat, Va-Linux, Compaq,
 Sun... pr\'acticamente todas las grandes marcas de ordenadores han sacado su
 sistema cluster espec\'\i fico al mercado.

Otra soluci\'on existente es el {\em balanceo de carga}.
 Este tipo de cluster es muy utilizado en conjunci\'on con los de alta disponibilidad, sobre todo en las conexiones de servidores a Internet, de manera que
 varios servidores dan un \'unico servicio de manera transparente a sus usuarios.

Otro balanceo distinto, relativo a los clusters de alto rendimiento y a
 la migraci\'on de procesos, es el ofrecido por los llamados multicomputadores,
 o los sistemas distribuidos.
 En general estos son los sistemas que se acercan m\'as a el concepto de sistema
 operativo distribuido del que se hablar\'a m\'as 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 {\em grids} con todo el tratamiento de certificados y permisos de usuario necesarios. Estos sistemas no se tratar\'an en este manual.

\vspace{.2in}
Como se puede ver existen una infinidad de soluciones distintas para cada
 secci\'on de problema concreto, no obstante no existe un sistema de
 car\'acter general que resuelva todos los problemas planteados debido
 a las dispares finalidades con que se dise\~{n}an.
