sábado, 7 de junio de 2008

Participantes:

PEÑA MARIA C.I:17.609.795
ROMERO MARIA C.I:17.851.693
PIÑATE YORYELIS C.I:16.879.614
AGRINZONES HENRY C.I:16.913.475
BRICEÑO ALEXMIR C.I:15.712.760
DIAZ YULIMAR C.I:19.913.015
Seccion 02

viernes, 6 de junio de 2008

Sist. Ope. Dist. (INICIO)

Sistemas Operativos Distribuidos
Introducción
Amoeba
Mach
Hurd

Introducción

Ventajas (Distribuidos vs. Centralizados):

Economía
Velocidad
Confiabilidad
Crecimiento por incrementos.

Desventajas:

Software (Existe poco)
Redes (Saturación)
Seguridad

Características:

Transparencia
Flexibilidad
Confiabilidad (tolerancia a fallos)
Desempeño (velocidad)
Escalabilidad

Amoeba. Introducción.

Está escrito en C.
Posee un lenguaje para el cómputo distribuido y paralelo llamado Orca.
No tiene el concepto de “máquina de origen”.
El shell inicial se ejecuta en máquina arbitraria , pero los comandos tienen porqué ejecutarse en la misma máquina que el shell.

Arquitectura:

Pila de procesadores, cada uno con su memoria local (no es necesaria la memoria compartida). El sistema operativo se encarga de repartir el trabajo de los procesadores de forma dinámica.
Terminales X, uno para cada usuario.
Servidores especializados, que por eficiencia se encontrarán en ejecución todo el tiempo y en máquinas dedicadas a ello.

Micro Núcleo:

Se ejecuta en todas las máquinas del sistema:
Procesadores de la pila.
Terminales.
Servidores especializados.
Posse las siguientes tareas:
Controlar los procesos e hilos.
Proporcionar el soporte de la administración de memoria de bajo nivel. (Segmentos)
Soportar la comunicación entre los procesos. Dos formas de comunicación:
Puntual: Un cliente envía un mensaje a un servidor y se bloquea hasta que le conteste.
De grupo: Envío de mensajes de una fuente a varios destinos.
Controlar la E/S de bajo nivel, mediante los controladores de dispositivos que existen en el núcleo que se comunican con los dispositivos.

Servidores:

Servidor de archivos: Los archivos son inmutables. Se crean, se leen y se eliminan, pero no se modifican, para favorecer la réplica automática.
Servidor de directorios: Ofrece los archivos, pero el manejo de éstos se hace a través del servidor de archivos. Mayor flexibilidad.
Servidor de réplicas: Replicas retardadas. Cuando se crea algún objeto se hace una copia y cuando tenga tiempo la actualizará. Funciona mejor con objetos inmutables como los archivos.
Servidor de ejecución.

Objetos y Posibilidades:

Un objeto es un TDA y es controlado por un proceso.
Las posibilidades identifican al objeto y lo dotan de protección.
Puerto del servidor (48)
Objeto (24)
Derechos (8)
Verificación (48)
El campo puerto del servidor se usa para localizar la máquina en la que reside el servidor.
El campo objeto lo usa el servidor para identificar al objeto.
El campo derechos indica las operaciones permitidas al propietario de una posibilidad. (Independientemente de los derechos que tenga el objeto).
El campo verificación se usa para validar la posibilidad.

Administración:

Procesos: Son objetos en Amoeba. Al crear uno nuevo el padre obtiene una posibilidad para el hijo.
La administración de la memoria posee una característica fundamental: Los segmentos no se paginan ni se intercambian, por tanto un proceso debe estar contenido en la memoria por completo.
Desempeño: Mayor velocidad en la RPC. Todos los datos están adyacentes en la memoria virtual y física. No se producen fallos de página.
Sencillez: El no tener paginación el núcleo será mas controlable.
Economía: al ser tan barata la memoria se podrá usar memorias de cientos de Megabytes, con lo que se reduce la necesidad de paginación.

Tolerancia a fallos:

Para la tolerancia a fallos se usa el servidor de replicas.
Éste funciona mejor con objetos inmutables como los archivos, ya que trabaja en segundo plano.

Mach. Introducción.

NO es un sistema operativo, sino un micro núcleo.
Objetivos.
Base para la construcción de otros sistemas (UNIX).
Espacio de direcciones de gran tamaño.
Acceso transparente a los recursos de la red.
Paralelismo del sistema y las aplicaciones.
Escalabilidad (transportar mach a un número más grande de máquinas).
La emulación del sistema operativo se lleva a cabo en el espacio del usuario.

Micro Núcleo

El núcleo de Mach se encarga de las siguientes tareas:
Administra los procesos.
Administra la memoria.
Controla la comunicación.
Controla los servicios de E/S.
La administración de la memoria se basa en los llamados objetos de memoria.
Son estructuras de datos asociadas con el espacio de direcciones de un proceso. Al producirse un fallo de página puede enviar un mensaje a un servidor a nivel de usuario.
La comunicación entre los procesos se realiza entre puertos que tienen asignados.
En el espacio de usuario se controlan el resto de características de un sistema operativo como los archivos, directorios y otras funciones.

Ventajas:

Mayor sencillez de cada parte.
Independencia y portabilidad del sistema operativo.
Ejecución de varios sistemas operativos a la vez.
Mayor seguridad (cada proceso tiene su propio sistema operativo. Difícil husmear ficheros del otro sistema.)

Administración de los procesos.

Proceso: espacio de direcciones y colección de hilos que se ejecutan en ese espacio de direcciones.
Además poseen puertos para la comunicación:
Puerto de proceso: Comunicación con el núcleo.
Puerto de arranque: Para inicializar los parámetros del proceso.
Puerto de excepción: Lo usa el SO para informar de las excepciones.
Puertos registrados: Para comunicación con los servidores estándar del sistema.
Un hilo pertenece a un solo proceso.
Los hilos poseen prioridades de 0 a 31 o de 0 a 127 y el 0 indica que el hilo tiene mayor prioridad.
Se planifican mediante un array global con colas de hilos cada cola de una prioridad.
También existe un array local para cada procesador con los hilos que solo se ejecutan en ese procesador.
Todas las colas del array local poseen más prioridad que las colas del array global.

Administración de la memoria.

Separa las partes que dependen de la máquina de las que no dependen de ella.
Aumenta la portabilidad.
El código se divide en 3 partes:
La primera: es dependiente de la máquina y se ejecuta en el núcleo. Captura todos los fallos de página.
La segunda: es la parte independiente del núcleo. Procesa fallos de página, mapas de direcciones y reemplazo de páginas.
La tercera: pertenece al espacio del usuario. Controla la parte lógica, principalmente la memoria virtual.

Hurd. Introducción.

Hurd es un modelo de Sistema Operativo basado en el micro núcleo GNUMach.
Significa Hird of Unix-Replacing Daemons (Horda de Demonios que Reemplazan a Unix)
Lo que se pretende en Hurd es separar partes que estaban dentro del núcleo, sacarlas y ponerlas en el espacio del usuario.

Servidores.

Se encargan de la separación del espacio del micro núcleo y el espacio del usuario.
Los servidores actúan como un proceso más del sistema.

Veamos los servidores más importantes.
Auth: Servidor de Autenticación.
Sirve para cuando dos servidores no confían uno en el otro.
Estos pasan las peticiones al server auth y los pone en contacto estableciendo un dominio de confianza.
Exec: Servidor de Ejecución.
Crea las imágenes de los procesos a partir del código del objeto.
Versión reducida del planificador de Unix que se encarga cuando hacemos una llamada fork().
Proc: Servidor para el manejo de tareas.
Crea el contexto para el proceso.
Asigna los pids y las estructuras del proceso a las tareas.
También gestiona parte de las llamadas a fork().
Crash: Servidor de excepción.
Se activa cuando una tarea recibe una señal de error fatal.
Decide si suspenderlo o matarlo.

jueves, 5 de junio de 2008

Sistemas Operativos Distribuidos

Sistemas Operativos Distribuídos

Los sistemas operativos distribuídos abarcan los servicios de los de red, logrando integrar recursos ( impresoras, unidades de respaldo, memoria, procesos, unidades centrales de proceso ) en una sola máquina virtual que el usuario accesa en forma transparente. Es decir, ahora el usuario ya no necesita saber la ubicación de los recursos, sino que los conoce por nombre y simplementa los usa como si todos ellos fuesen locales a su lugar de trabajo habitual. Todo lo anterior es el marco teórico de lo que se desearía tener como sistema operativo distribuído, pero en la realidad no se ha conseguido crear uno del todo, por la complejidad que suponen: distribuír los procesos en las varias unidades de procesamiento, reintegrar sub-resultados, resolver problemas de concurrencia y paralelismo, recuperarse de fallas de algunos recursos distribuídos y consolidar la protección y seguridad entre los diferentes componentes del sistema y los usuarios. [Tan92]. Los avances tecnológicos en las redes de área local y la creación de microprocesadores de 32 y 64 bits lograron que computadoras mas o menos baratas tuvieran el suficiente poder en forma autónoma para desafiar en cierto grado a los mainframes, y a la vez se dio la posibilidad de intercomunicarlas, sugiriendo la oportunidad de partir procesos muy pesados en cálculo en unidades más pequeñas y distribuirlas en los varios microprocesadores para luego reunir los sub-resultados, creando así una máquina virtual en la red que exceda en poder a un mainframe. El sistema integrador de los microprocesadores que hacer ver a las varias memorias, procesadores, y todos los demás recursos como una sola entidad en forma transparente se le llama sistema operativo distribuído. Las razones para crear o adoptar sistemas distribuídos se dan por dos razones principales: por necesidad ( debido a que los problemas a resolver son inherentemente distribuídos ) o porque se desea tener más confiabilidad y disponibilidad de recursos. En el primer caso tenemos, por ejemplo, el control de los cajeros automáticos en diferentes estados de la república. Ahí no es posible ni eficiente mantener un control centralizado, es más, no existe capacidad de cómputo y de entrada/salida para dar servicio a los millones de operaciones por minuto. En el segundo caso, supóngase que se tienen en una gran empresa varios grupos de trabajo, cada uno necesita almacenar grandes cantidades de información en disco duro con una alta confiabilidad y disponibilidad. La solución puede ser que para cada grupo de trabajo se asigne una partición de disco duro en servidores diferentes, de manera que si uno de los servidores falla, no se deje dar el servicio a todos, sino sólo a unos cuantos y, más aún, se podría tener un sistema con discos en espejo ( mirror ) a través de la red,de manera que si un servidor se cae, el servidor en espejo continúa trabajando y el usuario ni cuenta se da de estas fallas, es decir, obtiene acceso a recursos en forma transparente.

Ventajas de los Sistemas Distribuídos

En general, los sistemas distribuídos (no solamente los sistemas operativos) exhiben algunas ventajas sobre los sistemas centralizados que se describen enseguida.

· Economía: El cociente precio/desempeño de la suma del poder de los procesadores separados contra el poder de uno solo centralizado es mejor cuando están distribuídos.
· Velocidad: Relacionado con el punto anterior, la velocidad sumada es muy superior.
· Confiabilidad: Si una sola máquina falla, el sistema total sigue funcionando.
· Crecimiento: El poder total del sistema puede irse incrementando al añadir pequeños sistemas, lo cual es mucho más difícil en un sistema centralizado y caro.
· Distribución: Algunas aplicaciones requieren de por sí una distribución física.
Por otro lado, los sistemas distribuídos también exhiben algunas ventajas sobre sistemas aislados. Estas ventajas son:
· Compartir datos: Un sistema distribuído permite compartir datos más fácilmente que los sistemas aislados, que tendrian que duplicarlos en cada nodo para lograrlo.
· Compartir dispositivos: Un sistema distribuído permite accesar dispositivos desde cualquier nodo en forma transparente, lo cual es imposible con los sistemas aislados. El sistema distribuído logra un efecto sinergético.
· Comunicaciones: La comunicación persona a persona es factible en los sistemas distribuídos, en los sistemas aislados no. _ Flexibilidad: La distribución de las cargas de trabajo es factible en el sistema distribuídos, se puede incrementar el poder de cómputo.

Desventajas de los Sistemas Distribuídos

Así como los sistemas distribuídos exhiben grandes ventajas, también se pueden identificar algunas desventajas, algunas de ellas tan serias que han frenado la producción comercial de sistemas operativos en la actualidad. El problema más importante en la creación de sistemas distribuídos es el software: los problemas de compartición de datos y recursos es tan complejo que los mecanismos de solución generan mucha sobrecarga al sistema haciéndolo ineficiente. El checar, por ejemplo, quiénes tienen acceso a algunos recursos y quiénes no, el aplicar los mecanismos de protección y registro de permisos consume demasiados recursos. En general, las soluciones presentes para estos problemas están aún en pañales.

Otros problemas de los sistemas operativos distribuídos surgen debido a la concurrencia y al paralelismo. Tradicionalmente las aplicaiones son creadas para computadoras que ejecutan secuencialmente, de manera que el identificar secciones de código `paralelizable' es un trabajo ardúo, pero necesario para dividir un proceso grande en sub-procesos y enviarlos a diferentes unidades de procesamiento para lograr la distribución. Con la concurrencia se deben implantar mecanismos para evitar las condiciones de competencia, las postergaciones indefinidas, el ocupar un recurso y estar esperando otro, las condiciones de espera circulares y , finalmente, los "abrazos mortales" (deadlocks). Estos problemas de por sí se presentan en los sistemas operativos multiusuarios o multitareas, y su tratamiento en los sistemas distribuídos es aún más complejo, y por lo tanto, necesitará de algoritmos más complejos con la inherente sobrecarga esperada.

SOD Vs SORed



SOD Vs SORed


Tarea. Algo que tiene que hacer.

Proceso. Un programa que está ejecutándose en el procesador.




* Interacción entre procesos

La interacción entre procesos se da a través del sistema operativo, es decir, el sistema operativo se encarga de mediar entre ellos. Aunque hay procesos que por su propia naturaleza se pueden enviar mensajes entre sí, pero esto es muy distinto a que entre ellos tomen una decisión.



* Transparencia

Los procesos y recursos debe ser transparente al usuario, esto se logra creando una capa de abstracción denominada máquina virtual, donde se engaña al usuario haciéndolo creer que está en un equipo centralizado.



* Heterogeneidad

Un sistema operativo distribuido puede estar conformado por un sin número de elementos totalmente distintos, sin que esto afecte el acoplamiento y el funcionamiento de la red. No basta recordar que esta heterogeneidad solo incumbe al hardware, también al software.



* Anatomía

El conjunto de procesadores se conforma como un solo procesador, dando la sensación de estar en una computadora monoprocesador haciendo elevar el poder de procesamiento y la operabilidad del sistema.



* Interdependencia

Los equipos presentan un cierto grado de interdependencia ya que pueden depender de otros procesadores para poder satisfacer una necesidad de procesamiento o bien una petición de algún usuario, si algún procesador falla reduce el rendimiento global del sistema, pudiendo caer en retrasos o en el colgamiento del sistema.



* Hardware:


Procesadores
Memoria
Medio de comunicación
Dispositivos de almacenamiento


* Software:

Programas
Sistema operativo


Mantenimiento de la consistencia



Notas:
Que sea constante a un mismo nivel. Punto de equilibrio.
Atomicidad.- Dos posibilidades: se cumple o no se cumple.
La replicación consume mucho hardware.
No es bueno poner muchos procesadores, pues hay una sobrecarga.
Forma de transmitir ethernet: escucha el medio.
Entre más complejo y mejor queremos un sistema operativo distribuido es más difícil de administrar.

Sistema Operativo Distribuido vs Sistema Distribuido

Sistema Operativo Distribuido vs Sistema Distribuido

Existe una diferencia vital entre los sistemas operativos distribuidos y los sistemas distribuidos. Podríamos llamar a un Sistema Distribuido una capacidad del Sistema operativo Distribuido, es decir: Un sistema distribuido es la relación que existe entre una computadora independiente y un servidor de archivos o dispositivos compartidos. Cada computadora ejecuta sus programas en su memoria propia haciendo uso de su único microprocesador y memoria, este no comparte memoria ni asigna tareas a otros procesadores de la red.

Sin embargo, un Sistema operativo distribuido tiene acceso a todos los dispositivos compartidos de la red incluyendo procesadores y memoria RAM.

Desventajas de los SOD

Por muy maravillosos que nos puedan pareces los sistemas operativos distribuidos, también tienen sus desventajas. La sincronización del sistema es una tarea Árdea de la cual nunca se descansa y la estandarización del sistema es un tanto complicada y limitante.

Debido a que no todos los sistemas operativos son de de carácter distribuido enlazar los distintos tipos de sistemas operativos es un poco complicado.

El interés de hacer el SOD lo mas transparente posible lo hace muy complicado en su programación y el lograr que el sistema operativo no tenga problemas para que no cause problemas a otros equipos que le asignaron tareas es un poco dificultoso.

Conclusión

El futuro de los sistemas operativos Distribuidos esta en la formación de un nuevo kernel universal que soporte distribución para que este pueda ser aplicado a todos los sistemas operativos sin importar su plataforma. O por lo menos que los sistemas puedan ser distribuidos entre las computadoras que corran este mismo sistema dentro de la misma red y unificado por un servidor de sistemas operativos distribuidos.

El sistema operativo distribuido es usado a menudo como sub sistemas operativos utilizando sus ventajas como por ejemplo el sistema de clusters para almacenamiento. Creemos que si podemos encontrar sub soluciones a la distribución que sean ventajosas, deberíamos de incursionar el futuro de la informática a la distribución total.

Sistemas Operativos Distribuidos (Historia)


1. Introducción Histórica


En el inicio de la era de la informática las computadoras eran grandes y caras. Debido a su escasez y coste, éstas funcionaban de forma independiente entre ellas.
A partir de los años 70, surgen los primeros miniordenadores, que competirían con los grandes ordenadores tanto por las prestaciones como por su precio, con lo que se extendió su uso. Los grandes sistemas centralizados fueron dejando paso lentamente a sistemas mucho más descentralizados, y formados por varios ordenadores o a sistemas multiprocesador. Pronto surgieron nuevas necesidades de interconexión de los equipos, y se desarrollaron las redes de área local (LAN), como Ethernet o Token ring. En la actualidad, Internet es la red de mayor tamaño y la más usada, y mantiene un impresionante ritmo de crecimiento. Además, Internet es la base de muchos nuevos proyectos de sistemas distribuidos.
Aunque los actuales sistemas de red solucionan parte de las necesidades actuales de comunicación entre computadoras, tienen importantes limitaciones, y no son aplicables a una gran cantidad de problemas. Por ello surge la necesidad de crear sistemas distribuidos que sustituyan a los actuales sistemas de red o a los sistemas multiprocesadores.


2. Conceptos de los sistemas distribuidos


Los sistemas distribuidos están basados en las ideas básicas de transparencia, eficiencia, flexibilidad, escalabilidad y fiabilidad. Sin embargo estos aspectos son en parte contrarios, y por lo tanto los sistemas distribuidos han de cumplir en su diseño el compromiso de que todos los puntos anteriores sean solucionados de manera aceptable.

Transparencia


El concepto de transparencia de un sistema distribuido va ligado a la idea de que todo el sistema funcione de forma similar en todos los puntos de la red, independientemente de la posición del usuario. Queda como labor del sistema operativo el establecer los mecanismos que oculten la naturaleza distribuida del sistema y que permitan trabajar a los usuarios como si de un único equipo se tratara.
En un sistema transparente, las diferentes copias de un archivo deben aparecer al usuario como un único archivo. Queda como labor del sistema operativo el controlar las copias, actualizarlas en caso de modificación y en general, la unicidad de los recursos y el control de la concurrencia.
El que el sistema disponga de varios procesadores debe lograr un mayor rendimiento del sistema, pero el sistema operativo debe controlar que tanto los usuario como los programadores vean el núcleo del sistema distribuido como un único procesador. El paralelismo es otro punto clave que debe controlar el sistema operativo, que debe distribuir las tareas entre los distintos procesadores como en un sistema multiprocesador, pero con la dificultad añadida de que ésta tarea hay que realizarla a través de varios ordenadores.

Eficiencia


La idea base de los sistemas distribuidos es la de obtener sistemas mucho más rápidos que los ordenadores actuales. Es en este punto cuando nos encontramos de nuevo con el paralelismo.
Para lograr un sistema eficiente hay que descartar la idea de ejecutar un programa en un único procesador de todo el sistema, y pensar en distribuir las tareas a los procesadores libres más rápidos en cada momento.
La idea de que un procesador vaya a realizar una tarea de forma rápida es bastante compleja, y depende de muchos aspectos concretos, como la propia velocidad del procesador, pero también la localidad del procesador, los datos, los dispositivos, etc. Se han de evitar situaciones como enviar un trabajo de impresión a un ordenador que no tenga conectada una impresora de forma local.

Flexibilidad


Un proyecto en desarrollo como el diseño de un sistema operativo distribuido debe estar abierto a cambios y actualizaciones que mejoren el funcionamiento del sistema. Esta necesidad ha provocado una diferenciación entre las dos diferentes arquitecturas del núcleo del sistema operativo: el núcleo monolítico y el micronúcleo. Las diferencias entre ambos son los servicios que ofrece el núcleo del sistema operativo. Mientras el núcleo monolítico ofrece todas las funciones básicas del sistema integradas en el núcleo, el micronúcleo incorpora solamente las fundamentales, que incluyen únicamente el control de los procesos y la comunicación entre ellos y la memoria. El resto de servicios se cargan dinámicamente a partir de servidores en el nivel de usuario.

Núcleo monolítico


Como ejemplo de sistema operativo de núcleo monolítico está UNIX. Estos sistemas tienen un núcleo grande y complejo, que engloba todos los servicios del sistema. Está programado de forma no modular, y tiene un rendimiento mayor que un micronúcleo. Sin embargo, cualquier cambio a realizar en cualquier servicio requiere la parada de todo el sistema y la recompilación del núcleo.

Micronúcleo


La arquitectura de micronúcleo ofrece la alternativa al núcleo monolítico. Se basa en una programación altamente modular, y tiene un tamaño mucho menor que el núcleo monolítico. Como consecuencia, el refinamiento y el control de errores son más rápidos y sencillos. Además, la actualización de los servicios es más sencilla y ágil, ya que sólo es necesaria la recompilación del servicio y no de todo el núcleo. Como contraprestación, el rendimiento se ve afectado negativamente.
En la actualidad la mayoría de sistemas operativos distribuidos en desarrollo tienden a un diseño de micronúcleo. Los núcleos tienden a contener menos errores y a ser más fáciles de implementar y de corregir. El sistema pierde ligeramente en rendimiento, pero a cambio consigue un gran aumento de la flexibilidad.

Escalabilidad


Un sistema operativo distribuido debería funcionar tanto para una docena de ordenadores como varios millares. Igualmente, debería no ser determinante el tipo de red utilizada (LAN o WAN) ni las distancias entre los equipos, etc.
Aunque este punto sería muy deseable, puede que las soluciones válidas para unos cuantos ordenadores no sean aplicables para varios miles. Del mismo modo el tipo de red condiciona tremendamente el rendimiento del sistema, y puede que lo que funcione para un tipo de red, para otro requiera un nuevo diseño.
La escalabilidad propone que cualquier ordenador individual ha de ser capaz de trabajar independientemente como un sistema distribuido, pero también debe poder hacerlo conectado a muchas otras máquinas.

Fiabilidad


Una de las ventajas claras que nos ofrece la idea de sistema distribuido es que el funcionamiento de todo el sistema no debe estar ligado a ciertas máquinas de la red, sino que cualquier equipo pueda suplir a otro en caso de que uno se estropee o falle.
La forma más evidente de lograr la fiabilidad de todo el sistema está en la redundancia. La información no debe estar almacenada en un solo servidor de archivos, sino en por lo menos dos máquinas. Mediante la redundancia de los principales archivos o de todos evitamos el caso de que el fallo de un servidor bloquee todo el sistema, al tener una copia idéntica de los archivos en otro equipo.
Otro tipo de redundancia más compleja se refiere a los procesos. Las tareas críticas podrían enviarse a varios procesadores independientes, de forma que el primer procesador realizaría la tarea normalmente, pero ésta pasaría a ejecutarse en otro procesador si el primero hubiera fallado.

Comunicación


La comunicación entre procesos en sistemas con un único procesador se lleva a cabo mediante el uso de memoria compartida entre los procesos. En los sistemas distribuidos, al no haber conexión física entre las distintas memorias de los equipos, la comunicación se realiza mediante la transferencia de mensajes.

3. El estándar ISO OSI


Para el envío de mensajes se usa el estándar ISO OSI (interconexión de sistemas abiertos), un modelo por capas para la comunicación de sistemas abiertos. Las capas proporcionan varias interfaces con diferentes niveles de detalle, siendo la última la más general. El estándar OSI define las siguientes siete capas: física, enlace de datos, red, transporte, sesión, presentación y aplicación.
El modelo OSI distingue dos tipos de protocolos, los orientados hacia las conexiones y los protocolos sin conexión. En los primeros, antes de cualquier envío de datos se requiere una conexión virtual, que tras el envío deben finalizar. Los protocolos sin conexión no requieren este paso previo, y los mensajes se envían en forma de datagramas.

4. Modo de transmisión asíncrona ATM


El modo de transmisión asíncrona o ATM proporciona un rápido modo de transmisión. Las altas velocidades se alcanzan prescindiendo de la información de control de flujo y de control de errores en los nodos intermedios de la transmisión. ATM usa el modo orientado a conexión, y permite la transmisión de diferentes tipos de información, como voz, vídeo, datos, etc.
El modelo cliente-servidor basa la comunicación en una simplificación del modelo OSI. Las siete capas que proporciona producen un desaprovechamiento de la velocidad de transferencia de la red, con lo que sólo se usarán tres capas: física (1), enlace de datos (2) y solicitud/respuesta (5). Las transferencias se basan en el protocolo solicitud/respuesta y se elimina la necesidad de conexión.

RPC


Otro paso en el diseño de un sistema operativo distribuido plantea las llamadas a procedimientos remotos o RPCs. Los RPC amplían la llamada local a procedimientos, y los generalizan a una llamada a un procedimiento localizado en cualquier lugar de todo el sistema distribuido. En un sistema distribuido no se debería distinguir entre llamadas locales y RPCs, lo que favorece en gran medida la transparencia del sistema.
Una de las dificultades más evidentes a las que se enfrenta el RPC es el formato de los parámetros de los procedimientos. Un ejemplo para ilustrar este problema es la posibilidad de que en un sistema distribuido formado por diferentes tipos de ordenadores, un ordenador con formato little endian llamara a un procedimiento de otro ordenador con formato big endian, etc. Este problema se podría solucionar si tenemos en cuenta que ambos programas conocen el tipo de datos de los parámetros, o estableciendo un estándar en el formato de los parámetros, de forma que sea usado de forma única.
Otro problema de peor solución es el paso de apuntadores como parámetros. Debido a que los apuntadores guardan una dirección del espacio de direcciones local, el procedimiento que recibe el apuntador como parámetro no puede usar inmediatamente el apuntador, ya que no tiene acceso a los datos, que para él son remotos. En el tema 7 se describirá la memoria compartida, que propone una solución a este problema.
Por último queda por solucionar la tolerancia a fallos. Una llamada a un procedimiento remoto puede fallar por motivos que antes no existían, como la pérdida de mensajes o el fallo del cliente o del servidor durante la ejecución del procedimiento.
La limitación del RPC más clara en los sistemas distribuidos es que no permite enviar una solicitud y recibir respuesta de varias fuentes a la vez, sino que la comunicación se realiza únicamente entre dos procesos. Por motivos de tolerancia a fallos, bloqueos, u otros, sería interesante poder tratar la comunicación en grupo.

5. Comunicación en grupo


La comunicación en grupo tiene que permitir la definición de grupos, así como características propias de los grupos, como la distinción entre grupos abiertos o que permiten el acceso y cerrados que lo limitan, o como la distinción del tipo de jerarquía dentro del grupo. Igualmente, los grupos han de tener operaciones relacionadas con su manejo, como la creación o modificación.

Sincronización


La sincronización en sistemas de un único ordenador no requiere ninguna consideración en el diseño del sistema operativo, ya que existe un reloj único que proporciona de forma regular y precisa el tiempo en cada momento. Sin embargo, los sistemas distribuidos tienen un reloj por cada ordenador del sistema, con lo que es fundamental una coordinación entre todos los relojes para mostrar una hora única. Los osciladores de cada ordenador son ligeramente diferentes, y como consecuencia todos los relojes sufren un desfase y deben ser sincronizados continuamente. La sincronización no es trivial, porque se realiza a través de mensajes por la red, cuyo tiempo de envío puede ser variable y depender de muchos factores, como la distancia, la velocidad de transmisión o la propia saturación de la red, etc.

El reloj


La sincronización no tiene por qué ser exacta, y bastará con que sea aproximadamente igual en todos los ordenadores. Hay que tener en cuenta, eso sí, el modo de actualizar la hora de un reloj en particular. Es fundamental no retrasar nunca la hora, aunque el reloj adelante. En vez de eso, hay que ralentizar la actualización del reloj, frenarlo, hasta que alcance la hora aproximadamente.

Existen diferentes algoritmos de actualización de la hora, tres de ellos se exponen brevemente a continuación.

Algoritmo de Lamport


Tras el intento de sincronizar todos los relojes, surge la idea de que no es necesario que todos los relojes tengan la misma hora exacta, sino que simplemente mantengan una relación estable de forma que se mantenga la relación de qué suceso ocurrió antes que otro suceso cualquiera.
Este algoritmo se encarga exclusivamente de mantener el orden en que se suceden los procesos. En cada mensaje que se envía a otro ordenador se incluye la hora. Si el receptor del mensaje tiene una hora anterior a la indicada en el mensaje, utiliza la hora recibida incrementada en uno para actualizar su propia hora.

Algoritmo de Cristian


Consiste en disponer de un servidor de tiempo, que reciba la hora exacta. El servidor se encarga de enviar a cada ordenador la hora. Cada ordenador de destino sólo tiene que sumarle el tiempo de transporte del mensaje, que se puede calcular de forma aproximada.

Algoritmo de Berkeley


La principal desventaja del algoritmo de Cristian es que todo el sistema depende del servidor de tiempo, lo cual no es aceptable en un sistema distribuido fiable.
El algoritmo de Berkeley usa la hora de todos los ordenadores para elaborar una media, que se reenvía para que cada equipo actualice su propia hora ralentizando el reloj o adoptando la nueva hora, según el caso.

6. Otros problemas de sincronización


El reloj es únicamente uno de tantos problemas de sincronización que existen en los sistemas distribuidos. A continuación planteamos otros problemas relacionados con la sincronización.
En el momento de modificar unos datos compartidos, los procesos deben lograr la exclusión mutua que garantice que dos procesos no modifiquen los datos a la vez.
Algunos algoritmos distribuidos requieren que un proceso funcione como coordinador. Es necesario establecer ciertos algoritmos de elección de estos procesos.
Es necesario ocultar las técnicas de sincronización mediante la abstracción de las transacciones atómicas, que permitan a los programadores salvar los detalles de la programación con sincronización.
Soluciones frente a bloqueos son bastante más complejas que en sistemas con un único procesador.

7. Sistema de archivos


A diferencia de los sistemas de archivos clásicos, un sistema de archivos distribuido debe ser descentralizado, transparente y tolerante a fallos.

Transparencia


El problema más importante a resolver es el modo de que todos los ordenadores puedan acceder a todos los archivos del sistema. Para ello es necesario que todos los ordenadores lleven siempre y en todo momento una copia actualizada de la estructura de archivos y directorios. Si esta estructura oculta la localización física de los archivos entonces hemos cumplido el criterio de transparencia.

Fallos del sistema


Que el sistema de archivos sea tolerante a fallos implica que el sistema debe guardar varias copias del mismo archivo en distintos ordenadores para garantizar la disponibilidad en caso de fallo del servidor original. Además, se ha de aplicar un algoritmo que nos permita mantener todas las copias actualizadas de forma consistente, o un método alternativo que sólo nos permita acceder al archivo actualizado, como invalidar el resto de copias cuando en cualquiera de ellas se vaya a realizar una operación de escritura. El uso de memorias cache para agilizar el acceso a los archivos también es recomendable, pero este caso requiere analizar con especial atención la consistencia del sistema.

Modelos de acceso


Debido a la complejidad del acceso a los archivos a través de todo el sistema distribuido, surgen dos modelos para el acceso a los archivos: el modelo carga/descarga, y el modelo de acceso remoto. El primer modelo simplifica el acceso permitiendo únicamente las operaciones de cargar y descargar un archivo. El acceso a cualquier parte del archivo implica solicitar y guardar una copia local del archivo completo, y sólo se puede escribir de forma remota el archivo completo. Este método sería especialmente ineficaz a la hora de realizar pequeñas modificaciones en archivos muy grandes, como podrían ser bases de datos. El modelo de acceso remoto es mucho más complejo, y permite todas las operaciones típicas de un sistema de archivos local.

Memoria compartida distribuida


La memoria compartida distribuida o DSM es una abstracción que se propone como alternativa a la comunicación por mensajes.
Memoria compartida basada en páginas
El esquema de DSM propone un espacio de direcciones de memoria virtual que integre la memoria de todas las computadoras del sistema, y su uso mediante paginación. Las páginas quedan restringidas a estar necesariamente en un único ordenador. Cuando un programa intenta acceder a una posición virtual de memoria, se comprueba si esa página se encuentra de forma local. Si no se encuentra, se provoca un fallo de página, y el sistema operativo solicita la página al resto de computadoras. El sistema funciona de forma análoga al sistema de memoria virtual tradicional, pero en este caso los fallos de página se propagan al resto de ordenadores, hasta que la petición llega al ordenador que tiene la página virtual solicitada en su memoria local. A primera vista este sistema parece más eficiente que el acceso a la memoria virtual en disco, pero en la realidad ha mostrado ser un sistema demasiado lento en ciertas aplicaciones, ya que provoca un tráfico de páginas excesivo.
Una mejora dirigida a mejorar el rendimiento sugiere dividir el espacio de direcciones en una zona local y privada y una zona de memoria compartida, que se usará únicamente por procesos que necesiten compartir datos. Esta abstracción se acerca a la idea de programación mediante la declaración explícita de datos públicos y privados, y minimiza el envío de información, ya que sólo se enviarán los datos que realmente vayan a compartirse.

Memoria compartida basada en objetos


Una alternativa al uso de páginas es tomar el objeto como base de la transferencia de memoria. Aunque el control de la memoria resulta más complejo, el resultado es al mismo tiempo modular y flexible, y la sincronización y el acceso se pueden integrar limpiamente. Otra de las restricciones de este modelo es que todos los accesos a los objetos compartidos han de realizarse mediante llamadas a los métodos de los objetos, con lo que no se admiten programas no modulares y se consideran incompatibles.

Modelos de consistencia


La duplicidad de los bloques compartidos aumenta el rendimiento, pero produce un problema de consistencia entre las diferentes copias de la página en caso de una escritura. Si con cada escritura es necesario actualizar todas las copias, el envío de las páginas por la red provoca que el tiempo de espera aumente demasiado, convirtiendo este método en impracticable. Para solucionar este problema se proponen diferentes modelos de consistencia, que establezcan un nivel aceptable de acercamiento tanto a la consistencia como al rendimiento. Nombramos algunos modelos de consistencia, del más fuerte al más débil: consistencia estricta, secuencial, causal, PRAM, del procesador, débil, de liberación y de entrada.