Aspectos del Diseño
La comparación de las tres principales formas de organizar “n”
CPU se puede resumir en la Tabla 7.2:

Los aspectos claves en el diseño de S. O. distribuidos son:
- Transparencia.
- Flexibilidad.
- Confiabilidad.
- Desempeño.
- Escalabilidad.
Transparencia
Un aspecto muy importante es la forma de lograr la imagen de un
único sistema.
Los usuarios deben percibir que la colección de máquinas conectadas
son un sistema de tiempo compartido de un solo procesador:
- Un sistema que logre este
objetivo se dice que es transparente.
Desde el punto de vista de los usuarios, la
transparencia se logra cuando:
- Sus pedidos se satisfacen
con ejecuciones en paralelo en distintas máquinas.
- Se utilizan una variedad
de servidores de archivos.
- El usuario no necesita
saberlo ni notarlo.
La transparencia desde el punto de vista de los programas
significa diseñar la interfaz de llamadas al sistema de modo que no sea visible
la existencia de varios procesadores.
No es transparente un sistema donde el acceso a los archivos
remotos se realice mediante:
- El establecimiento
explícito de una conexión en la red con un servidor remoto.
- El envío posterior de
mensajes, donde el acceso a los servicios remotos será distinto al acceso
a los servicios locales.
Existen distintos tipos de transparencia en un
sistema distribuido:
- De localización:
los usuarios no pueden indicar la localización de los recursos.
- De migración: los
recursos se pueden mover a voluntad sin cambiar sus nombres.
- De réplica: los
usuarios no pueden indicar el número de copias existentes.
- De concurrencia:
varios usuarios pueden compartir recursos de manera automática.
- De paralelismo:
las actividades pueden ocurrir en paralelo sin el conocimiento de los
usuarios.
Flexibilidad
La flexibilidad es de fundamental importancia.

Existen dos escuelas de pensamiento en cuanto a la estructura de
los sistemas distribuidos (ver Figura 7.10).
- Núcleo monolítico:
- Cada máquina debe
ejecutar un núcleo tradicional que proporcione la mayoría de los
servicios.
- Micronúcleo
(microkernel):
- El núcleo debe
proporcionar lo menos posible.
- El grueso de los
servicios del S. O. se debe obtener a partir de los servidores al nivel
usuario.
El núcleo monolítico es el S. O. centralizado
aumentado con:
- Capacidades de red.
- Integración de servicios remotos.
Con núcleo monolítico:
- La mayoría de las llamadas
al sistema se realizan mediante señalamiento al núcleo:
- El núcleo realiza el
trabajo.
- El núcleo regresa el
resultado al proceso del usuario.
- La mayoría de las máquinas
tiene discos y administra sus propios sistemas locales de archivos.
El micronúcleo es más flexible y proporciona solo
cuatro servicios mínimos:
- Un mecanismo de
comunicación entre procesos.
- Cierta administración de
la memoria.
- Una cantidad limitada de
planificación y administración de procesos de bajo nivel.
- Entrada / salida de bajo
nivel.
Contrariamente al núcleo monolítico, el micronúcleo no
proporciona el sistema de archivos, el sistema de directorios, toda la
administración de procesos o gran parte del manejo de las llamadas al sistema.
El objetivo es mantener el micronúcleo pequeño.
Todos los demás servicios del S. O. se implementan generalmente como
servidores a nivel usuario:
- Para obtener un servicio:
- El usuario envía un
mensaje al servidor apropiado.
- El servidor realiza
el trabajo y regresa el resultado.
Una importante ventaja de este método es su alta
modularidad:
- Existe una interfaz bien
definida con cada servicio (conjunto de mensajes que comprende el
servidor).
- Cada servicio es igual de
accesible para todos los clientes, independientemente de la posición.
- Es fácil implantar,
instalar y depurar nuevos servicios, sin necesidad de detener el sistema
totalmente.
Confiabilidad
Un importante objetivo de los sistemas distribuidos es que si una
máquina falla, alguna otra debe encargarse del trabajo.
La confiabilidad global teórica del sistema podría ser el “or”
booleano de la confiabilidad de los componentes; ejemplo:
- Se dispone de 5
servidores de archivos, cada uno con una probabilidad de 0,95 de funcionar
en un instante dado.
- La probabilidad de falla
simultánea de los 5 es (0,05)5 = 0,000006.
- La probabilidad de que al
menos uno esté disponible es 0,999994.
La confiabilidad práctica se ve disminuida ya que
muchas veces se requiere que ciertos servidores estén en servicio
simultáneamente para que el todo funcione, debido a ello algunos sistemas tienen
una disponibilidad más relacionada con el “and” booleano de las
componentes que con el “or” booleano.
Un aspecto de la confiabilidad es la disponibilidad, que se refiere a
la fracción de tiempo en que se puede utilizar el sistema.
La disponibilidad se mejora mediante:
- Un diseño que no exija el
funcionamiento simultáneo de un número sustancial de componentes críticos.
- La redundancia, es
decir la duplicidad de componentes clave del hardware y del software.
Los datos no deben perderse o mezclarse y si los archivos se
almacenan de manera redundante en varios servidores, todas las copias deben
ser consistentes.
Otro aspecto de la confiabilidad general es la seguridad, lo que
significa que los archivos y otros recursos deben ser protegidos contra el uso
no autorizado.
Un aspecto también relacionado con la confiabilidad es la tolerancia a
fallas, según la cual las fallas se deben ocultar brindando una recuperación
transparente para el usuario, aunque haya cierta degradación de la
performance.
Desempeño
Cuando se ejecuta una aplicación en un sistema distribuido no debe
parecer peor que su ejecución en un único procesador, pero esto es difícil
de lograr.
Algunas métricas del desempeño son:
- Tiempo de respuesta.
- Rendimiento (número de
trabajos por hora).
- Uso del sistema y cantidad
consumida de la capacidad de la red.
El problema se complica por el hecho de que la comunicación
entre equipos es lenta comparada con:
- La velocidad de proceso.
- La velocidad de la
comunicación dentro de un mismo procesador.
Se requiere el uso de protocolos de comunicaciones en los
extremos (procesadores) que intervienen en la comunicación, con lo que se
incrementa el consumo de ciclos de procesador.
Para optimizar el desempeño frecuentemente hay que:
- Minimizar el número de
mensajes:
- La dificultad es que
la mejor forma de mejorar el desempeño es tener muchas actividades en
ejecución paralela en distintos procesadores, pero esto requiere el envío
de muchos mensajes.
- Centralizar el trabajo en
una sola máquina:
- Resulta poco
apropiado para un sistema distribuido.
También se debe prestar atención al tamaño de grano de
todos los cálculos:
- Paralelismo de grano
fino:
- Corresponde a
trabajos con un gran número de pequeños cálculos y mucha interacción con
otros trabajos, debido a ello requieren mucha comunicación que puede
afectar el desempeño.
- Paralelismo de grano
grueso:
- Corresponde a
trabajos con grandes cálculos, poca interacción y pocos datos, por lo
tanto requieren poca comunicación y no afectan la performance.
Escalabilidad
La tendencia indica que el tamaño de los sistemas distribuidos es hacia
cientos de miles y aun decenas de millones de usuarios conectados.
Existen cuellos de botella potenciales que se debe intentar evitar en
los sistemas distribuidos de gran escala:
- Componentes
centralizados:
- Ej.: un solo
servidor de correo para todos los usuarios.
- Tablas centralizadas:
- Ej.: un único
directorio telefónico en línea.
- Algoritmos
centralizados:
- Ej.: realización de
un ruteo con base en la información completa.
Se deben utilizar algoritmos descentralizados con las
siguientes características:
- Ninguna máquina tiene la
información completa acerca del estado del sistema.
- Las máquinas toman
decisiones solo en base a la información disponible de manera local.
- El fallo de una máquina
no arruina el algoritmo.
- No existe una hipótesis
implícita de la existencia de un reloj global.