Está en la página 1de 15

Tema 7: Multiprocesadores y Sistemas Distribuidos

Clasificación para los sistemas con varios procesadores (Flynn, 1972) basado en cómo la máquina relaciona sus
instrucciones con los datos que tiene que procesar.
1) SISD (Single Instruction Single Data). Un solo flujo de instrucción, un solo flujo de datos. Computadores con un
único procesador.
2) SIMD (Single Instruction Multiple Data). Un solo flujo de instrucciones, varios flujos de datos. Procesadores
vectoriales y computadores en array en los que una sola instrucción se ejecuta sobre varios datos.
3) MISD (Multiple Instruction Multiple Data). Flujo de varias instrucciones, un solo flujo de datos. Ningún
computador se ajusta a este tipo.
4) MIMD (Multiple Instruction Multiple Data). Flujo de varias instrucciones, flujo de varios datos. Grupo de
computadores independientes, cada uno con su propio contador de programa, programa y datos. Según la conexión
entre los procesadores, se pueden considerar:
a) Sistemas fuertemente acoplados. Los procesadores comparten la memoria y el reloj. Son sistemas
multiprocesadores y la comunicación generalmente se hace a través de la memoria compartida.
b) Sistemas débilmente acoplados. Los procesadores no comparten la memoria ni el reloj y cada uno tiene su
propia memoria local. Se comunican mediante redes locales o de área extensa. Son los sistemas distribuidos.
Un sistema distribuido proporciona a los usuarios acceso a los distintos recursos hardware y software controlado
por el SO. Esquemas básicos:
a.1) Sistemas operativos de red. Los usuarios están enterados de la multiplicidad de máquinas y para acceder a
sus recursos necesitan conectarse al computador remoto apropiado. Son sistemas débilmente acoplados
tanto en hardware como en software.
a.2.) Sistemas operativos distribuidos. Los usuarios no necesitan saber que existe una multiplicidad de
máquinas y pueden acceder a los recursos remotos de la misma forma que lo hacen a los recursos locales.
Son sistemas de hardware débilmente acoplado, pero de software fuertemente acoplados.

7.1. Ventajas e inconvenientes de los sistemas distribuidos

7.1.1. Ventajas

Frente a los sistemas centralizados.


1) Ahorro económico al mejorar la relación precio/rendimiento.
2) Mayor potencia de cálculo
3) Mejor adaptación a sistemas y aplicaciones inherentemente distribuidos (cadenas de producción, sucursales
bancarias, etc.).
4) Mayor fiabilidad. Un fallo en un procesador afectará como mucho a una máquina.
5) Posibilidad de crecer incrementalmente según las necesidades.

Frente a los computadores personales.


1) Mayor flexibilidad, al permitir distribuir la carga de trabajo. La puesta fuera de servicio de uno de ellos se puede
compensar haciendo su trabajo en los restantes.
2) Compartición de datos y programas.
3) Compartición de periféricos, unidades de almacenamiento o impresoras.

7.1.2. Desventajas

1) Escaso software, todavía no muy desarrollado.


2) Problemas inherentes a las redes: posible saturación o pérdida de información.
3) Se agravan los problemas de seguridad.

7.2. Hardware de los multiprocesadores

Escalabilidad: capacidad de una arquitectura de expandirse para soportar un mayor número de procesadores.

7.2.1. Multiprocesadores con bus compartido

Es una de las formas más sencillas: usar un bus compartido para conectar los procesadores y la memoria.
Problema: el bus o la memoria compartida se pueden saturar.

1
Soluciones:
1) Disponer de una memoria caché:
a) Asociada con la memoria compartida: los procesadores acceden a ella por el bus,
b) Asignar a cada procesador una caché. Presenta problemas de coherencia. Para mantener esta coherencia, se
utilizan protocolos especializados y hardware adicional, como los “espías” de caché o monitores de caché, que
observan el bus y cuando se hace una petición de escritura en una dirección presente en la caché, se actualiza
ésta con el nuevo valor. Ésto hace que aumente el tráfico en el bus.
2) Considerar un bus de más anchura.
3) Soportar protocolos diferentes de petición/respuesta. Las peticiones y las respuestas de memoria se tratan de forma
separada en el bus. Después de que un procesador realiza una petición, el bus queda liberado para que lo puedan
utilizar otros usuarios durante el tiempo que tarda la memoria en acceder y ensamblar la información solicitada.

La escalabilidad de este esquema está limitada por el bus y la memoria compartida. En implementaciones
comerciales se soportan del orden de 64 procesadores. Es un esquema sencillo, por lo que muchos diseños comerciales
están basados en él.

7.2.2. Sistemas conectados mediante barras cruzadas

Se disponen de n memorias y n procesadores conectados mediante conmutadores.


M M M M

P
P
Conmutador de cruce

La conmutación en los cruces es la única fuente de retardo. La contención en el acceso a la memoria sólo ocurre
cuando un procesador intenta acceder a la misma memoria y al mismo tiempo que otro. Pero con una apropiada
situación de los datos se puede evitar, o por lo menos aliviar. El problema persiste en el caso de variables compartidas
(como un semáforo).
Permite un elevado grado de paralelismo entre tareas no relacionadas, pero se presentan problemas de contención
cuando hay procesos con memoria compartida.
Para n procesadores y n memorias, se necesitan n2 conmutadores, lo que hace que el coste sea elevado.

7.2.3. Sistemas conectados mediante una red de conmutación multietapa

Una red omega está basada en conmutadores 2x2, cada uno con dos entradas y dos salidas. Cada conmutador
puede dirigir cualquiera de las entradas a cualquiera de las salidas y todos los procesadores pueden acceder a todas las
memorias.
Puede conectar simultáneamente todas las entradas a todas las salidas, suponiendo que no haya dos procesadores
que intenten acceder al mismo tiempo al mismo módulo de memoria. En caso contrario, se puede presentar contención
de acceso a la memoria.
Problemas:
a) Cuando algunos módulos de memoria se referencian con mucha frecuencia, se produce un punto caliente, que
bloquea ciertas rutas de comunicación durante largos períodos de tiempo.
b) Retraso en la conexión. Si hay n memorias y n procesadores, habrá log2n etapas, cada una con n/2 conmutadores.

P M
P M
P M

2
P M
P M
P M
P M
P M
Conmutador 2x2

7.2.4. Conexiones hipercubo

Un hipercubo es un cubo n-dimensional que cumple las siguientes condiciones:


a) Está formado por 2n procesadores.
b) Cada procesador tiene n conexiones directas con otros procesadores.
c) La máxima distancia entre dos nodos cualesquiera (número de enlaces físicos entre nodos) es n.
d) Es una estructura recursiva formada por dos hipercubos de dimensión n-1.

Hipercubo de dimensión 4 (cada vértice es un procesador con su correspondiente memoria)

Ventajas:
a) La complejidad de los hipercubos crece logarítmicamente con el número de nodos, por lo que son una buena
base para realizar sistemas escalables.
b) La comunicación entre nodos adyacentes es directa y el mayor retardo entre dos nodos está acotado por la
dimensión del hipercubo.

Se considera la solución idónea para sistemas grandes (dimensión 10  1.024 procesadores).

7.3. Sistemas operativos para multiprocesadores


7.3.1. Clases de sistemas operativos para multiprocesadores

Sistemas con supervisores separados


Cada nodo tiene un SO que gestiona el procesador local, la memoria y los dispositivos de E/S como un sistema
independiente, añadiéndose algunos servicios y estructuras de datos para soportar el diseño de un hardware para
multiprocesadores.
No soportan bien el paralelismo en las aplicaciones y no está muy optimizado el reparto de la carga entre los
procesadores (ej.: hipercubos).
El paralelismo se consigue dividiendo las tareas en subtareas. Las funciones a nivel de sistema completo, como la
asignación de los procesadores y la planificación global, se hace en un supervisor del sistema que se implementa según
alguna de las otras dos clases (maestro/esclavos o simétrico).

Sistemas maestro/esclavos
Un procesador (el maestro) se dedica a ejecutar el SO, planificando las tareas y controlando a los procesadores
esclavos. Éstos sólo pueden procesar algunas consultas locales sencillas.
Es adecuado para el paralelismo dentro de las tareas, asignándoles varios procesadores.
Ventaja: fáciles de desarrollar a partir de un sistema monoprocesador serie.
Inconveniente: su escalabilidad está limitada por tener sólo un procesador maestro.

Sistemas simétricos

3
Se considera a todos los procesadores funcionalmente idénticos, de forma que se pueden asignar a cualquier tarea
(incluyendo tareas del SO). El SO se considera también simétrico, puesto que cualquier procesador puede ejecutarlo,
incluso se puede ejecutar de forma paralela en varios procesadores.
Sistema con maestro flotante: el SO se ejecuta en los procesadores disponibles. El procesador que
temporalmente esté ejecutando el SO actúa como el maestro y planifica las tareas para el resto de procesadores.
Se puede conseguir algo de paralelismo en la ejecución del SO si se identifican los procesos del sistema que
pueden acceder concurrentemente a las estructuras de datos compartidas.
Ventaja: fácil de implementar a partir de sistemas monoprocesadores, como Unix.

7.3.2. Gestión de los recursos

Un SO multiprocesador tiene que gestionar los procesadores, la memoria y los dispositivos de E/S que tenga el
sistema.

Planificación de los procesadores. Consiste en:


a) Asignar los procesadores a los procesos, de acuerdo a los objetivos de diseño del sistema.
b) Asegurar el uso eficiente de los procesadores asignados a una tarea.
La productividad del sistema es función de cómo se asignen los procesadores, mientras que la velocidad depende
primordialmente del uso eficiente de los procesadores asignados. Obtener un buen rendimiento una mayor velocidad a
partir del paralelismo dentro de una aplicación requiere generalmente la orientación explícita del programador. El SO
debe proveer mecanismos que fomenten el paralelismo.

Gestión de memoria. Si los procesadores están débilmente acoplados, la memoria se gestiona de forma
independiente para cada uno, pero en sistemas de memoria compartida, el SO debe proporcionar un modelo flexible de
la memoria que permita un acceso seguro y eficiente a las estructuras de datos compartidas.

Gestión de los dispositivos. Los sistemas multiprocesadores se dedican fundamentalmente a aplicaciones que son
intensivas en cálculo sin demasiadas operaciones de E/S, por lo que este aspecto no ha requerido un tratamiento
especial, aunque se está investigando en la actualidad.

7.4. Redes de computadores


Tipos de redes:
a) Redes locales (LAN, local-area networks)
b) Redes de área extensa (WAN, wide-area networks)

7.4.1. Topología de las redes

a) Red de conexión total. Cada instalación está enlazada directamente con todas las demás.
Ventajas: 1) Gran rapidez de comunicación
2) Fiabilidad del sistema
Inconveniente: Coste muy elevado que crece con el cuadrado del número de instalaciones.

b) Red de conexión parcial. Se suprimen algunos enlaces.


Ventaja: Menor coste.
Inconvenientes: 1) Retardo promedio de las comunicaciones
2) Menor fiabilidad.

c) Redes jerárquicas. Tienen estructura de árbol. Cada instalación, excepto la raíz, tiene un único enlace superior
(padre) y varios enlaces subordinados (hijos).
Ventaja: Menor coste.
Inconvenientes: 1) Si se rompe un enlace, queda partida la red en dos subárboles disjuntos.
2) La comunicación entre “hermanos” hay que hacerla por medio del padre.

d) Topología en estrella.
Ventajas: 1) Coste lineal.
2) Las comunicaciones entre sistemas requieren como máximo dos enlaces.
Inconveniente: El sistema central soporta todo el peso de las comunicaciones, con lo que se puede saturar (suele
dedicarse en exclusiva a la gestión del paso de mensajes).

4
e) Red en anillo. Cada instalación está conectado a otras dos (sus vecinos). Puede ser unidireccional o bidireccional.
Ventaja: Coste lineal.
Inconveniente: 1) Los mensajes tienen que viajar por el anillo.
2) La red se puede partir rompiendo un sólo enlace, se es unidireccional, o dos si es
bidireccional.

f) Canal multiacceso. Sólo existe un enlace al que se conectan todas las instalaciones.
Ventaja: Coste lineal.
Inconveniente: La red se parte si se rompe el único enlace.

7.4.2. Protocolos de comunicación y el modelo de referencia OSI

La Organización de Normas Internacionales (ISO, International Standards Organization) propuso el modelo de


arquitectura de red OSI (Open Systems Interconnection), estructurado en siete capas, cada una de las cuales
proporciona una serie de servicios a los niveles superiores.

1) Nivel físico. Responsable de la transmisión física de un flujo de bits a través de la línea de comunicación.

2) Nivel de enlace de datos. Gestiona las tramas o parte de longitud fija de los paquetes, detectando los errores y los
mecanismos de recuperación.

3) Nivel de red. Responsable de proporcionar conexiones y encaminar los paquetes por la red de comunicaciones,
incluyendo:
a) La gestión de las direcciones de los paquetes que salen.
b) La decodificación de las direcciones de los paquetes que entran.
c) El mantenimiento de la información.
(En muchas redes de difusión y en las LAN, el nivel de red es pequeño y tiene poco que hacer, pudiendo no
considerarse).

4) Nivel de transporte. Tiene la responsabilidad del acceso a bajo nivel a la red y de la transferencia de mensajes entre
clientes, incluyendo:
a) La división de los mensajes en paquetes.
b) El mantenimiento del orden de los paquetes.
c) El control del flujo.
d) La generación de direcciones físicas.

5) Nivel de sesión. Se ocupa de implementar sesiones o protocolos de comunicación entre procesos. También está
encargado de las conexiones remotas y de las transferencia de archivos y correo.

6) Nivel de presentación. Se encarga de resolver las diferencias entre los formatos en las diversas instalaciones en la
red, incluyendo la conversión de caracteres y codificación y decodificación.

7) Nivel de aplicación. Realiza la interacción directa con los usuarios y proporciona los protocolos requeridos por los
procesos de aplicación, como conexión remota, transferencia de archivos y correo electrónico.

Sistemas abiertos: sistemas construidos según los protocolos OSI.


Sistemas finales: sistemas abiertos que implementan siete niveles y que ofrecen un interfaz en el último nivel para
los programas de aplicaciones de los usuarios.
Sistemas intermedios: contienen sólo los tres primeros niveles, utilizados para conectar entre sí sistemas finales.
Se usan generalmente en redes complejas que conectan entre sí a sistemas abiertos.

Los niveles inferiores (físico y de enlace de datos) se suelen implementar en circuitos integrados.
Las capas intermedias (de red y de transporte) tienen a residir en procesadores especializados.
Los niveles superiores (de sesión, presentación y aplicación) se realizan en software en el sistema final.

Puerta de aplicación: interfaz con sistemas no OSI en el nivel 7.


Relevo de transporte: interfaz con sistemas no OSI en el nivel 4.
Encaminador: interfaz con sistemas no OSI en el nivel 3.

7.4.3. Redes locales

En el aspecto técnico, una LAN se distingue por:

5
1) Su método de control de acceso a los medios.
2) El método de transmisión (banda ancha o banda base).
3) El medio de transmisión (par trenzado, cable coaxial o fibra óptica).

Las configuraciones más habituales son las redes de canal multiacceso, anillo y estrella. Con velocidades de
comunicación que van desde un Mb por segundo a un GB por segundo.
Se suelen definir como una arquitectura de niveles según una norma IEEE, similar al modelo de referencia OSI y
compatible con él. La principal diferencia estriba en la división del nivel 2 de OSI (enlace de datos) en dos subniveles:
1) Subnivel de control de acceso a los medios.
2) Subnivel de control de enlace lógico.

Un tipo de red local muy extendido es el Ethernet, generalmente sobre un cable coaxial y en el que se conectan
diferentes tipos de computadores, dispositivos periféricos y pasarelas de acceso a otras redes.

7.4.4. Redes de área extensa

La primera red que se diseñó y desarrollo fue Arpanet, que luego dio lugar a Internet.
Son más lentas que las redes locales (entre 1200 y varios MB/s).
El subsistema de comunicaciones consta de una serie de procesadores de comunicación conectados mediante
líneas de comunicación físicas (telefónicas), en laces por microondas y canales de satélites.
Los procesadores de comunicación definen el interfaz por medio del cual se comunican las instalaciones de la red
y se encargan de transferir información entre las instalaciones.
En Internet hay conectados computadores de todo tipo, que generalmente se encuentran en redes locales, que a su
vez están conectadas mediante redes regionales. Las redes regionales están enlazadas por encaminadores para formar
una red de alcance mundial. Generalmente utilizan servicios telefónicos especiales. Los encaminadores conectan las
redes en el nivel de red ISO y controlan las rutas que sigue cada paquete por la red. El encaminamiento puede ser:
a) Dinámico: aumenta la eficacia de las comunicaciones.
b) Estático: reduce los riesgos de seguridad.
La mayoría de los computadores se direccionan lógicamente mediante un nombre compuesto de varias partes. La
asignación del nombre se basa en un sistema de nombres de dominios, que leídos de izquierda a derecha, van de la
parte más específica a la más general de la dirección (ej.: colos.dia.uned.es).

Capas de Internet:

1) Nivel de acceso a la subred. Corresponde a los niveles físico y de enlace de datos del modelo OSI y una parte del
nivel de red. En él se encuentran los protocolos necesarios para interactuar con la red a la que físicamente está
conectada. (p. ej.: X.25 si es una red de conmutación de paquetes o IEEE 802.2 si es una red local).
2) Nivel Internet. Corresponde con la parte del nivel de red del modelo OSI encargado de la interconexión de las
redes. Su protocolo más importante es el IP (Internet Protocol), cuyo objetivo es conseguir la interconectividad en
redes heterogéneas.
3) Nivel de control de la transmisión. Se corresponde con el nivel de transporte de OSI. En él están los protocolos
TCP (Transmision Control Protocol) y UDP (User Datagram Protocol), ambos basados en IP. TCP es un servicio
de transferencia de datos orientado a conexión, mientras que UDP no está orientado a conexión. El más utilizado es
TCP, hasta el extremo de que se utiliza el término TCP/IP para denominar el conjunto de protocolos de Internet.

En Internet no existen los niveles superiores orientados a las aplicaciones. Las funcionalidades que se dan en las
capas de sesión, presentación y aplicación en el modelo OSI, las tienen que asumir las aplicaciones, a las cuales sólo se
les ofrece un canal de intercambio de datos. Sin embargo, sí existen algunos protocolos estandard para algunas
aplicaciones muy comunes, como FTP para transferencia de archivos, Telnet para el acceso interactivo y SMTP para
el correo electrónico.

Otras redes de área extensa:

UUCP, red de noticias de Unix que permite que los computadores se comuniquen a determinadas horas por
modem. Los mensajes pasan de un sistema a otro hasta llegar a todos (si es un mensaje público) o a su destino.

AppleLink, red de noticias y servicios privada contratada por Apple Computer y que mediante conexión
telefónica da servicios de correo electrónico, noticias e informaciones sobre los computadores Apple.

7.5. Tipos de sistemas operativos para sistemas distribuidos

6
7.5.1. Sistemas operativos de redes

Su función principal es ofrecer un mecanismo para transferir archivos o poder dar órdenes de ejecución de
programas desde una máquina a otra. Cada usuario dispone de su propio computador y se puede conectar con otra
estación de trabajo mediante una orden del tipo:
rlogin computador_remoto
El computador del usuario funciona como un terminal del computador remoto. Las órdenes que se ejecuten lo
harán en la máquina remota.
También se pueden transferir archivos de una máquina a otra usando, p. ej., el protocolo de transferencia de
archivos (FTP, file transfer protocol), siguiendo estos pasos:
1) Invocar al programa FTP, el cual le solicitará:
a) El nombre del computador a partir del cual se efectuará la transferencia.
b) La información de acceso, para verificar los privilegios.
2) Realizar la copia: get datos1 to datos2.

La ubicación del archivo no es transparente para el usuario (tiene que saber exactamente dónde se encuentra). Los
archivos no se comparte realmente, pudiendo existir varias copias del mismo archivo, lo que representa un desperdicio
de espacio y puede plantear problemas de inconsistencia.
Cada computador puede estar ejecutando un SO diferente, pero deben coincidir en el formato y significado de
todos los mensajes que se puedan intercambiar. Los computadores son altamente autónomos y hay pocos requisitos por
parte del sistema.

7.5.2. Sistemas operativos realmente distribuidos

Los usuarios pueden acceder a los recursos remotos de la misma manera que lo hacen a los recurso locales. La
migración de datos y procesos de una máquina a otra queda bajo el control del SO distribuido. El SO tiene que hacer
tres funciones transparentes al usuario:

a) Migración de datos. Posibilidad de transferir datos de una máquina a otra. Hay dos estrategias:
1) Transferir todo el archivo de una instalación a otra y a partir de ahí el acceso a los datos es local.
2) Transferir sólo aquellas partes del archivo que realmente se necesitan en ese momento.
b) Migración de cálculos. Dos formas:
1) Mediante una llamada a un procedimiento remoto. Un proceso de una instalación invoca a otro
procedimiento definido en otra, el cual, después de ejecutarse, devuelve los resultados.
2) Mediante mensajes. El primer proceso envía un mensaje a la instalación donde está definido el proceso que
quiere que se ejecute. El SO de esta instalación arranca el proceso y, cuando termina, envía el resultado por
medio del sistema de mensajes. Los dos procesos pueden ejecutarse concurrentemente.
c) Migración de procesos. Un proceso puede comenzarse en una instalación y continuar en otra. Razones:
1) Equilibrar las cargas de los sistemas, distribuyendo los procesos.
2) Acelerar los cálculos, dividiendo un proceso en varios subprocesos que se ejecuten concurrentemente.
3) Las características hardware o software de una instalación, que haga preferible que cierto proceso continúe su
ejecución en ésta.
La migración se puede hacer:
1) De forma transparente al usuario. Tiene la ventaja de que el usuario no necesita codificar los programas
explícitamente y se suele utilizar para equilibrar las cargas y acelerar los cálculos.
2) Requiriendo que el usuario especifique cómo y a dónde debe migrar el proceso. Se emplea cuando el proceso
se debe trasladar por consideraciones hardware o software.

7.5.3. Algunas consideraciones para el diseño

1) Sistema transparente. Idealmente, un SO distribuido debería percibirse por el usuario como un sistema único, sin
hacer distinción entre los recursos locales o remotos. Un sistema puede ser transparente sólo a los usuarios, a los
que oculta la distribución. También puede ser transparente a los programas, aunque es más complicado especificar
una semántica bien definida y consistente que además coincida con la del SO centralizado base.
La transparencia es aplicable a distintos aspectos:
a) Transparencia de la localización. Los usuarios no pueden indicar la situación de los recursos hardware y
software.
b) Transparencia de migración. Posibilidad de que los recursos se muevan de una posición a otra sin tener que
cambiar sus nombres.
c) Transparencia de copia. El sistema puede hacer copia de los archivos sin que lo noten los usuarios.
d) Transparencia con respecto a la concurrencia. Los usuarios no advierten la existencia de otros usuarios.

7
e) Transparencia con respecto al paralelismo. El sistema aprovecha las posibilidades de cálculo en paralelo sin
que el programador tenga que advertirlo.

2) Flexibilidad. Dos concepciones diferentes:


a) Sistemas con núcleo monolítico. El núcleo corresponde al SO básico centralizado actual, al que se le han
añadido las capacidades de red y la integración de los servicios remotos. Suelen ser extensiones de algún
sistema existente, como Unix.
Ventaja: mayor rendimiento, puesto que la realización del trabajo en el núcleo es más rápido que el envío
de mensajes a los servidores remotos.
b) Sistemas basados en un micronúcleo, con los servicios mínimos, consistentes básicamente en un mecanismo
de comunicación entre procesos, una gestión de la memoria, una parte de la planificación y gestión de los
procesos de bajo nivel y la gestión de E/S a bajo nivel. El resto de los servicios (sistema de archivos, gestión
de los procesos, manejo de las llamadas al sistema, etc.) se implementan como servidores a nivel de usuario.
Es el método utilizado en la mayoría de los diseños que parten de cero.
Ventajas:
1) Son más flexibles, puesto que hacen relativamente poco trabajo.
2) Son muy modulares. Permiten instalar y depurar nuevos servicios de forma fácil, puesto que no es
necesario parar el sistema y arrancar otra vez el núcleo.

3) Fiabilidad. Si una máquina falla, otra se encargará de su trabajo (sistema tolerante a fallos).

4) Escalabilidad. Capacidad del sistema para adaptarse a un incremento en el servicio. Ante un aumento de la carga,
se debe degradar con mayor moderación y permitir añadir nuevos recursos.

La fiabilidad (tolerancia a fallos) y la escalabilidad están relacionadas entre sí, ya que un sistema con mucha carga
puede paralizarse y comportarse como si tuviera un fallo.

7.6. Servicios remotos


Mediante un servicio remoto se entregan al servidor las solicitudes de acceso, éste lleva a cabo el acceso y se
devuelven los resultados al usuario. La forma más común es la llamada a un procedimiento remoto (RPC, Remote
Procedure Call, Birrel y Nelson, 1984). Cuando se invoca un procedimiento remoto, el entorno que lo invoca queda
suspendido y se transfieren los parámetros a través de la red al nodo donde el procedimiento se va a ejecutar. Cuando
finaliza el procedimiento, se devuelven por la red los resultados al nodo que lo invocó.
Ventajas:
1) Semántica sencilla que facilita el cálculo distribuido.
2) Transparencia de la distribución para los programadores.
3) Las aplicaciones existentes para un sólo computador se pueden exportar con relativa facilidad a un entorno
distribuido.
4) Su generalidad, ya que los procedimientos son uno de los mecanismos más habituales y mejor comprendidos
para la comunicación entre partes de un algoritmo.

Son apropiados para los modelos de cliente/servidor de cálculo distribuido. Las rutinas de los clientes solicitan
los servicios invocando remotamente la ejecución la ejecución de los procedimientos adecuados en el servidor. Los
servidores pueden proporcionar servicios comunes que pueden ser llamados por los clientes (similar a las librerías de
funciones). Las rutinas públicas deben ser reentrantes (no automodificables) o estar protegidas frente a expropiaciones
mediante alguna norma de control de concurrencia (como la exclusión mutua).

7.6.1. Mecanismo de llamada a procedimientos remotos

La estructura de un programa para la llamada a procedimientos remotos se suele basar en el concepto de sustituto
(stubs).

Máquina invocante Máquina servidora

Proceso invocante Proceso llamado

Argumentos Valores Valores Argumentos


pasados devueltos devueltos pasados

Sustituto cliente Sustituto servidor

8
Enviar Recibir

Ejecutable RPC Ejecutable RPC

Red

El proceso invocante hace una llamada normal con parámetros a un procedimiento en su máquina:
call p(x, y)
donde:
p: nombre del procedimiento
x: argumentos pasados
y: valores devueltos
Para el usuario, la intención de invocar un procedimiento remoto en otra máquina puede ser transparente. Un
procedimiento sustituto p se debe incluir en el espacio de direcciones del invocante o se debe enlazar dinámicamente en
el tiempo de la llamada. Este procedimiento crea un mensaje que identifica al procedimiento que se llama e incluye los
parámetros. Se envía este mensaje, usando una primitiva send, y se espera una contestación. Cuando llega, el
procedimiento sustituto devuelve los valores recibidos al programa invocante.
En la máquina remota, otro programa sustituto se asocia con el programa invocado. Cuando se recibe un mensaje,
éste se examina y se genera una llamada local call p(x, y). De esta manera, el procedimiento se llama localmente como
si se tratase de un procedimiento local.
Excepto por la vinculación multimáquina, la semántica RPC es la misma que la de una llamada a un
procedimiento en una sola máquina.
El procedimiento servidor se ejecuta en su totalidad antes de devolver el control.
Las RPC pueden estar anidadas: un procedimiento servidor puede invocar a otros procedimientos.
Es sencillo hacer llamadas por valor. La complejidad que supone implementar llamadas por referencia puede no
compensar el esfuerzo.
Si los lenguajes de programación o las máquinas o los SO son diferentes, entonces probablemente hay diferencias
en la forma de representación de los números y caracteres. Si se usa un sistema completo de comunicación, esta
cuestión se gestiona en la capa de presentación. Pero el coste de estas estructuras ha llevado al diseño de servicios de
RPC que dan sus propios servicios de comunicaciones básicos. Una buena solución es suministrar un formato estándar
para los objetos comunes, tales como números enteros, en coma flotante, caracteres y cadenas de caracteres.
Tradicionalmente las RPC son síncronas, lo cual requiere que el proceso invocante espere hasta que el proceso
invocado devuelva un valor. Las formas síncronas son fáciles de entender y de programar, aunque no explotan
completamente el paralelismo.
Una llamada asíncrona a un procedimiento no bloquea al proceso invocante. La ejecución del cliente sigue en
paralelo con el servidor. Las respuestas se reciben como y cuando son necesarias.
La sincronización entre el cliente y el servidor se puede hacer de dos formas:
1) El nivel de la aplicación en el cliente y en el servidor pueden iniciar el intercambio y verificar al final si se han
realizado todas las peticiones.
2) El cliente emite una cadena de llamadas asíncronas, seguida al final por una llamada síncrona. El servidor
responde a la llamada síncrona sólo cuando ha completado todas las peticiones de las llamadas asíncronas
precedentes.

7.7. Gestión de procesos distribuidos


7.7.1 Ordenación de sucesos

En un sistema distribuido no hay memoria ni reloj comunes, de forma que muchas veces es imposible determinar
qué suceso ocurrió primero:
1) Puede haber retardos entre el tiempo real de ocurrencia de un suceso y el instante en el que se observa en otro
sistema.
2) La falta de sincronización da lugar a una variación en la lectura de los relojes de los distintos sistemas.

El método de marcación de tiempo (time stamping, Lamport, 1978) ordena los sucesos en un sistema distribuido
sin usar relojes físicos, según la transmisión de mensajes. En cada sistema de la red se mantiene un contador que
funciona como reloj. Cada vez que se transmite un mensaje, primero se incrementa en uno el contador y a continuación
se envía el mensaje al resto de los sistemas:
(mensaje, marca de tiempo, identificador numérico del sistema)
Cuando se recibe un mensaje, el sistema receptor asigna:
valor del reloj = 1 + max (valor actual, marca de tiempo)

9
Si A es un suceso del sistema M y B un suceso del sistema N, se dice que A precede a B si se cumple alguna de
estas condiciones:
1) La marca de tiempo de A es menor que la de B.
2) las marcas de tiempo son iguales, pero el identificador numérico del sistema M es menor que el del sistema N.

Lo importante no es el orden real en el que ocurren los sucesos, sino que todos los procesos coincidan con el
orden impuesto a los sucesos.

7.7.2. Exclusión mutua

a) Algoritmo completamente centralizado. Se tiene que definir un nodo coordinador, que también controla el acceso a
todos los objetos compartidos. Cuando un proceso requiere el acceso a un recurso crítico, realiza una petición del
mismo al proceso local de control de recursos, que a su vez reenvía un mensaje de petición al nodo coordinador.
Finalmente éste devuelve un mensaje de contestación (reply) cuando el objeto compartido está disponible. Cuando
un proceso finaliza con el uso de un recurso compartido, envía un mensaje de liberación de recurso al nodo
coordinador. Este algoritmo tiene dos propiedades clave:
1) Sólo un nodo coordinador toma las decisiones sobre la asignación de los recursos.
2) Toda la información necesaria está concentrada en el nodo coordinador, incluyendo la identificación y
localización de todos los recursos y los estados de asignación de cada uno.
Desventajas:
1) Si el nodo coordinador falla, el mecanismo de exclusión mutua se viene abajo.
2) Toda la asignación y desasignación de recursos requiere un intercambio de mensajes con el nodo coordinador,
con lo que éste se convierte en un cuello de botella para el sistema global.

b) Algoritmos distribuidos. Se caracterizan por:


1) En promedio, todos los nodos tienen una cantidad igual de información.
2) Cada nodo sólo tiene una representación parcial del sistema total y debe tomar las decisiones basándose sólo
en esta información.
3) Todos los nodos tienen la misma responsabilidad en la decisión final.
4) En promedio, todos los nodos asignan el mismo esfuerzo en efectuar una decisión final.
5) El fallo de un nodo no colapsa al sistema completo.
6) No existe un único reloj global para regular el tiempo de los sucesos (se utiliza la ordenación de los sucesos).

Colas distribuidas.

(Lamport, 1978; Ricart y Agrawala, 1981)


Requiere la existencia de un orden total de todos los sucesos del sistema (se puede utilizar el algoritmo de
Lamport de marcación de tiempo).
Cuando un proceso Pi quiere entrar en su región crítica, envía un mensaje de solicitud,
solicita (Pi, Ti, i)
don Ti es la marca de tiempo e i es el número del sistema, a todos los procesos del sistema (incluyéndose a sí mismo).
Cada proceso Pj, al recibir el mensaje, actúa según los siguientes criterios:
1) Si Pj se encuentra en su región crítica, difiere su respuesta.
2) Si Pj no espera entrar en su región crítica, envía de inmediato su respuesta.
3) Si Pj espera entrar en su región crítica, pero aún no lo ha hecho, compara la marca de tiempo de sus solicitud
con la de la solicitud efectuada por Pi. Si su propia marca de tiempo es mayor, envía inmediatamente su
respuesta, si no, la difiere.

Un proceso que ha recibido un mensaje de respuesta de todos los demás puede ya entrar en su región crítica,
colocando en una cola todas las solicitudes que reciba y posponiendo su contestación. Después de salir, envía los
mensajes de respuesta a todas las peticiones que difirió.
El número de mensajes por entrada a la región crítica es 2(N - 1), donde N es el número de nodos del sistema.
Desventajas:
1) Cada proceso necesita conocer la identidad de todos los demás procesos del sistema.
2) Si falla un proceso, el esquema se viene abajo.
3) Los procesos que no han entrado en su región crítica deben efectuar pausas frecuentes para contestar a los que
pretender entrar en la suya.

Resulta adecuado para pequeños conjuntos estables de procesos cooperativos.

Paso de testigo

10
El testigo es un tipo especial de mensaje que pasa de un proceso a otro en el sistema, de forma que su posesión
permite entrar en la región crítica. Cuando un proceso sale de la región crítica, pasa el testigo al siguiente proceso.
Se necesitan dos estructuras de datos:
a) testigo: array cuyo k-ésimo elemento es la marca de tiempo de la última vez que el testigo visitó al proceso Pk.
b) peticion: cada proceso mantiene un array de peticiones cuyo i-ésimo elemento es la marca de tiempo de la
última petición recibida de Pj.

Funcionamiento del algoritmo:


1) Inicialmente, el testigo se asigna arbitrariamente a un proceso.
2) Cuando un proceso quiere entrar en una región crítica, entra si tiene el testigo; si no, transmite un mensaje de
petición de marca de tiempo a los otros procesos y espera hasta tener el testigo.
3) Si el proceso Pi sale de su región crítica, debe transmitir el testigo a otro proceso que se elige buscando en el
array de peticiones (desde la petición i+1 hasta la última y volviendo a empezar por la 1 hasta la i-1) la primera
entrada j, tal que peticion(j) > testigo(j).
4) No se permite entrar a una segunda región crítica con el mismo testigo.

Si el recorrido es en forma de anillo unidireccional, se asegura que no se presentan bloqueos indefinidos.


El algoritmo requiere, cuando el proceso no tiene el testigo, N mensajes, de los que N-1 son para transmitir las
peticiones y 1 para transferir el testigo, y ningún mensaje si ya lo tiene.
Posibles fallos:
1) Si el testigo se pierde es necesario hacer una elección para generar uno nuevo.
2) Si falla un proceso, se debe establecer un nuevo anillo lógico.

7.7.3. Bloqueos

Clases de bloqueos:
a) Bloqueo de recursos: ocurre cuando los procesos compiten por el acceso exclusivo a un recurso que está
retenido por otro proceso.
b) Bloqueo de comunicación: cuando cada uno de los procesos espera la llegada de un mensaje y ninguno de
ellos lo envía.
Los dispositivos de comunicación, buffers, etc., también son recursos y se pueden considerar como bloqueos de
recursos.
Se pueden utilizar las técnicas de prevención y de evitación, o bien permitir que ocurran y entonces detectarlos y
recuperarse de ellos, o simplemente ignorarlos. Lo que normalmente no se hace en los sistemas distribuidos es evitar
los bloqueos, debido a su dificultad.

Prevención

1) Algoritmos de prevención para sistemas monoprocesadores con las modificaciones.


1.1.) La condición de espera circular puede ser prevenida definiendo un orden lineal de los tipos de recursos. Si
un proceso tiene asignado un determinado tipo de recurso, entonces sólo puede pedir recursos de los tipos
siguientes en el orden establecido. Inconveniente: los recursos no se piden en el orden en el que se usan,
pudiéndose retener recursos durante mucho tiempo innecesariamente.
1.2.) La condición de retención y espera se puede prevenir haciendo que la petición de los recursos que necesita
un proceso se haga de una sola vez, bloqueándolo hasta que se pueden garantizar simultáneamente todas las
peticiones de los recursos. Inconvenientes:
a) Los procesos pueden esperar mucho tiempo para disponer de todos los recursos.
b) Los recursos asignados a un proceso pueden estar sin usar durante un periodo de tiempo considerable.

Estos dos métodos requieren que los procesos determinen previamente sus necesidades de recursos, lo cual no
siempre es posible.

2) Algoritmos basados en el uso de marcas de tiempo (Rosenkrantz, 1978). Los conflictos por la posesión de un
recurso se resuelven comparando las marcas de tiempo, de forma que se pueden prevenir las condiciones de esperas
circulares.
Si un proceso anuncia que quiere comenzar una transacción (o transacción atómica) con otros procesos, éstos
tienen que negociar diferentes opciones, como el crear o eliminar objetos o el realizar ciertas operaciones. El
proceso iniciador anuncia que quiere que el resto de los procesos se comprometan con el trabajo realizado hasta
entonces. Si todos aceptan, los resultados son permanentes. Pero si uno o más procesos se niegan, o fallan antes de
expresar su acuerdo, la situación vuelve al estado anterior al comienzo de la transacción.
Cada transacción lleva la marca de tiempo de su creación. Si un recurso R se utiliza por una transacción T2 y
se solicita por otra transacción T1, el conflicto se resuelve comparando sus marcas de tiempo.

11
2.1.) Algoritmo de espera-muerte. Si T1 tiene un recurso R que solicita T2, la asignación del recurso se hace así:
if m(T2) < m(T1)
then
se interrumpe T2 (espera)
else
aborta T2 (muere)
endif
donde m(Tx) es la marca de tiempo de Tx. Si T2 es más viejo, se bloquea (espera). Si es más joven, aborta y
se vuelve a arrancar con la misma marca de tiempo para que pueda envejecer y aumentar su prioridad.

2.2.) Algoritmo de herida-espera. Las peticiones de las transacciones más viejas se atienden inmediatamente,
aunque se tengan que abortar las que son más jóvenes que usan los recursos solicitados.
if m(T2) < m(T1)
then
aborta T1 (herido)
else
se interrumpe T2 (espera)
endif

Detección

A los procesos se les permite que obtengan libremente los recursos que necesitan. Cuando se detecta un
interbloqueo, se tiene que seleccionar a uno de los procesos involucrados para que libere el recurso. La dificultad está
en que cada nodo sólo tiene información de los recursos propios, mientras que el bloqueo puede entrañar recursos
distribuidos.

1) Enfoque centralizado. Un nodo es el responsable de la detección de los bloqueos. Todos los mensajes de solicitud
y liberación de recursos se envían a un proceso coordinador, además de transmitirlo al proceso que controla ese
recurso.
Inconvenientes:
a) Aumento en el número de mensajes.
b) Vulnerabilidad a fallos del sistema coordinador.
Ventajas:
a) Los algoritmos son sencillos.
b) Los bloqueos se pueden resolver de forma óptima.

2) Enfoque jerárquico. Los nodos se organizan en una estructura arborescente, a partir de un nodo raíz. Cada nodo
tiene información de los recursos asignados a todos los nodos que dependen de él, por lo que se pueden detectar los
bloqueos en niveles inferiores al nodo raíz.
Inconvenientes:
a) Dificultad de configurar el sistema para poder localizar los posibles bloqueos.
Ventajas:
a) No ser vulnerables a los fallos de un nodo.
b) Si están relativamente localizados los posibles bloqueos, está limitada la actividad de resolución de los
mismo.

3) Enfoque distribuido. Todos los procesos cooperan para detectar los bloqueos, lo que conlleva un gran intercambio
de información con las marcas de tiempo correspondientes.
Inconvenientes:
a) Los algoritmos son laboriosos y difíciles de diseñar.
Ventajas:
a) No ser vulnerables a los fallos de un nodo.
b) Ninguno está agobiado con los algoritmos de detección.

Algoritmo de Chandy (1983). Se permite que los procesos soliciten varios recursos al mismo tiempo.
Ejemplo: El proceso P1 está esperando un recurso local que dispone P2, pero éste espera un proceso localizado en
otra máquina. El proceso P1 genera un mensaje especial de exploración, que se envía a los procesos que tienen los

12
recursos solicitados. El mensaje consta de tres partes: el proceso recién bloqueado, el proceso que envía el mensaje y el
proceso al cual se envía: (P1, P1, P2).
Al llegar el mensaje a un proceso, éste verifica si está esperando a otros procesos. En este caso, el mensaje se
actualiza, manteniendo el primer campo: (P1, P2, P3). Si el mensaje recorre un bucle, llegando al emisor original,
entonces existe un ciclo y el sistema está bloqueado.
Formas de romper un bloqueo detectado:
a) Que el proceso que inicia el ciclo se aborte. Puede presentar problemas, sobre todo si varios procesos llaman a
la vez al algoritmo.
b) Según va circulando el mensaje, los procesos añaden su identidad, de forma que el proceso inicial puede elegir
cuál es el que se tiene que abortar, eliminando al que tiene el número más alto.

7.8. Sistemas de archivos distribuidos


Conceptos:
Servicio: entidad software que se puede ejecutar en una o más máquinas a petición de un cliente, no conocido a
priori, al que se le ofrece algún tipo particular de funcionalidad.
Servidor: software que ofrece un servicio y que se ejecuta en una máquina.
Cliente: proceso que solicita un servicio mediante una serie de operaciones a través del interfaz con el cliente.

Un sistema de archivos ofrece un servicio de archivos a los clientes. El interfaz con el cliente son primitivas
como las de crear, borrar, leer o escribir en un archivo. En un sistema de archivos distribuidos, los clientes, servidores
y dispositivos de almacenamiento se encuentran dispersos entre varias máquinas y el servicio se tiene que hacer
mediante una red.
En algunas configuraciones hay máquinas dedicadas a operar sólo como servidores de archivos, en otras las
máquinas pueden ser a la vez servidores y clientes. El sistema de archivos distribuido puede estar implementado como
parte del propio SO o ser una capa de software que gestiona la comunicación entre los SO y los sistemas de archivos
convencionales.
La dispersión de dispositivos y servidores debe ser transparente para el cliente.
El tiempo necesario para satisfacer una solicitud se compone de:
a) El tiempo propio de los sistemas convencionales:
a.1) tiempo de acceso al disco
a.2) tiempo de procesamiento.
b) Más el tiempo de las operaciones propias de un sistema distribuido:
b.1) operaciones de red:
b.1.1) tiempo de petición de solicitud a un servidor
b.1.2) tiempo de respuesta al cliente
b.2) tiempo de procesamiento de los protocolos de comunicaciones.

7.8.1. Un sistema comercial de archivos distribuidos: NFS

El sistema de archivos de red (NFS, Network File System) de Sun Microsystems (diseñado para sistemas Unix,
pero soportado en la actualidad por diferentes plataformas y SO) permite que un conjunto de computadores compartan
un sistema de archivos común, tanto en LANs como en WANs.
Los servidores soportan físicamente el sistema de archivos compartido, mientras que los clientes sólo lo utilizan.
Un mismo computador puede ser a la vez cliente y servidor.
Cada uno de los servidores NFS exporta uno o varios de sus directorios para que los clientes remotos puedan
acceder a los mismos. Los clientes pueden montar el directorio exportado por el servidor como un directorio más en su
jerarquía de directorios. Si dos o más clientes montan el mismo directorio, pueden compartir archivos en sus
directorios comunes.

Protocolos NFS

1) Protocolo que gestiona el montaje. Un cliente puede enviar el nombre de la ruta de acceso a un servidor y solicitar
el permiso para montar ese directorio en su jerarquía de directorios. Si se ha exportado el directorio solicitado, el
servidor devuelve un manejador de archivo (file handle) al cliente, con las informaciones relativas al archivo, tales
como tipo, disco, número de i-nodo del directorio, etc. Las llamadas posteriores de lectura y escritura utilizan este
manejador.
a) Montaje estático. Muchos clientes se configuran para que monten algunos directorio remotos automáticamente.
Suelen contener un archivo /etc/rc con las órdenes necesarias para el montaje y que se ejecuta cuando se arranca
el cliente.
Inconvenientes:

13
1) Si uno de los servidores NFS no funciona, es bastante difícil recuperar al cliente.
2) Si no se necesita ese servidor, es un tiempo y trabajo perdido inútilmente.
b) Automontaje de Sun. La primera vez que se abre un archivo remoto, el SO envía un mensaje a cada uno de los
servidores. El directorio que se monta es el correspondiente al primer servidor que responda.
Ventajas:
1) Disponer de varios servidores permite una mayor tolerancia frente a los fallos y un mejor rendimiento.
Inconvenientes:
1) Todos los sistemas de archivos especificados como alternativas al automontaje tienen que ser idénticos.
El automontaje se usa más en sistemas de archivos de sólo lectura.
2) Protocolo de acceso a los directorios y archivos. NFS soporta la mayoría de las llamadas al sistema Unix, excepto
open y close, de forma que no es necesario abrir un archivo antes de leerlo, ni cerrarlo después de utilizarlo. Para
leer un archivo, el cliente envía al servidor un mensaje con el nombre del archivo y devuelve un manejador con una
estructura que lo identifica. La llamada read contiene el manejador del archivo que se va a leer, el desplazamiento
en el archivo a la posición donde comienza la lectura y el nº de bytes deseados. Ventaja: el servidor no tiene que
recordar las conexiones abiertas durante las llamadas intermedias. Si un servidor falla, cuando vuelve a arrancar no
se pierde la información acerca de los archivos abiertos, puesto que éstos no existen.

Arquitectura NFS

Consiste en tres capas:


1) El interfaz del sistema de archivos Unix, en la que se soportan las llamadas al sistema (open, read, write,
close).
2) El sistema virtual de archivos (VFS, Virtual File System). Su tarea es mantener una tabla con una entrada por
cada archivo abierto. Se denomina nodo-v (nodo-i virtual). El núcleo mantiene una estructura de nodos-v
para cada nodo activo (archivo o directorio). De esta forma, VFS distingue los archivos locales de los
remotos.
3) Capa de servicios NFS, que implementa el protocolo NFS.

Operación de un archivo remoto:


1) El cliente inicial la operación una llamada normal al SO. La capa de llamadas al sistema la transforma en una
operación VFS para el nodo-v adecuado.
2) En la capa VFS se identifica al archivo como un archivo remoto y se invoca al procedimiento VFS
correspondiente.
3) Se envía una llamada RPC a la capa de servicio NFS del servidor remoto, donde se introduce en la capa VFS y
se invoca la operación correspondiente del sistema de archivos (llamada local).
4) Los resultados se devuelven siguiendo el camino inverso.

Cliente Servidor

Capa de llamada al sistema

Capa VFS Capa VFS

Sistema de Cliente NFS Sistema de Servidor NFS


archivos archivos

RPC RPC
Disco Disco

Red

7.8.2. El sistema de archivos de Andrew

La principal característica de AFS (Andrew File System) es su capacidad de crecimiento (el objetivo del sistema
es abarcar más de 5.000 estaciones de trabajo).
Andrew establece una diferencia entre las máquinas cliente, estaciones de trabajo, y máquinas servidoras
dedicadas. Tanto los clientes como los servidores ejecutan Unix y están conectados por una red compuesta a la vez por
redes locales.

14
Los servidores dedicados, que se denominan colectivamente Vice, presentan a los clientes el espacio de nombres
compartidos como una jerarquía de archivos homogénea, idéntica y transparente a la ubicación. Las estaciones de
trabajo ejecutan el protocolo Venus para comunicarse con Vice.
Los servidores, en conjunto, son responsables del almacenamiento y la gestión del espacio de nombres
compartido. El espacio de nombres locales es pequeño, distinto para cada máquina y contiene los programas del
sistema que son esenciales para el funcionamiento autónomo.
Clientes y servidores están estructurados como agrupamientos conectados mediante un sistema LAN. Cada
agrupamiento consiste en un conjunto de estaciones de trabajo y un representante de Vice, denominado servidor de
agrupamiento. Para obtener el mejor rendimiento, las estaciones de trabajo deben utilizar lo más posible el servidor de
su propio agrupamiento, de forma que las referencias entre los agrupamientos sean lo menos frecuentes posibles.
Para descargar trabajo de los servidores a los clientes, cuando se abre un archivo, éste se coloca por completo en
la memoria caché del disco local.

Red general

Encaminador

Servidor Servidor Cliente

Cliente Cliente Servidor Red local

Servidor Cliente Cliente

15

También podría gustarte