SlideShare a Scribd company logo
1 of 136
Download to read offline
Ingeniería Electromecánica
Sistemas de Supervisión y Control
Introducción a los sistemas distribuidos
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Conceptos previos
• Un programa es un conjunto de instrucciones.
• Un proceso es un programa en ejecución.
• Una red de computadores es un conjunto de computadores
conectados por una red de interconexión.
• Un sistema distribuido (SD)
– Modelo físico: conjunto de nodos (procesadores sin memoria
ni reloj común) conectados por una red.
– Modelo lógico: conjunto de procesos que ejecutan
concurrentemente en uno o más computadores que colaboran
y comunican intercambiando mensajes.
• Un protocolo es un conjunto de reglas e instrucciones que
gobiernan la comunicación en un sistema distribuido, es decir,
el intercambio de mensajes.
Características
• Compartir recursos (HW, SW, datos).
– Acceso a recursos remotos.
• Modelo cliente-servidor
• Modelo basado en objetos
• Ofrecen una buena relación coste/rendimiento
• Capacidad de crecimiento
• Tolerancia a fallos, disponibilidad
– Replicación
• Concurrencia
• Velocidad
– Paralelismo
Desventajas
• Necesidad de software más complejo
• Problemas de fiabilidad
• Problemas de seguridad y confidencialidad
Arquitectura de un sistema distribuido
Red de interconexión
Redes e interconexión
• Paquete: tipo de mensaje que se intercambia entre dos
dispositivos de comunicación.
– Tamaño limitado por el hardware
• Mensaje: objeto lógico que se intercambian entre dos o más
procesos.
– Su tamaño puede ser bastante grande.
– Un mensaje se descompone en paquetes.
• Subsistema de comunicación: conjunto de componentes
HW y SW que proporcionan servicios de comunicación en un
sistema distribuido.
• Protocolo: conjunto de reglas e instrucciones que gobiernan el
intercambio de paquetes y mensajes
Propiedades de un subsistema de comunicación
• Tasa de transferencia: velocidad de transferencia
• Latencia: tiempo necesario para transferir un mensaje vacío
• Tiempo de transferencia = latencia + tamaño/tasa de
trasferencia
• Paquetes/segundo
• Capacidad de crecimiento. Aumento en el nº de nodos
• Calidad de servicio
– Importante en aplicaciones multimedia y de tiempo real
• Fiabilidad del subsistema
– Mecanismos de detección de errores
• Seguridad: protección de los paquetes
• Confidencialidad: proteger la identidad de los emisores
Tipos de redes de computadores
• Redes de área local (LAN, Local Area Network)
– Redes que enlazan sistemas cercanos
– Posibilidad de difusión de mensajes (broadcast)
• Redes de área extensa (WAN, Wide Area Network)
– Poco ancho de banda (20-500 Kbps)
– Bajas latencias
– Redes telefónicas, redes públicas de datos, fiabra óptica
RDSI, B-RDSI, ATM
• Nuevos desarrollos en telecomunicaciones (ATM y RDSI)
– Diferencias entre LAN y WAN cada vez más borrosas
Protocolos de comunicación
• Protocolo: conjunto de reglas y formatos que permiten la
comunicación entre procesos.
• La definición de un protocolo tiene dos parte:
– Especificación de la secuencia de mensajes que deben
intercambiarse.
– Especificación del formato de mensajes.
• El software de red se organiza en niveles
Funciones de una pila de protocolos
• Segmentación y ensamblado de mensajes
• Encapsulado: incorporación de información de control a los
datos
– Dirección del emisor y receptor
– Código de detección de errores
• Control de conexión
– Protocolos orientados a conexión
– Protocolos no orientados a conexión:
• No se asegura el orden secuencial de los datos transmitidos
• Entrega ordenada en protocolos orientados a conexión
– Números de secuencia
Funciones de una pila de protocolos II
• Control de flujo: función realizada en el receptor para limitar la
cantidad o tasa de datos que envía el emisor.
• Control de errores: se basan en el uso de una secuencia de
comprobación y reenvío.
• Direccionamiento, conseguir que los mensajes alcancen al
receptor
• Multiplexación: necesario para un uso más eficiente de los
servicios
• Servicios de transmisión:
– Prioridad
– Calidad de servicio
– Seguridad
Ejemplos de protocolos
• Protocolos internet:
– Originados por el trabajo de DARPA en los 70
– Muy utilizados en la actualidad
– Gran crecimiento durante los 90 debido al uso del Web
• Protocolos OSI (open system interconection)
– Estándar desarrollado por ISO
• Estándares propietarios
– SNA de IBM (años 70)
– DECnet desarrollado por DEC
– NetWare: red de Novell para redes de PC
Protocolos TCP/IP
• Resultado de la investigación y desarrollo llevados a cabo en la
red ARPANET (financiada por DARPA) en los años 70
• Familia de protocolos utilizados en Internet
• En los 90 se ha establecido como la arquitectura comercial
dominante:
– Se especificaron y utilizaron antes de OSI
– Independiente de la tecnología de red utilizada
– Internet está construida sobre un conjunto de protocolos
TCP/IP.
– Espectacular desarrollo de World Wide Web
Protocolos TCP/IP
Emisor Receptor
Protocolo Internet (nivel IP)
• La transmisión no es fiable (no se asegura la recepción de los
paquetes IP). Los paquetes se pueden descartar por:
– Expiración del tiempo de vida
– Congestión
– Error en la suma de comprobación
• Control de flujo muy limitado
• Calidad de servicio muy limitado
– Seguridad: normal o alto
– Retardo: normal o bajo
– Rendimiento: normal o alto
Protocolos de transporte
• Protocolo TCP
– Orientado a conexión
– Garantiza que los datos se entregan en el orden en el que se
envían
– Las conexiones TCP se ven como un flujo de bytes
– La transmisión se considera “fiable”. Pueden perderse
mensajes (sobrecarga en la red, fallos en encaminadores, etc.)
– Cuando los mensajes son muy pequeños, TCP los retrasa
hasta conseguir uno más grande
• Esta opción debe desactivarse si es necesario
– Escrituras concurrentes sobre una misma conexión TCP
pueden provocar que los datos se entremezclen.
Protocolos de transporte
• Protocolo UDP
– Protocolo de datagramas no orientado a conexión.
– Protocolo no fiable
• Los paquetes se pueden perder, duplicar, recibir en orden
distinto al enviado
– Tamaño máximo del mensaje: 64 KB
Encaminamiento
• Permite que los paquetes viajen del proceso emisor al receptor.
• Algoritmo:
– Un programa de aplicación genera un paquete, o bien se lee
un paquete de la interfaz de red.
– Si el paquete es para la máquina, se acepta.
– En caso contrario, se incrementa el contador de saltos, si se
excede el máximo, el paquete se descarta.
– Si el paquete no es para la máquina se busca en la tabla de
encaminamiento y se retransmite a la interfaz adecuada.
• Tablas estáticas, las más utilizadas
• Tablas dinámicas
Papel del sistema operativo
• El SW de comunicación de un sistema operativo se organiza
como un conjunto de componentes con tareas concretas
– Subsistema de almacenamiento: buffers donde almacenar los
paquetes que llegan y se envían (limitado)
• En implementaciones UNIX típicas
– TCP reserva para cada puerto (socket) un buffer de 8 KB y
UDP 2 buffers de 8KB. El tamaño se puede incrementar
hasta 64 KB.
– Los mensajes a enviar se copian a estos buffers
– El contenido de estos buffers se fragmenta y se copian a
nuevos bloques de memoria a utilizar por IP
– IP envía finalmente los paquetes por la interfaz de red
correspondiente
Papel del sistema operativo
• Un sistema operativo puede perder paquetes cuando la tasa de
envíos y de recepción es muy grande.
• En sistemas operativos multiusuario la pérdida de paquetes suele
producirse a ráfagas debido a los algoritmos de planificación.
• La latencia del SO
ha crecido en términos
relativos
0
5
10
15
20
25
30
35
40
1985-1990 1990-1995 1995-2000 2000-20005
¿Dónde se pierde el tiempo?
• Códigos de corrección (Checksum)
– Sobre datos TCP y UDP
– Sobre cabeceras IP
• Copias de datos
– Entre usuario y kernel
• Estructura de datos
– Gestión de los buffers, colas de defragmentación de paquetes
IP,
• Sistema Operativo
– Sobrecarga impuesta por las operaciones del SO
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Sistema operativo en red (SOR)
• El usuario ve un conjunto de máquinas independientes
– No hay transparencia
• Se debe acceder de forma explícita a los recursos de otras
máquinas
• Difíciles de utilizar para desarrollar aplicaciones distribuidas
Sistema operativo
Lenguajes de programación
Aplicaciones
Red de interconexión
Hardware
Sistema operativo
Lenguajes de programación
Aplicaciones
Hardware
Sistema operativo distribuido (SOD)
• Se comporta como un SO único (visión única)
– Distribución. Transparencia
• Se construyen normalmente como micronúcleos que ofrecen
servicios básicos de comunicación
– Mach, Amoeba, Chorus.
• Todos los computadores deben ejecutar el mismo SOD
Sistema operativo distribuido
Lenguajes de programación
Aplicaciones
Red de interconexión
Hardware Hardware
Transparencia
• Acceso: acceso a recursos remotos y locales de igual forma
• Posición: acceso a los recursos sin necesidad de conocer su
situación
• Concurrencia: acceso concurrente a recursos compartidos sin
interferencias
• Replicación: Acceso a recursos replicados sin conocimiento de
que lo son
• Fallos: mantenimiento del servicio en presencia de fallos.
• Migración: permite que los recursos y objetos se muevan sin
afectar a la operación de los programas.
• Capacidad de crecimiento: facilidad para crecer sin afectar a la
estructura del sistema
Middleware y entornos distribuidos
• Servicios y protocolos estándarizados: Sistemas abiertos
• Ofrecen servicios no incluidos en el SO (servicios de ficheros
distribuidos, servicios de nombres, ...)
• Facilitan el desarrollo de aplicaciones distribuidas
• Independientes del HW y del SO subyacente.
• DCE, CORBA, DCOM, Legion, Globe, Globus
Sistema operativo
Middleware
Lenguajes de programación
Aplicaciones
Red de interconexión
Hardware
Sistema operativo
Hardware
Servicios de un sistema operativo distribuido
• Servicios de comunicación
• Servicios de sincronización
• Gestión distribuida de procesos
• Sistemas de archivos distribuidos
• Memoria compartida distribuida
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Comunicación en sistemas distribuidos
• La comunicación de procesos es fundamental en cualquier
sistema distribuido
• Existen diferentes posibilidades todas ellas basadas en el paso de
mensajes
– Mecanismos de bajo nivel, el programador debe preocuparse
de establecer los protocolos de comunicación, representación
de datos, etc.
• Colas de mensajes
• Sockets
– Mecanismo de alto nivel, ofrecen abstracciones donde el
programador no debe preocuparse de establecer protocolos
• Llamadas a procedimientos remotos
• Invocación de métodos remotos (entornos orientados a objetos)
Comunicación cliente-sevidor
• Protocolo típico: petición-respuesta
• Muy utilizada en entornos distribuidos (más del 90% de los
sistemas distribuidos utilizan la arquitectura cliente-servidor)
NÚCLEO
cliente
petcición
respuesta
servidor
Máquina A Máquina B
NÚCLEO
RED
Comunicación de grupos
• Utiliza mensajes multicast
• Útil para:
– Ofrecer tolerancia a fallos basado en servicios replicados
– Localizar objetos en sistemas distribuidos
– Mejor rendimiento mediante datos replicados
– Actualizaciones múltiples
– Operaciones colectivas en cálculo paralelo
Sockets
• Aparecieron en 1981 en UNIX BSD 4.2
– Intento de incluir TCP/IP en UNIX
– Diseño independiente del protocolo de comunicación
• Un socket es punto final de comunicación (dirección IP y
puerto)
• Abstracción que:
– Ofrece interfaz de acceso a los servicios de red en el nivel de
transporte
• Protocolo TCP
• Protocolo UDP
– Representa un extremo de una comunicación bidireccional
con una dirección asociada
Sockets: introducción
• Sujetos a proceso de estandarización dentro de POSIX (POSIX
1003.1g)
• Actualmente
– Disponibles en casi todos los sistemas UNIX
– En prácticamente todos los sistemas operativos
• WinSock: API de sockets de Windows
– En Java como clase nativa
Sockets UNIX
• Dominios de comunicación
• Tipos de sockets
• Direcciones de sockets
• Creación de un socket
• Asignación de direcciones
• Solicitud de conexión
• Preparar para aceptar conexiones
• Aceptar una conexión
• Transferencia de datos
Dominios de comunicación
• Un dominio representa una familia de protocolos
• Un socket está asociado a un dominio desde su creación
• Sólo se pueden comunicar sockets del mismo dominio
• Algunos ejemplos:
– PF_UNIX (o PF_LOCAL): comunicación dentro de una
máquina
– PF_INET: comunicación usando protocolos TCP/IP
• Los servicios de sockets son independientes del dominio
Tipos de sockets
• Stream (SOCK_STREAM)
– Orientado a conexión
– Fiable, se asegura el orden de entrega de mensajes
– No mantiene separación entre mensajes
– Si PF_INET se corresponde con el protocolo TCP
• Datagrama (SOCK_DGRAM)
– Sin conexión
– No fiable, no se asegura el orden en la entrega
– Mantiene la separación entre mensajes
– Si PF_INET se corresponde con el protocolo UDP
• Raw (SOCK_RAW)
– Permite el acceso a los protocolos internos como IP
Direcciones de sockets
• Cada socket debe tener asignada una dirección única
• Las direcciones se usan para:
– Asignar una dirección local a un socket (bind)
– Especificar una dirección remota (connect o sendto)
• Dependientes del dominio
• Se utiliza la estructura genérica struct sockaddr
• Cada dominio usa una estructura específica
– Direcciones en PF_UNIX (struct sockaddr_un)
• Nombre de fichero
– Direcciones en PF_UNIX (struct sockaddr_in)
– Uso de conversión de tipos (casting) en las llamadas
Direcciones de sockets en PF_INET
• Host (32 bits) + puerto (16 bits)
• Una dirección IP se almacena en una estructura de tipo:
– struct in_addr
• Estructura struct sockaddr_in
– Debe iniciarse a 0
– sin_family: dominio (AF_INET)
– sin_port: puerto
– sin_addr: dirección del host
• Función que facilita el nombre de la máquina en la que se
ejecuta:
int gethostname(char *name, int namelen);
Obtención de la dirección de host
• Usuarios manejan direcciones en forma de texto:
– decimal-punto: 138.100.8.100
– dominio-punto: laurel.datsi.fi.upm.es
• Algunas funciones para trabajar con direcciones:
– char *inet_ntoa(struct in_addr in);
• Devuelve una dirección en notación decimal-punto.
– struct hostent *gethostbyname(char *str);
• Convierte una dirección en notación dominio-punto a
una estructura que describe máquina.
• Algunos campos de la estructura struct hostent:
– char *name nombre oficial de la máquina
– char **h_addr_list lista de direcciones
Ejemplo
• Programa que obtiene la dirección en formato decimal-punto a
partir de un formato dominio-punto.
void main(int argc, char **argv) {
struct hostent *hp;
struct in_addr in;
hp = gethostbyname(argv[1]);
if (hp == NULL) {
printf(“Error en gethostbynamen”);
exit(0);
}
memcpy(&in.s_addr,*(hp->h_addr_list),sizeof(in.s_addr));
printf(“%s es %sn”, hp->h_name, inet_ntoa(in));
}
Direcciones de sockets II
• En TCP/IP los números se emplean con formato big-endian.
• En computadores que no utilicen este formato es necesario
emplear funciones para traducir números entre el formato que
utiliza TCP/IP y el empleado por el propio computador:
u_long htonl (u_long hostlong)
u_short htons (u_short hostshort)
u_long ntohl (u_long netlong)
u_short ntohs (u_short netshort)
• Las primera traduce un número de 32 bits representado en el
formato del computador al formato de red (TCP/IP).
Creación de un socket
• int socket(int dominio, int tipo, int protocolo)
– Crea un socket devolviendo un descriptor de fichero
– dominio: PF_XXX
– tipo: SOCK_XXX
– protocolo: dependiente del dominio y tipo
• 0 elige el más adeucado
• Especificados en /etc/protocols
• El socket creado no tiene dirección asignada
Asignación de direcciones
• int bind(int sd, struct sockaddr *dir, int long)
– sd: descriptor devuelto por socket
– dir: dirección a asignar
– long: longitud de la dirección
• Si no se asigna dirección (típico en clientes)
– Se le asigna automáticamente (puerto efímero) en la su
primera utilización (connect o sendto)
• Direcciones en dominio PF_INET
– Puertos en rango 0..65535. Reservados: 0..1023. Si 0, el
sistema elige uno
– Host: una dirección local IP
• INNADDR_ANY: elige cualquiera de la máquina
• El espacio de puertos para streams y datagramas es indendiente
Solicitud de conexión
• Realizada en el cliente
• int connect(int sd, struct sockaddr *dir, int long)
– sd: descriptor devuelto por socket
– dir: dirección del socket remoto
– long: longitud de la dirección
• Si el socket no tiene dirección asignada, se le asigna una
automáticamente
• Normalmente se usa con streams
Preparar para aceptar conexiones
• Realizada en el servidor stream después de socket y bind
• int listen(int sd, int baklog)
– sd: descriptor devuelto por socket
– backlog:
• Número máximo de peticiones pendientes de aceptar que se
encolarán (algunos manuales recomiendan 5)
• Hace que el socket quede preparado para aceptar conexiones.
Aceptar una conexión
• Realizada en el servidor stream después de socket, bind y listen
• Cuando se produce la conexión, el servidor obtiene:
– La dirección del socket del cliente
– Un nuevo descriptor que queda conectado al socket del
cliente
• Después de la conexión quedan activos dos sockets en el
servidor:
– El original para aceptar nuevas conexiones
– El nuevo para enviar/recibir datos por la conexión
Aceptar una conexión
• int accept(int sd, struct sockaddr *dir, int *long)
– sd: descriptor devuelto por socket
– dir: dirección del socket del cliente devuelta
– long: parámetor valor-resultado
• Antes de la llamada: tamaño de dir
• Después de la llamada: tamaño de la dirección del cliente que
se devuelve.
Obtener la dirección de un socket
• Obtener la dirección a partir del descriptor
– int getsockname(int sd, struct sockaddr *dir, int *long)
• sd: descriptor devuelto por socket
• dir: dirección del socket devuelta
• long: parámetro valor-resultado (igual que en accept)
• Obtener la dirección del socket en el toro extremo de la
conexión:
– int gerpeername(int sd, struct sockaddr *dir, int *long)
• sd: descriptor devuelto por socket
• dir: dirección del socket remoto
• long: parámetro valor-resultado
Transferencia de datos con streams
• Una vez realizada la conexión, ambos extremos puede
transferir datos.
• Envío:
– int write(int sd, char *mem, int long);
• Devuelve el nº de bytes enviados
– También puede utilizarse el servicio send.
• Recepción:
– int read(int sd, char *mem, int long);
• Devuelve el nº de bytes recibidos
– También puede utilizarse el servicio recv
• Es importante comprobar siempre el valor que devuelven estas
llamadas: pueden no transferirse todos los datos.
Transferencia de datos con streams II
• Función que envía un bloque de datos con reintentos:
int enviar(int socket, char *mensaje, int longitud)
{
int r;
int l = longitud;
do {
r = write(socket, mensaje, l);
l = l – r;
mensaje = mensaje + r;
} while ((l>0) && (r>=0));
if (r < 0)
return (-1); /* fallo */
else
return(0);
}
Transferencia de datos con datagramas
• No hay conexión real
• Para usar un socket para transferir basta con:
– Crearlo: socket
– Asignarle una dirección: bind (si no, lo hará el sistema)
• Envío:
– int sendto(int sd, char *men, int long, int flags,
struct sockaddr *dir, int long)
• Devuelve el nº de bytes enviados
• dir: dirección del socket remoto y long la longitud
• Rccepción:
– int recvfrom(int sd, char *men, int long, int flags,
struct sockaddr *dir, int long)
• Devuelve el nº de bytes enviados
• dir: dirección del socket remoto y long la longitud
Cerrar un socket
• Se usa close para cerrar ambos tipos de sockets
• Si el socket es de tipo stream, close cierra la conexión en ambos
sentidos
• Se puede cerrar un único extremo:
– int shutdown(int st, int modo)
• sd: descriptor devuelto por socket
• modo: SHUT_RD, SHUT_RW o SHUT_RDWR
Configuración de opciones
• Existen varios niveles dependiendo del protocolo afectado como
parámetro
– SOL_SOCKET: opciones independientes del protocolo
– IPPROTO_TCP: nivel de protocolo TCP
– IPPTOTO_IP: nivel de protocolo IP
• Consultar opciones asociadas a un socket
– int getsockopt(int sd, int nivel, int opc, char *val, int *long)
• Modificar las opciones asociadas a un socket
– int setsockopt(int sd, int nivel, int opc, char *val, int long)
• Ejemplos (nivel SOL_SOCKET):
– SO_REUSEADDR: permite reutilizar direcciones
Escenario típico con sockets streams
Proceso cliente
Proceso servidor
socket()
socket()
bind()
listen()
accept() Crear
thread
read()
close()
accept()
connect()
Abrir conexión
read()
close()
Petición
write()
Respuesta
write()
Ejemplo (TCP)
NÚCLEO
cliente
sumar(5,2)
5+2
Restulado = 7
servidor
Máquina A Máquina B
NÚCLEO
RED
Sistemas operativos: una visión aplicada 56 © J. Carretero, F. García, P. de Miguel, F. Pérez
Servidor (TCP)
void main(int argc, char *argv[])
{
struct sockaddr_in server_addr, client_addr;
int sd, sc;
int size, val;
int size;
int num[2], res;
sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
val = 1;
setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *) &val, sizeof(int));
bzero((char *)&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = 4200;
bind(sd, &server_addr, sizeof(server_addr));
Servidor (TCP)
listen(sd, 5);
size = sizeof(client_addr);
while (1)
{
printf("esperando conexionn");
sc = accept(sd, (struct sockaddr *)&client_addr,&size);
read(sc, (char *) num, 2 *sizeof(int)); // recibe la petición
res = num[0] + num[1];
write(sc, &res, sizeof(int)); // se envía el resultado
close(sc);
}
close (sd);
exit(0);
}
Cliente (TCP)
void main(void)
{
int sd;
struct sockaddr_in server_addr;
struct hostent *hp;
int num[2], res;
sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bzero((char *)&server_addr, sizeof(server_addr));
hp = gethostbyname ("arlo.datsi.fi.upm.es");
memcpy (&(server_addr.sin_addr), hp->h_addr, hp->h_length);
server_addr.sin_family = AF_INET;
server_addr.sin_port = 4200;
Cliente (TCP)
// se establece la conexión
connect(sd, (struct sockaddr *) &server_addr,
sizeof(server_addr));
num[0]=5;
num[1]=2;
write(sd, (char *) num, 2 *sizeof(int)); // envía la petición
read(sd, &res, sizeof(int)); // recibe la respuesta
printf("Resultado es %d n", res);
close (sd);
exit(0);
}
Servidor (datagramas)
void main(void)
{
int num[2];
int s, res, clilen;
struct sockaddr_in server_addr, client_addr;
s = socket(AF_INET, SOCK_DGRAM, 0);
bzero((char *)&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = 7200;
bind(s, (struct sockaddr *)&server_addr, sizeof(server_addr));
Servidor (datagramas)
clilen = sizeof(client_addr);
while (1)
{
recvfrom(s, (char *) num, 2* sizeof(int), 0,
(struct sockaddr *)&client_addr, &clilen);
res = num[0] + num[1];
sendto(s, (char *)&res, sizeof(int), 0,
(struct sockaddr *)&client_addr, clilen);
}
}
Cliente (datagramas)
void main(int argc, char *argv[]){
struct sockaddr_in server_addr, client_addr;
struct hostent *hp;
int s, num[2], res;
if (argc != 2){
printf("Uso: client <direccion_servidor> n");
exit(0);
}
s = socket(AF_INET, SOCK_DGRAM, 0);
hp = gethostbyname (argv[1]);
bzero((char *)&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
memcpy (&(server_addr.sin_addr), hp->h_addr, hp->h_length);
server_addr.sin_port = 7200;
Cliente (datagramas)
bzero((char *)&client_addr, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = INADDR_ANY;
client_addr.sin_port = htons(0);
bind (s, (struct sockaddr *)&client_addr, sizeof(client_addr));
num[0] = 2; num[1] = 5;
sendto(s, (char *)num, 2 * sizeof(int), 0,
(struct sockaddr *) &server_addr, sizeof(server_addr));
recvfrom(s, (char *)&res, sizeof(int), 0, NULL, NULL);
printf("2 + 5 = %dn", res);
close(s);
}
Llamadas a procedimientos remotos (RPC)
• RPC (remote procedure call): llamadas a procedimiento remoto
(Birrel y Nelson 1985)
• Híbrido entre llamadas a procedimientos y paso de mensajes
• Las RPC constituyen el núcleo de muchos sistemas distribuidos
• Llegaron a su culminación con DCE (Distributed Computing
Environment)
• Han evolucionado hacia orientación a objetos
– Invocación de métodos remotos (CORBA, RMI)
Funcionamiento de las RPC
• El proceso que realiza la llamada empaqueta los argumentos en
un mensaje, se los envía a otro proceso y espera el resultado
• El proceso que ejecuta el procedimiento extrae los argumentos
del mensaje, realiza la llamada de forma local, obtiene el
resultado y se lo envía de vuelta al proceso que realizó la
llamada
• Objetivo: acercar la semántica de las llamadas a procedimiento
convencional a un entorno distribuido (transparencia).
Llamadas y mensajes en una RPC
SISTEMA CLIENTE
CÓDIGO DE LA APLICACIÓN
PREPARA
ENTRADA
CONVIERTE
SALIDA
INICIO
LLAMADA
suma(5,2)
FIN
LLAMADA = 7
RESGUARDO
CLIENTE 2
1
5
3
PROCEDIMIENTOS
EJECUTA
PROCEDIMIENTO
REMOTO
SISTEMA SERVIDOR
RESGUARDO
SERVIDOR
PREPARA
SALIDA
CONVIERTE
ENTRADA
4
67
Suplentes (stubs)
• Se generan automáticamente por el software de RPC
• En el cliente:
– Localizan al servidor
– Empaquetan los parámetros y construyen los mensajes
– Envían el mensaje al servidor
– Espera la recepción del mensaje y devuelven los resultados
• En el servidor
– Realizan tareas similares
• Los suplentes son independientes de la implementación que se
haga del cliente y del servidor. Sólo dependen de la interfaz.
RPC: protocolo básico
cliente servidor
Desempaqueta
la respuesta
Se registra con un
servicio de nombres
recibe petición
Ejecuta el
procedimiento
envía petición
“enlaza con
el servidor”
prepara
parámetros,
envía petición
Aspectos de diseño de las RPC
• Lenguaje de definición de interfaces. Generador de suplentes.
• Transferencia de parámetros
• Enlace dinámico (binding)
• Semántica de las RPC en presencia de fallos
Lenguaje de definición de interfaces
• Una interfaz especifica un nombre de servicio que utilizan los
clientes y servidores
• Nombres de procedimientos y parámetros (entrada y salida).
• Los compiladores pueden diseñarse para que los clientes y
servidores se escriban en lenguajes diferentes.
• Tipos de RPC
– Integrado con un lenguaje de programación (Cedar, Argus)
– Lenguaje de definición de interfaces específico para describir
las interfaces entre los clientes y los servidores (RPC de Sun
y RPC de DCE)
Transferencia de parámetros
• Una de las funciones de los resguardos es empaquetar los
parámetros en un mensaje: aplanamiento (marshalling)
• Problemas en la representación de los datos
– Servidor y cliente pueden ejecutar en máquinas con
arquitecturas distintas
– Transmisión con un formato estándar:
• XDR (external data representation) es un estándar que define
la representación de tipos de datos
– El receptor se encarga de la conversión (CORBA).
• Problemas con los punteros
– Una dirección sólo tiene sentido en un espacio de direcciones
Aplanamiento
SISTEMA CLIENTE
CÓDIGO DE LA APLICACIÓN
RESGUARDO
CLIENTE
Procedimiento(”ABC”, 123, 12.34)
aplanamiento
mensaje
Tira de bytes
A B C 123 12.34
PROCEDIMIENTOS
SISTEMA SERVIDOR
RESGUARDO
SERVIDOR
Extrae los
parámetros
A B C 123 12.34
Procedimiento(”ABC”, 123, 12.34)
Enlace dinámico (Binding)
• Enlace dinámico: permite localizar objetos con nombre en un
sistema distribuido, en concreto, servidores que ejecutan las
RPC.
• Tipos de enlace:
– Enlace no persistente: la conexión entre el cliente y el
servidor se establece en cada RPC.
– Enlace persistente: la conexión se mantiene después de la
primera RPC.
• Útil en aplicaciones con muchas RPC repetidas
• Problemas si lo servidores cambian de lugar
Enlazador dinámico
• Enlazador dinámico (binder): Es el servicio que mantiene una
tabla de traducciones entre nombres de servicio y direcciones.
Incluye funciones para:
– Registrar un nombre de servicio
– Eliminar un nombre de servicio
– Buscar la dirección correspondiente a un nombre de servicio
• Como localizar al enlazador dinámico:
– Ejecuta en una dirección fija de un computador fijo.
– El sistema operativo se encarga de indicar su dirección
– Difundiendo un mensaje (broadcast) cuando los procesos
comienzan su ejecución.
Establecimiento de la comunicación en una RPC
Servidor
de nombres
1. Registrar
procedimiento
5. Dar de baja
procedimiento
2. Buscar
servidor
3. Dirección
del servidor
4. Ejecutar
procedimiento
servidor
servidor
Máquina A Máquina B
Máquina C
Semántica de las RPC en presencia de fallos
• Problemas que pueden plantear las RPC
– El cliente no es capaz de localizar al servidor
– Se pierde el mensaje de petición del cliente al servidor
– Se pierde el mensaje de respuesta del servidor al cliente
– El servidor falla después de recibir una petición
– El cliente falla después de enviar una petición
Cliente no puede localizar al servidor
• El servidor puede estar caído
• El cliente puede estar usando una versión antigua del servidor
• La versión ayuda a detectar accesos a copias obsoletas
• Cómo indicar el error al cliente
– Devolviendo un código de error (-1)
• No es transparente
– Ejemplo: sumar(a,b)
– Elevando una excepción
• Necesita un lenguaje que tenga excepciones
Pérdida de mensajes del cliente
• Es la más fácil de tratar
• Se activa una alarma (timeout) después de enviar el mensaje
• Si no se recibe una respuesta se retransmite
Pérdidas en los mensajes de respuesta
• Más difícil de tratar
• Se pueden emplear alarmas y retransmisiones, pero:
– ¿Se perdió la petición?
– ¿Se perdió la respuesta?
– ¿El servidor va lento?
• Algunas operaciones pueden repetirse sin problemas
(operaciones idempotentes)
– Una transferencia bancaria no es idempotente
• Solución con operaciones no idempotentes es descartar
peticiones ya ejecutadas
– Un nº de secuencia en el cliente
– Un campo en el mensaje que indique si es una petición
original o una retransmisión
Fallos en los servidores
• El servidor no ha llegado a ejecutar la operación
– Se podría retransmitir
• El servidor ha llegado a ejecutar la operación
• El cliente no puede distinguir los dos
• ¿Qué hacer?
– No garantizar nada
– Semántica al menos una vez
• Reintentar y garantizar que la RPC se realiza al menos una vez
• No vale para operaciones no idempotentes
– Semántica a lo más una vez
• No reintentar, puede que no se realice ni una sola vez
– Semántica de exactamente una
• Sería lo deseable
Fallos en los clientes
• La computación está activa pero ningún cliente espera los
resultados (computación huérfana)
– Gasto de ciclos de CPU
– Si cliente rearranca y ejecuta de nuevo la RPC se pueden
crear confusiones
Aspectos de implementación
• Protocolos RPC
– Orientados a conexión
• Fiabilidad se resuelve a bajo nivel, peor rendimiento
– No orientados a conexión
– Uso de un protocolo estándar o un específico
• Algunos utilizan TCP o UDP como protocolos básicos
Programación con un paquete de RPC
• El programador debe proporcionar:
– La definición de la interfaz (idl)
• Nombres de las funciones
• Parámetros que el cliente pasa al servidor
• Resultados que devuelve el servidor al cliente
– El código del cliente
– El código del servidor
• El compilador de idl proporciona:
– El resguardo del cliente
– El resguardo del servidor
Programación con RPC
COMPILADOR C COMPILADOR C
COMPILADOR CCOMPILADOR C
CABECERA CABECERAFICHEROS
FUENTE DEL
CLIENTE
FICHEROS
OBJETO DEL
CLIENTE
FICHEROS
OBJETO DEL
SERVIDOR
EJECUTABLE
DEL
CLIENTE
EJECUTABLE
DEL
SERVIDOR
FICHEROS
FUENTE DEL
SERVIDOR
OBJETO
SUPLENTE
EN CLIENTE
OBJETO
SUPLENTE
EN SERVIDOR
MONTADOR MONTADOR
BIBLIOT.
RPC
BIBLIOT.
RPC
DESARROLLO
DE LA
INTERFAZ
DESARROLLO
DEL
CLIENTE
DESARROLLO
DEL
SERVIDOR
COMPILADOR IDL
SUPLENTE
EN SERVIDOR
SUPLENTE
EN CLIENTE
CABECERA
FICHERO
DE DEFINICIÓN
DE INTERFAZ
Ejemplos de paquetes de RPC
• RPC de Sun (1990) utilizado en NFS
• RPC del proyecto ANSA (1989) desarrollado por Architecture
Project Management Ltd. (Cambridge, Inglaterra)
• RPC de DCE (1990), estándar desarrollado por Open Software
Foundation
RPC de Sun
• Utiliza como lenguaje de definición de interfaz XDR:
– Una interfaz contiene un nº de programa y un nº de versión.
– Cada procedimiento específica un nombre y un nº de
procedimiento
– Los procedimientos sólo aceptan un parámetro.
– Los parámetros de salida se devuelven mediante un único
resultado
– El lenguaje ofrece una notación para definir:
• constantes
• definición de tipos
• estructuras, uniones
• programas
RPC de Sun
• rpcgen es el compilador de interfaces que genera:
– Suplente del cliente
– Suplente del servidor y procedimiento principal del servidor.
– Procedimientos para el aplanamiento (marshalling)
– Fichero de cabecera (.h) con los tipos y declaración de
prototipos.
• Enlace dinámico
– El cliente debe especificar el host donde ejecuta el servidor
– El servidor se registra (nº de programa, nº de versión y nº de
puerto) en el portmapper local
– El cliente envía una petición al portmapper del host donde
ejecuta el servidor
Ejemplo
NÚCLEO
cliente
sumar(5,2)
5+2
Restulado = 7
servidor
Máquina A Máquina B
NÚCLEO
RED
Esquema de la aplicación
suma.x
repcgen
suma_svc.c
servidor.c
suma.h
suma_xdr.c
suma_clnt.c
cliente.c
Archivos para
el cliente
Archivos
comunes
Archivos para
el servidor
suma.x
struct peticion {
int a;
int b;
};
program SUMAR {
version SUMAVER {
int SUMA(peticion) = 1;
} = 1;
} = 99;
suma.h
#ifndef _SUMA_H_RPCGEN
#define _SUMA_H_RPCGEN
#include <rpc/rpc.h>
struct peticion {
int a;
int b;
};
#define SUMAVER ((u_long)99)
#define SUMA ((u_long)1)
extern int * suma_1(peticion *, CLIENT *);
extern int * suma_1_svc(peticion *, struct svc_req *);
#endif /* !_SUMA_H_RPCGEN */
servidor.c
#include "suma.h"
int *suma_1_svc(peticion *argp, struct svc_req *rqstp)
{
static int result;
result = argp->a + argp->b;
return(&result);
}
cliente.c
#include "suma.h"
main( int argc, char* argv[] )
{
CLIENT *clnt;
int *res;
peticion suma_1_arg;
char *host;
if(argc < 2) {
printf("usage: %s server_hostn", argv[0]);
exit(1);
}
host = argv[1];
cliente.c II
/* localiza al servidor */
clnt = clnt_create(host, SUMAR, SUMAVER, "udp");
if (clnt == NULL) {
clnt_pcreateerror(host);
exit(1);
}
suma_1_arg.a = 5;
suma_1_arg.b = 2;
res = suma_1(&suma_1_arg, clnt);
if (res == NULL) {
clnt_perror(clnt, "call failed:");
}
printf("La suma es %dn", *res);
clnt_destroy( clnt );
}
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Relojes lógicos
• En ausencia de un reloj global la relación causa-efecto (precede
a) es la única posibilidad de ordenar eventos
• Relación de precedencia (Lamport)
– Si a y b son dos eventos del mismo proceso y a ocurrió antes
que b, entonces a Y b
– Si a=send(m) y b=receive(m), entonces a Y b
– La relación es transitiva
• Dos eventos son concurrentes (a || b) si no se puede deducir
entre ellos una relación de causalidad potencial
Relojes lógicos (algoritmo de Lamport)
• Útiles para ordenar eventos en ausencia de un reloj común.
• Algoritmo de Lamport (1978)
• Cada proceso P mantiene una variable entera RLp (reloj lógico)
• Cuando un proceso P genera un evento, RLp=RLp+1
• Cuando un proceso envía un mensaje m a otro le añade el valor
de su reloj
• Cuando un proceso Q recibe un mensaje m con un valor de
tiempo t, el proceso actualiza su reloj, RLq=max(RLq,t)
• El algoritmo asegura que si a Y b entonces RL(a) < RL(b)
Mantenimiento de los relojes lógicos
Relojes lógicos totalmente ordenados
• Los relojes lógicos de Lamport imponen sólo una relación de
orden parcial:
– Eventos de distintos procesos pueden tener asociado una
misma marca de tiempo.
• Se puede extender la relación de orden para conseguir una
relación de orden total añadiendo el nº de proceso
– (Ta, Pa): marca de tiempo del evento a del proceso P
• (Ta, Pa) < (Tb, Pb) sí y solo si
– Ta < Tb o
– Ta=Tb y Pa<Pb
Problemas de los relojes lógicos
• No bastan para caracterizar la causalidad
– Dados RL(a) y RL(b) no podemos saber:
• si a precede a b
• si b precede a a
• si a y b son concurrentes
• Se necesita una relación (F(e), <) tal que:
– a Y b si y sólo si F(a) < F(b)
– Los relojes vectoriales permiten representar de forma precisa
la relación de causalidad potencial
Relojes vectoriales
• Desarrollado independientemente por Fidge, Mattern y Schmuck
• Todo proceso lleva asociado un vector de enteros RV
• RVi[a] es el valor del reloj vectorial del proceso i cuando
ejecuta el evento a.
• Mantenimiento de los relojes vectoriales
– Inicialmente RVi= 0
– Cuando un proceso i genera un evento
• RVi[i ] = RVi[i ] +1
– Todos los mensajes llevan el RV del envío
– Cuando un proceso j recibe un mensaje con RV
• RVj = max(RVj , RV ) (componente a componente)
• RVj[j ] = RVj[j ] +1 (evento de recepción)
Relojes vectoriales
P0
(1,0,0) (2,1,0) (3,1,2) (4,1,2) (5,1,2)
(1,0,1) (1,0,2) (1,0,3) (1,0,4) (5,1,5)
(0,1,0)
(1,2,3)
(4,3,3)
P1
P2
Propiedades de los relojes vectoriales
• RV < RV´ si y solo si
– RV RV´ y
– RV[i ]  RV´[i ],  i
• Dados dos eventos a y b
– a precede a b si y solo si RV(a) < RV(b)
• Si a es un evento del proceso i y b es un evento del proceso j
(con i  j)
– a precede a b si y solo si RV(a)[i ]  RV(b)[i ]
• RV(a)[i ] = RV(b)[i ] cuando a es el evento de envío a j y b es
el evento de recepción.
– a y b son concurrentes si y solo si
• RV(a)[i ] > RV(b)[i ] y RV(b )[j ] > RV(b)[j ]

Exclusión mutua distribuida
• Los procesos ejecutan el siguiente fragmento de código
entrada()
SECCIÓN CRÍTICA
salida()
• Requisitos para resolver el problema de la sección crítica
– Exclusión mutua
– Progreso
– Espera acotada
• Algoritmos
– Algoritmo centralizado
– Algoritmo distribuido
– Anillo con testigo
Algoritmo centralizado
• Existe un proceso coordinador
0
entrada
OK
C
1 2
No hay respuespuesta
(bloquea al cliente)
0
entrada
C
1 2
OK
0
salida
C
1 2
Anillo con testigo
• Los procesos se ordenan conceptualmente como un anillo.
• Por el anillo circula un testigo.
• Cuando un proceso quiere entrar en la SC debe esperar a recoger
el testigo
• Cuando sale de la SC envía el testigo al nuevo proceso del anillo
2
1
testigo
3
4
5
6
Algoritmo distribuido
• Algoritmo de Ricart y Agrawala requiere la existencia un orden
total de todos los mensajes en el sistema
• Un proceso que quiere entrar en una sección crítica (SC) envía
un mensaje a todos los procesos (y a él mismo)
• Cuando un proceso recibe un mensaje
– Si el receptor no está en la SC ni quiere entrar envía OK al
emisor
– Si el receptor ya está en la SC no responde
– Si el receptor desea entrar, compara la marca de tiempo del
mensaje. Si el mensaje tiene una marca menor envía OK. En
caso contrario entra y no envía nada.
• Cuando un proceso recibe todos los mensajes puede entrar
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Modelos de sistema
• Conjunto de estaciones de trabajo
– El sistema consta de estaciones de trabajo a las que tienen
acceso los usuarios.
• Pool de procesadores
– Los usuarios con terminales.
– Los procesos se envían a procesadores de un pool.
• Modelo híbridos
– Trabajos interactivos en las estaciones de trabajo.
– Trabajos no interactivos en en el pool de procesadores.
Asignación de procesadores
• Objetivo: decidir en qué procesador se debería ejecutar un
proceso para equilibrar la carga y optimizar el rendimiento.
– Evitar que un nodo esté inactivo mientras hay procesos
esperando a ejecutar.
• Suposiciones:
– Todos los procesadores son compatible en el código.
– La velocidad de los procesadores puede ser distinta.
– Conectividad total: cualquier procesador puede comunicarse
con cualquier otro.
Estaciones de trabajo inactivas
• En entornos típicos con estaciones de trabajo se desperdicia
cerca del 80% de ciclos totales de CPU.
• Uso de estaciones de trabajo inactivas:
– Ejecutar procesos de forma totalmente transparente en
máquinas remotas que se encuentran inactivas .
– Los usuarios de las estaciones de trabajo inactivas no
deberían observar una degradación del rendimiento como
consecuencia de la ejecución de procesos remotos.
Empleo de estaciones de trabajo inactivas
• ¿Qué es una estación de trabajo inactiva?
– Una que lleva varios minutos sin recibir entrada del teclado o
ratón y que no está ejecutando procesos interactivos.
• ¿Cómo localizar estaciones inactivas?
– Dirigidas por el servidor: la estación inactiva anuncia su
disponibilidad.
– Dirigida por el cliente: un cliente envía un mensaje al resto
para localizar una estación inactiva.
Estrategias para localizar una estación inactiva
Nodo Nodo
Tengo poca carga.
Podéis mandarme procesos
Tengo mucha carga.
Busco estación inactiva
(a) (b)
Algoritmos de distribución de la carga
• Política de transferencia: determina cuando transferir.
• Política de selección: selecciona el proceso a transferir.
• Política de ubicación: selecciona el nodo al que transferir.
• Política de información: decide cuándo, desde dónde y qué
información sobre otros nodos recoger.
Planificación de procesos en sistemas distribuidos
• Definición del problema:
– Dado un conjunto de tareas con ciertas restricciones de
precedencia y requisitos de cálculo y comunicación,
– Dado un conjunto de procesadores conectados por una red de
interconexión,
– Encontrar la asignación de tareas a procesadores y el orden
de ejecución con el objetivo de minimizar el tiempo de
ejecución total.
Planificación de procesos
Complejidad del problema
• El problema en su forma general es NP-completo
• Algoritmos con complejidad polinomial:
– Cuando sólo hay dos procesadores.
• En el caso general se utilizan heurísticas.
• Los planificadores se eligen por 2 métricas:
– El rendimiento del plan generado.
– La eficacia del planificador: tiempo tomado por el
planificador para generar un plan.
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Sistema de archivos distribuido
• Objetivo principal: compartir datos entre usuarios ofreciendo
transparencia
• Objetivos secundarios:
– rendimiento (debería ser comparable al de un sistema
tradicional)
– tolerancia a fallos
– disponibilidad
Arquitectura
Cliente
Servidor Servidor
Cliente
RED DE INTERCONEXIÓN
......................
......................
........ ........CTR
.....
CTR
.....
CTR
.....
CTR
.....
Componentes
• Servicio de directorio:
– Gestión de los nombres de los archivos
– Objetivo: ofrecer un espacio de nombres único
• Servicio de archivos:
– Proporciona acceso a los datos de los archivos
Métodos de accesos remotos
• Modelo carga/descarga
– Transferencias completas del fichero
– Localmente se almacenan en memoria o discos locales
– Normalmente utilizan semántica de sesión
– Eficiencia en las transferencias
– Llamada open con mucha latencia
– Múltiples copias de un fichero
• Modelo de servicios remotos
– El servidor debe proporcionar todas las operaciones sobre el fichero.
– Acceso por bloques
– Modelo cliente/servidor
• Empleo de cache en el cliente
– Combina los dos modelos anteriores.
Tipos de servidores
• Servidores con estado
– Cuando se abre un fichero, el servidor almacena información
y da al cliente un identificador único a utilizar en las
posteriores llamadas
– Cuando se cierra un fichero se libera la información
• Servidores sin estado
– Cada petición es autocontenida (fichero y posición)
Tipos de servidores II
• Ventajas de los servidores con estado
– Mensajes de petición más cortos
– Mejor rendimiento (se mantiene información en memoria)
– Facilita la lectura adelantada. El servidor puede analizar el
patrón de accesos que realiza cada cliente
– Es necesario en invalidaciones iniciadas por el servidor
• Ventajas de los servidores sin estado
– Más tolerante a fallos
– No son necesarios open y close. Se reduce el nº de mensajes
– No se gasta memoria en el servidor para almacenar el estado
Cache de bloques
• El empleo de cache de bloques permite mejorar el rendimiento
– Explota el principio de proximidad de referencias
• Proximidad temporal
• Proximidad espacial
– Lecturas adelantadas
• Mejora el rendimiento de las operaciones de lectura, sobre todo
si son secuenciales
– Escrituras diferidas
• Mejora el rendimiento de las escrituras
• Otros tipos de cache
– Cache de nombres
– Cache de metadatos del sistema de ficheros
Localización de las cache en un SFD
• Cache en los servidores
– Reducen los accesos a disco
• Cache en los clientes
– Reducen el tráfico por la red
– Reducen la carga en los servidores
– Mejora la capacidad de crecimiento
– Dos posibles localizaciones
• En discos locales
– Más capacidad,
– Más lento
– No volátil, facilita la recuperación
• En memoria principal
– Menor capacidad
– Más rápido
– Memoria volátil
Tamaño de la unidad de cache
• Mayor tamaño puede incrementar la tasa de aciertos y mejorar la
utilización de la red pero
– Aumentan los problemas de coherencia
• Depende de las características de las aplicaciones
• En memoria cache grandes
– Es beneficioso emplear bloques grandes (8 KB y más)
• En memorias pequeñas
– El uso de bloques grandes es menos adecuado
Políticas de actualización
• Escritura inmediata (write-through)
– Buena fiabilidad
– En escrituras se obtiene el mismo rendimiento que en el
modelo de accesos remotos
– Las escrituras son más lentas
• Escritura diferida (write-back)
– Escrituras más rápidas. Se reduce el tráfico en la red
– Los datos pueden borrarse antes de ser enviados al servidor
– Alternativas
• Volcado (flush) periódico (Sprite)
• Write-on-close
Problema de la coherencia de cache
• El uso de cache en los clientes de un sistema de ficheros
introduce el problema de la coherencia de cache:
– Múltiples copias.
• El problema surge cuando se coutiliza un fichero en escritura:
– Coutilización en escritura secuencial
• Típico en entornos y aplicaciones distribuidas.
– Coutilización en escritura concurrente
• Típico en aplicaciones paralelas.
Soluciones al problema de la coherencia
• No emplear cache en los clientes.
– Solución trivial que no permite explotar las ventajas del uso de
cache en los clientes (reutilización, lectura adelantada y escritura
diferida)
• No utilizar cache en los clientes para datos compartidos en escritura
(Sprite).
– Accesos remotos sobre una única copia asegura semántica UNIX
• Mecanismos de cache sin replicación de datos
– Basado en esquemas cooperativos que definen un único espacio
global formado por la unión de todas las cache del sistema.
– Los datos fluyen a través de las caches sin replicación
• Empleo de protocolos de coherencia de cache
Contenido
• Sistemas distribuidos
• Sistemas operativos distribuidos
• Comunicación de procesos
• Sincronización de procesos
• Gestión de procesos
• Sistemas de archivos
• Gestión de memoria
Uso de paginadores externos
Paginador externo
Mensajes
Transferir página
Fallos de página
Espacio de
direcciones
del proceso
Nodo A
Núcleo
Nodo B
Núcleo
Memoria compartida distribuida
Memoria
física
Nodo A
proceso
Memoria
física
Nodo B
proceso
Memoria
física
Nodo C
proceso
Red de interconexión
Memoria compartida distribuida
Características
• Se construye utilizando paso de mensajes.
• Modelo de programación más sencillo, no es necesario el paso
de mensajes.
• Sincronización utilizando construcciones tradicionales
(semáforos, mutex, ...).
• ¿Rendimiento?
– Los accesos a memoria no son siempre locales
• Modelos:
– Basado en hardware (arquitectura NUMA).
– Basado en páginas.
– Basado en objetos
Implementación
• Replicación y caching (igual que los sistemas de ficheros)
• Las escrituras se realizan localmente
• Aparece un problema en el acceso a variables compartidas (en
escritura).
• Problema idéntico a la coherencia de cache

More Related Content

What's hot

Switch & Routing 1ra parte
Switch & Routing 1ra parteSwitch & Routing 1ra parte
Switch & Routing 1ra partejfsantiagor
 
SWITCHING + ROUTING primera parte
SWITCHING + ROUTING primera parteSWITCHING + ROUTING primera parte
SWITCHING + ROUTING primera partejfsantiagor
 
Modelo osi, protocolo y componentes de red
Modelo osi, protocolo y componentes de redModelo osi, protocolo y componentes de red
Modelo osi, protocolo y componentes de redOlibetArangureb
 
Subtema tres
Subtema tresSubtema tres
Subtema tresamerica
 
Estructura de internet redes lan man y wan
Estructura de internet redes lan man y wanEstructura de internet redes lan man y wan
Estructura de internet redes lan man y wanVeronika Mean
 
Pdf redes de_computadoras_e_internet
Pdf redes de_computadoras_e_internetPdf redes de_computadoras_e_internet
Pdf redes de_computadoras_e_internetLuis Chavez A
 
Fundamentos de redes
Fundamentos de redesFundamentos de redes
Fundamentos de redesMichelle628
 
Fundamentos de-redes 2
Fundamentos de-redes 2Fundamentos de-redes 2
Fundamentos de-redes 2Ingrid7j
 
Servidores
ServidoresServidores
ServidoresHack '
 
Red de computadoras 2
Red de computadoras 2Red de computadoras 2
Red de computadoras 2henryponce01
 
Presentacion redes e internet
Presentacion redes e internetPresentacion redes e internet
Presentacion redes e internetJose Bustamante
 

What's hot (18)

Arquitectura de redes
Arquitectura de redesArquitectura de redes
Arquitectura de redes
 
Switch & Routing 1ra parte
Switch & Routing 1ra parteSwitch & Routing 1ra parte
Switch & Routing 1ra parte
 
SWITCHING + ROUTING primera parte
SWITCHING + ROUTING primera parteSWITCHING + ROUTING primera parte
SWITCHING + ROUTING primera parte
 
Modelo osi. prot. comp.
Modelo osi. prot. comp.Modelo osi. prot. comp.
Modelo osi. prot. comp.
 
Modelo osi, protocolo y componentes de red
Modelo osi, protocolo y componentes de redModelo osi, protocolo y componentes de red
Modelo osi, protocolo y componentes de red
 
Interconectividad de redes
Interconectividad de  redesInterconectividad de  redes
Interconectividad de redes
 
Subtema tres
Subtema tresSubtema tres
Subtema tres
 
Estructura de internet redes lan man y wan
Estructura de internet redes lan man y wanEstructura de internet redes lan man y wan
Estructura de internet redes lan man y wan
 
Pdf redes de_computadoras_e_internet
Pdf redes de_computadoras_e_internetPdf redes de_computadoras_e_internet
Pdf redes de_computadoras_e_internet
 
Redes internet
Redes internetRedes internet
Redes internet
 
Fundamentos de redes
Fundamentos de redesFundamentos de redes
Fundamentos de redes
 
Fundamentos de-redes 2
Fundamentos de-redes 2Fundamentos de-redes 2
Fundamentos de-redes 2
 
Rjma
RjmaRjma
Rjma
 
Servidores
ServidoresServidores
Servidores
 
Redes
RedesRedes
Redes
 
Redes 1
Redes 1Redes 1
Redes 1
 
Red de computadoras 2
Red de computadoras 2Red de computadoras 2
Red de computadoras 2
 
Presentacion redes e internet
Presentacion redes e internetPresentacion redes e internet
Presentacion redes e internet
 

Similar to Sistemas distribuidosz (20)

Sistemas_Operativos_Distribuidos
Sistemas_Operativos_DistribuidosSistemas_Operativos_Distribuidos
Sistemas_Operativos_Distribuidos
 
Sistemas operativos de red
Sistemas operativos de redSistemas operativos de red
Sistemas operativos de red
 
Apuntes de clase de manejo de CISCO.pptx
Apuntes de clase de manejo de CISCO.pptxApuntes de clase de manejo de CISCO.pptx
Apuntes de clase de manejo de CISCO.pptx
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 
Presentación Grupo 2
Presentación Grupo 2 Presentación Grupo 2
Presentación Grupo 2
 
Libro so
Libro soLibro so
Libro so
 
QoS en Redes Corporativas
QoS en Redes CorporativasQoS en Redes Corporativas
QoS en Redes Corporativas
 
Internet
InternetInternet
Internet
 
Redes
RedesRedes
Redes
 
introduccion redes2022.pdf
introduccion redes2022.pdfintroduccion redes2022.pdf
introduccion redes2022.pdf
 
Capítulo 3
Capítulo 3Capítulo 3
Capítulo 3
 
Modelo OSI
Modelo OSIModelo OSI
Modelo OSI
 
Modelo osi
Modelo osiModelo osi
Modelo osi
 
Redes franz mnedoza
Redes franz mnedozaRedes franz mnedoza
Redes franz mnedoza
 
Trabajo 5(redes informaticas)
Trabajo 5(redes informaticas)Trabajo 5(redes informaticas)
Trabajo 5(redes informaticas)
 
Trabajo 5(redes informaticas)
Trabajo 5(redes informaticas)Trabajo 5(redes informaticas)
Trabajo 5(redes informaticas)
 
Capítulo 8 español....
Capítulo 8 español....Capítulo 8 español....
Capítulo 8 español....
 
Modelo osi
Modelo osiModelo osi
Modelo osi
 
Redes internet
Redes internetRedes internet
Redes internet
 
Redes internet
Redes internetRedes internet
Redes internet
 

More from Johanna Mesa Torres (20)

Field bus fundationsz
Field bus fundationszField bus fundationsz
Field bus fundationsz
 
Diseño hmiz
Diseño hmizDiseño hmiz
Diseño hmiz
 
Comunicaciones indz
Comunicaciones indzComunicaciones indz
Comunicaciones indz
 
Captura de datos
Captura de datosCaptura de datos
Captura de datos
 
Twido guide materiel bases compactes & modulaires
Twido guide materiel   bases compactes & modulairesTwido guide materiel   bases compactes & modulaires
Twido guide materiel bases compactes & modulaires
 
Twido guide materiel base extreme
Twido guide materiel   base extremeTwido guide materiel   base extreme
Twido guide materiel base extreme
 
Twido guide de programmation
Twido guide de programmationTwido guide de programmation
Twido guide de programmation
 
Twido hw guide tm2 discrete io modules
Twido hw guide   tm2 discrete io modulesTwido hw guide   tm2 discrete io modules
Twido hw guide tm2 discrete io modules
 
Twido hw guide twd analog io modules
Twido hw guide   twd analog io modulesTwido hw guide   twd analog io modules
Twido hw guide twd analog io modules
 
Twido programming guide
Twido programming guideTwido programming guide
Twido programming guide
 
Twido hw guide tm2 analog io modules
Twido hw guide   tm2 analog io modulesTwido hw guide   tm2 analog io modules
Twido hw guide tm2 analog io modules
 
Twido hw guide modular & compact bases
Twido hw guide   modular & compact basesTwido hw guide   modular & compact bases
Twido hw guide modular & compact bases
 
Twido hw guide extreme base
Twido hw guide   extreme baseTwido hw guide   extreme base
Twido hw guide extreme base
 
Twido hw guide communication modules
Twido hw guide   communication modulesTwido hw guide   communication modules
Twido hw guide communication modules
 
Twido hw guide twd discrete io modules
Twido hw guide   twd discrete io modulesTwido hw guide   twd discrete io modules
Twido hw guide twd discrete io modules
 
10728
1072810728
10728
 
P1 09a
P1 09aP1 09a
P1 09a
 
R73657
R73657R73657
R73657
 
Bh lvfbkpfeeat6u
Bh lvfbkpfeeat6uBh lvfbkpfeeat6u
Bh lvfbkpfeeat6u
 
Wyntk leucemia web
Wyntk leucemia webWyntk leucemia web
Wyntk leucemia web
 

Recently uploaded

TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfNataliaMalky1
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptAlberto Rubio
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfEDILIAGAMBOA
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicaGianninaValeskaContr
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 

Recently uploaded (20)

TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdf
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básica
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 

Sistemas distribuidosz

  • 1. Ingeniería Electromecánica Sistemas de Supervisión y Control Introducción a los sistemas distribuidos
  • 2. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 3. Conceptos previos • Un programa es un conjunto de instrucciones. • Un proceso es un programa en ejecución. • Una red de computadores es un conjunto de computadores conectados por una red de interconexión. • Un sistema distribuido (SD) – Modelo físico: conjunto de nodos (procesadores sin memoria ni reloj común) conectados por una red. – Modelo lógico: conjunto de procesos que ejecutan concurrentemente en uno o más computadores que colaboran y comunican intercambiando mensajes. • Un protocolo es un conjunto de reglas e instrucciones que gobiernan la comunicación en un sistema distribuido, es decir, el intercambio de mensajes.
  • 4. Características • Compartir recursos (HW, SW, datos). – Acceso a recursos remotos. • Modelo cliente-servidor • Modelo basado en objetos • Ofrecen una buena relación coste/rendimiento • Capacidad de crecimiento • Tolerancia a fallos, disponibilidad – Replicación • Concurrencia • Velocidad – Paralelismo
  • 5. Desventajas • Necesidad de software más complejo • Problemas de fiabilidad • Problemas de seguridad y confidencialidad
  • 6. Arquitectura de un sistema distribuido Red de interconexión
  • 7. Redes e interconexión • Paquete: tipo de mensaje que se intercambia entre dos dispositivos de comunicación. – Tamaño limitado por el hardware • Mensaje: objeto lógico que se intercambian entre dos o más procesos. – Su tamaño puede ser bastante grande. – Un mensaje se descompone en paquetes. • Subsistema de comunicación: conjunto de componentes HW y SW que proporcionan servicios de comunicación en un sistema distribuido. • Protocolo: conjunto de reglas e instrucciones que gobiernan el intercambio de paquetes y mensajes
  • 8. Propiedades de un subsistema de comunicación • Tasa de transferencia: velocidad de transferencia • Latencia: tiempo necesario para transferir un mensaje vacío • Tiempo de transferencia = latencia + tamaño/tasa de trasferencia • Paquetes/segundo • Capacidad de crecimiento. Aumento en el nº de nodos • Calidad de servicio – Importante en aplicaciones multimedia y de tiempo real • Fiabilidad del subsistema – Mecanismos de detección de errores • Seguridad: protección de los paquetes • Confidencialidad: proteger la identidad de los emisores
  • 9. Tipos de redes de computadores • Redes de área local (LAN, Local Area Network) – Redes que enlazan sistemas cercanos – Posibilidad de difusión de mensajes (broadcast) • Redes de área extensa (WAN, Wide Area Network) – Poco ancho de banda (20-500 Kbps) – Bajas latencias – Redes telefónicas, redes públicas de datos, fiabra óptica RDSI, B-RDSI, ATM • Nuevos desarrollos en telecomunicaciones (ATM y RDSI) – Diferencias entre LAN y WAN cada vez más borrosas
  • 10. Protocolos de comunicación • Protocolo: conjunto de reglas y formatos que permiten la comunicación entre procesos. • La definición de un protocolo tiene dos parte: – Especificación de la secuencia de mensajes que deben intercambiarse. – Especificación del formato de mensajes. • El software de red se organiza en niveles
  • 11. Funciones de una pila de protocolos • Segmentación y ensamblado de mensajes • Encapsulado: incorporación de información de control a los datos – Dirección del emisor y receptor – Código de detección de errores • Control de conexión – Protocolos orientados a conexión – Protocolos no orientados a conexión: • No se asegura el orden secuencial de los datos transmitidos • Entrega ordenada en protocolos orientados a conexión – Números de secuencia
  • 12. Funciones de una pila de protocolos II • Control de flujo: función realizada en el receptor para limitar la cantidad o tasa de datos que envía el emisor. • Control de errores: se basan en el uso de una secuencia de comprobación y reenvío. • Direccionamiento, conseguir que los mensajes alcancen al receptor • Multiplexación: necesario para un uso más eficiente de los servicios • Servicios de transmisión: – Prioridad – Calidad de servicio – Seguridad
  • 13. Ejemplos de protocolos • Protocolos internet: – Originados por el trabajo de DARPA en los 70 – Muy utilizados en la actualidad – Gran crecimiento durante los 90 debido al uso del Web • Protocolos OSI (open system interconection) – Estándar desarrollado por ISO • Estándares propietarios – SNA de IBM (años 70) – DECnet desarrollado por DEC – NetWare: red de Novell para redes de PC
  • 14. Protocolos TCP/IP • Resultado de la investigación y desarrollo llevados a cabo en la red ARPANET (financiada por DARPA) en los años 70 • Familia de protocolos utilizados en Internet • En los 90 se ha establecido como la arquitectura comercial dominante: – Se especificaron y utilizaron antes de OSI – Independiente de la tecnología de red utilizada – Internet está construida sobre un conjunto de protocolos TCP/IP. – Espectacular desarrollo de World Wide Web
  • 16. Protocolo Internet (nivel IP) • La transmisión no es fiable (no se asegura la recepción de los paquetes IP). Los paquetes se pueden descartar por: – Expiración del tiempo de vida – Congestión – Error en la suma de comprobación • Control de flujo muy limitado • Calidad de servicio muy limitado – Seguridad: normal o alto – Retardo: normal o bajo – Rendimiento: normal o alto
  • 17. Protocolos de transporte • Protocolo TCP – Orientado a conexión – Garantiza que los datos se entregan en el orden en el que se envían – Las conexiones TCP se ven como un flujo de bytes – La transmisión se considera “fiable”. Pueden perderse mensajes (sobrecarga en la red, fallos en encaminadores, etc.) – Cuando los mensajes son muy pequeños, TCP los retrasa hasta conseguir uno más grande • Esta opción debe desactivarse si es necesario – Escrituras concurrentes sobre una misma conexión TCP pueden provocar que los datos se entremezclen.
  • 18. Protocolos de transporte • Protocolo UDP – Protocolo de datagramas no orientado a conexión. – Protocolo no fiable • Los paquetes se pueden perder, duplicar, recibir en orden distinto al enviado – Tamaño máximo del mensaje: 64 KB
  • 19. Encaminamiento • Permite que los paquetes viajen del proceso emisor al receptor. • Algoritmo: – Un programa de aplicación genera un paquete, o bien se lee un paquete de la interfaz de red. – Si el paquete es para la máquina, se acepta. – En caso contrario, se incrementa el contador de saltos, si se excede el máximo, el paquete se descarta. – Si el paquete no es para la máquina se busca en la tabla de encaminamiento y se retransmite a la interfaz adecuada. • Tablas estáticas, las más utilizadas • Tablas dinámicas
  • 20. Papel del sistema operativo • El SW de comunicación de un sistema operativo se organiza como un conjunto de componentes con tareas concretas – Subsistema de almacenamiento: buffers donde almacenar los paquetes que llegan y se envían (limitado) • En implementaciones UNIX típicas – TCP reserva para cada puerto (socket) un buffer de 8 KB y UDP 2 buffers de 8KB. El tamaño se puede incrementar hasta 64 KB. – Los mensajes a enviar se copian a estos buffers – El contenido de estos buffers se fragmenta y se copian a nuevos bloques de memoria a utilizar por IP – IP envía finalmente los paquetes por la interfaz de red correspondiente
  • 21. Papel del sistema operativo • Un sistema operativo puede perder paquetes cuando la tasa de envíos y de recepción es muy grande. • En sistemas operativos multiusuario la pérdida de paquetes suele producirse a ráfagas debido a los algoritmos de planificación. • La latencia del SO ha crecido en términos relativos 0 5 10 15 20 25 30 35 40 1985-1990 1990-1995 1995-2000 2000-20005
  • 22. ¿Dónde se pierde el tiempo? • Códigos de corrección (Checksum) – Sobre datos TCP y UDP – Sobre cabeceras IP • Copias de datos – Entre usuario y kernel • Estructura de datos – Gestión de los buffers, colas de defragmentación de paquetes IP, • Sistema Operativo – Sobrecarga impuesta por las operaciones del SO
  • 23. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 24. Sistema operativo en red (SOR) • El usuario ve un conjunto de máquinas independientes – No hay transparencia • Se debe acceder de forma explícita a los recursos de otras máquinas • Difíciles de utilizar para desarrollar aplicaciones distribuidas Sistema operativo Lenguajes de programación Aplicaciones Red de interconexión Hardware Sistema operativo Lenguajes de programación Aplicaciones Hardware
  • 25. Sistema operativo distribuido (SOD) • Se comporta como un SO único (visión única) – Distribución. Transparencia • Se construyen normalmente como micronúcleos que ofrecen servicios básicos de comunicación – Mach, Amoeba, Chorus. • Todos los computadores deben ejecutar el mismo SOD Sistema operativo distribuido Lenguajes de programación Aplicaciones Red de interconexión Hardware Hardware
  • 26. Transparencia • Acceso: acceso a recursos remotos y locales de igual forma • Posición: acceso a los recursos sin necesidad de conocer su situación • Concurrencia: acceso concurrente a recursos compartidos sin interferencias • Replicación: Acceso a recursos replicados sin conocimiento de que lo son • Fallos: mantenimiento del servicio en presencia de fallos. • Migración: permite que los recursos y objetos se muevan sin afectar a la operación de los programas. • Capacidad de crecimiento: facilidad para crecer sin afectar a la estructura del sistema
  • 27. Middleware y entornos distribuidos • Servicios y protocolos estándarizados: Sistemas abiertos • Ofrecen servicios no incluidos en el SO (servicios de ficheros distribuidos, servicios de nombres, ...) • Facilitan el desarrollo de aplicaciones distribuidas • Independientes del HW y del SO subyacente. • DCE, CORBA, DCOM, Legion, Globe, Globus Sistema operativo Middleware Lenguajes de programación Aplicaciones Red de interconexión Hardware Sistema operativo Hardware
  • 28. Servicios de un sistema operativo distribuido • Servicios de comunicación • Servicios de sincronización • Gestión distribuida de procesos • Sistemas de archivos distribuidos • Memoria compartida distribuida
  • 29. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 30. Comunicación en sistemas distribuidos • La comunicación de procesos es fundamental en cualquier sistema distribuido • Existen diferentes posibilidades todas ellas basadas en el paso de mensajes – Mecanismos de bajo nivel, el programador debe preocuparse de establecer los protocolos de comunicación, representación de datos, etc. • Colas de mensajes • Sockets – Mecanismo de alto nivel, ofrecen abstracciones donde el programador no debe preocuparse de establecer protocolos • Llamadas a procedimientos remotos • Invocación de métodos remotos (entornos orientados a objetos)
  • 31. Comunicación cliente-sevidor • Protocolo típico: petición-respuesta • Muy utilizada en entornos distribuidos (más del 90% de los sistemas distribuidos utilizan la arquitectura cliente-servidor) NÚCLEO cliente petcición respuesta servidor Máquina A Máquina B NÚCLEO RED
  • 32. Comunicación de grupos • Utiliza mensajes multicast • Útil para: – Ofrecer tolerancia a fallos basado en servicios replicados – Localizar objetos en sistemas distribuidos – Mejor rendimiento mediante datos replicados – Actualizaciones múltiples – Operaciones colectivas en cálculo paralelo
  • 33. Sockets • Aparecieron en 1981 en UNIX BSD 4.2 – Intento de incluir TCP/IP en UNIX – Diseño independiente del protocolo de comunicación • Un socket es punto final de comunicación (dirección IP y puerto) • Abstracción que: – Ofrece interfaz de acceso a los servicios de red en el nivel de transporte • Protocolo TCP • Protocolo UDP – Representa un extremo de una comunicación bidireccional con una dirección asociada
  • 34. Sockets: introducción • Sujetos a proceso de estandarización dentro de POSIX (POSIX 1003.1g) • Actualmente – Disponibles en casi todos los sistemas UNIX – En prácticamente todos los sistemas operativos • WinSock: API de sockets de Windows – En Java como clase nativa
  • 35. Sockets UNIX • Dominios de comunicación • Tipos de sockets • Direcciones de sockets • Creación de un socket • Asignación de direcciones • Solicitud de conexión • Preparar para aceptar conexiones • Aceptar una conexión • Transferencia de datos
  • 36. Dominios de comunicación • Un dominio representa una familia de protocolos • Un socket está asociado a un dominio desde su creación • Sólo se pueden comunicar sockets del mismo dominio • Algunos ejemplos: – PF_UNIX (o PF_LOCAL): comunicación dentro de una máquina – PF_INET: comunicación usando protocolos TCP/IP • Los servicios de sockets son independientes del dominio
  • 37. Tipos de sockets • Stream (SOCK_STREAM) – Orientado a conexión – Fiable, se asegura el orden de entrega de mensajes – No mantiene separación entre mensajes – Si PF_INET se corresponde con el protocolo TCP • Datagrama (SOCK_DGRAM) – Sin conexión – No fiable, no se asegura el orden en la entrega – Mantiene la separación entre mensajes – Si PF_INET se corresponde con el protocolo UDP • Raw (SOCK_RAW) – Permite el acceso a los protocolos internos como IP
  • 38. Direcciones de sockets • Cada socket debe tener asignada una dirección única • Las direcciones se usan para: – Asignar una dirección local a un socket (bind) – Especificar una dirección remota (connect o sendto) • Dependientes del dominio • Se utiliza la estructura genérica struct sockaddr • Cada dominio usa una estructura específica – Direcciones en PF_UNIX (struct sockaddr_un) • Nombre de fichero – Direcciones en PF_UNIX (struct sockaddr_in) – Uso de conversión de tipos (casting) en las llamadas
  • 39. Direcciones de sockets en PF_INET • Host (32 bits) + puerto (16 bits) • Una dirección IP se almacena en una estructura de tipo: – struct in_addr • Estructura struct sockaddr_in – Debe iniciarse a 0 – sin_family: dominio (AF_INET) – sin_port: puerto – sin_addr: dirección del host • Función que facilita el nombre de la máquina en la que se ejecuta: int gethostname(char *name, int namelen);
  • 40. Obtención de la dirección de host • Usuarios manejan direcciones en forma de texto: – decimal-punto: 138.100.8.100 – dominio-punto: laurel.datsi.fi.upm.es • Algunas funciones para trabajar con direcciones: – char *inet_ntoa(struct in_addr in); • Devuelve una dirección en notación decimal-punto. – struct hostent *gethostbyname(char *str); • Convierte una dirección en notación dominio-punto a una estructura que describe máquina. • Algunos campos de la estructura struct hostent: – char *name nombre oficial de la máquina – char **h_addr_list lista de direcciones
  • 41. Ejemplo • Programa que obtiene la dirección en formato decimal-punto a partir de un formato dominio-punto. void main(int argc, char **argv) { struct hostent *hp; struct in_addr in; hp = gethostbyname(argv[1]); if (hp == NULL) { printf(“Error en gethostbynamen”); exit(0); } memcpy(&in.s_addr,*(hp->h_addr_list),sizeof(in.s_addr)); printf(“%s es %sn”, hp->h_name, inet_ntoa(in)); }
  • 42. Direcciones de sockets II • En TCP/IP los números se emplean con formato big-endian. • En computadores que no utilicen este formato es necesario emplear funciones para traducir números entre el formato que utiliza TCP/IP y el empleado por el propio computador: u_long htonl (u_long hostlong) u_short htons (u_short hostshort) u_long ntohl (u_long netlong) u_short ntohs (u_short netshort) • Las primera traduce un número de 32 bits representado en el formato del computador al formato de red (TCP/IP).
  • 43. Creación de un socket • int socket(int dominio, int tipo, int protocolo) – Crea un socket devolviendo un descriptor de fichero – dominio: PF_XXX – tipo: SOCK_XXX – protocolo: dependiente del dominio y tipo • 0 elige el más adeucado • Especificados en /etc/protocols • El socket creado no tiene dirección asignada
  • 44. Asignación de direcciones • int bind(int sd, struct sockaddr *dir, int long) – sd: descriptor devuelto por socket – dir: dirección a asignar – long: longitud de la dirección • Si no se asigna dirección (típico en clientes) – Se le asigna automáticamente (puerto efímero) en la su primera utilización (connect o sendto) • Direcciones en dominio PF_INET – Puertos en rango 0..65535. Reservados: 0..1023. Si 0, el sistema elige uno – Host: una dirección local IP • INNADDR_ANY: elige cualquiera de la máquina • El espacio de puertos para streams y datagramas es indendiente
  • 45. Solicitud de conexión • Realizada en el cliente • int connect(int sd, struct sockaddr *dir, int long) – sd: descriptor devuelto por socket – dir: dirección del socket remoto – long: longitud de la dirección • Si el socket no tiene dirección asignada, se le asigna una automáticamente • Normalmente se usa con streams
  • 46. Preparar para aceptar conexiones • Realizada en el servidor stream después de socket y bind • int listen(int sd, int baklog) – sd: descriptor devuelto por socket – backlog: • Número máximo de peticiones pendientes de aceptar que se encolarán (algunos manuales recomiendan 5) • Hace que el socket quede preparado para aceptar conexiones.
  • 47. Aceptar una conexión • Realizada en el servidor stream después de socket, bind y listen • Cuando se produce la conexión, el servidor obtiene: – La dirección del socket del cliente – Un nuevo descriptor que queda conectado al socket del cliente • Después de la conexión quedan activos dos sockets en el servidor: – El original para aceptar nuevas conexiones – El nuevo para enviar/recibir datos por la conexión
  • 48. Aceptar una conexión • int accept(int sd, struct sockaddr *dir, int *long) – sd: descriptor devuelto por socket – dir: dirección del socket del cliente devuelta – long: parámetor valor-resultado • Antes de la llamada: tamaño de dir • Después de la llamada: tamaño de la dirección del cliente que se devuelve.
  • 49. Obtener la dirección de un socket • Obtener la dirección a partir del descriptor – int getsockname(int sd, struct sockaddr *dir, int *long) • sd: descriptor devuelto por socket • dir: dirección del socket devuelta • long: parámetro valor-resultado (igual que en accept) • Obtener la dirección del socket en el toro extremo de la conexión: – int gerpeername(int sd, struct sockaddr *dir, int *long) • sd: descriptor devuelto por socket • dir: dirección del socket remoto • long: parámetro valor-resultado
  • 50. Transferencia de datos con streams • Una vez realizada la conexión, ambos extremos puede transferir datos. • Envío: – int write(int sd, char *mem, int long); • Devuelve el nº de bytes enviados – También puede utilizarse el servicio send. • Recepción: – int read(int sd, char *mem, int long); • Devuelve el nº de bytes recibidos – También puede utilizarse el servicio recv • Es importante comprobar siempre el valor que devuelven estas llamadas: pueden no transferirse todos los datos.
  • 51. Transferencia de datos con streams II • Función que envía un bloque de datos con reintentos: int enviar(int socket, char *mensaje, int longitud) { int r; int l = longitud; do { r = write(socket, mensaje, l); l = l – r; mensaje = mensaje + r; } while ((l>0) && (r>=0)); if (r < 0) return (-1); /* fallo */ else return(0); }
  • 52. Transferencia de datos con datagramas • No hay conexión real • Para usar un socket para transferir basta con: – Crearlo: socket – Asignarle una dirección: bind (si no, lo hará el sistema) • Envío: – int sendto(int sd, char *men, int long, int flags, struct sockaddr *dir, int long) • Devuelve el nº de bytes enviados • dir: dirección del socket remoto y long la longitud • Rccepción: – int recvfrom(int sd, char *men, int long, int flags, struct sockaddr *dir, int long) • Devuelve el nº de bytes enviados • dir: dirección del socket remoto y long la longitud
  • 53. Cerrar un socket • Se usa close para cerrar ambos tipos de sockets • Si el socket es de tipo stream, close cierra la conexión en ambos sentidos • Se puede cerrar un único extremo: – int shutdown(int st, int modo) • sd: descriptor devuelto por socket • modo: SHUT_RD, SHUT_RW o SHUT_RDWR
  • 54. Configuración de opciones • Existen varios niveles dependiendo del protocolo afectado como parámetro – SOL_SOCKET: opciones independientes del protocolo – IPPROTO_TCP: nivel de protocolo TCP – IPPTOTO_IP: nivel de protocolo IP • Consultar opciones asociadas a un socket – int getsockopt(int sd, int nivel, int opc, char *val, int *long) • Modificar las opciones asociadas a un socket – int setsockopt(int sd, int nivel, int opc, char *val, int long) • Ejemplos (nivel SOL_SOCKET): – SO_REUSEADDR: permite reutilizar direcciones
  • 55. Escenario típico con sockets streams Proceso cliente Proceso servidor socket() socket() bind() listen() accept() Crear thread read() close() accept() connect() Abrir conexión read() close() Petición write() Respuesta write()
  • 56. Ejemplo (TCP) NÚCLEO cliente sumar(5,2) 5+2 Restulado = 7 servidor Máquina A Máquina B NÚCLEO RED
  • 57. Sistemas operativos: una visión aplicada 56 © J. Carretero, F. García, P. de Miguel, F. Pérez Servidor (TCP) void main(int argc, char *argv[]) { struct sockaddr_in server_addr, client_addr; int sd, sc; int size, val; int size; int num[2], res; sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); val = 1; setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *) &val, sizeof(int)); bzero((char *)&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = 4200; bind(sd, &server_addr, sizeof(server_addr));
  • 58. Servidor (TCP) listen(sd, 5); size = sizeof(client_addr); while (1) { printf("esperando conexionn"); sc = accept(sd, (struct sockaddr *)&client_addr,&size); read(sc, (char *) num, 2 *sizeof(int)); // recibe la petición res = num[0] + num[1]; write(sc, &res, sizeof(int)); // se envía el resultado close(sc); } close (sd); exit(0); }
  • 59. Cliente (TCP) void main(void) { int sd; struct sockaddr_in server_addr; struct hostent *hp; int num[2], res; sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); bzero((char *)&server_addr, sizeof(server_addr)); hp = gethostbyname ("arlo.datsi.fi.upm.es"); memcpy (&(server_addr.sin_addr), hp->h_addr, hp->h_length); server_addr.sin_family = AF_INET; server_addr.sin_port = 4200;
  • 60. Cliente (TCP) // se establece la conexión connect(sd, (struct sockaddr *) &server_addr, sizeof(server_addr)); num[0]=5; num[1]=2; write(sd, (char *) num, 2 *sizeof(int)); // envía la petición read(sd, &res, sizeof(int)); // recibe la respuesta printf("Resultado es %d n", res); close (sd); exit(0); }
  • 61. Servidor (datagramas) void main(void) { int num[2]; int s, res, clilen; struct sockaddr_in server_addr, client_addr; s = socket(AF_INET, SOCK_DGRAM, 0); bzero((char *)&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = 7200; bind(s, (struct sockaddr *)&server_addr, sizeof(server_addr));
  • 62. Servidor (datagramas) clilen = sizeof(client_addr); while (1) { recvfrom(s, (char *) num, 2* sizeof(int), 0, (struct sockaddr *)&client_addr, &clilen); res = num[0] + num[1]; sendto(s, (char *)&res, sizeof(int), 0, (struct sockaddr *)&client_addr, clilen); } }
  • 63. Cliente (datagramas) void main(int argc, char *argv[]){ struct sockaddr_in server_addr, client_addr; struct hostent *hp; int s, num[2], res; if (argc != 2){ printf("Uso: client <direccion_servidor> n"); exit(0); } s = socket(AF_INET, SOCK_DGRAM, 0); hp = gethostbyname (argv[1]); bzero((char *)&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; memcpy (&(server_addr.sin_addr), hp->h_addr, hp->h_length); server_addr.sin_port = 7200;
  • 64. Cliente (datagramas) bzero((char *)&client_addr, sizeof(client_addr)); client_addr.sin_family = AF_INET; client_addr.sin_addr.s_addr = INADDR_ANY; client_addr.sin_port = htons(0); bind (s, (struct sockaddr *)&client_addr, sizeof(client_addr)); num[0] = 2; num[1] = 5; sendto(s, (char *)num, 2 * sizeof(int), 0, (struct sockaddr *) &server_addr, sizeof(server_addr)); recvfrom(s, (char *)&res, sizeof(int), 0, NULL, NULL); printf("2 + 5 = %dn", res); close(s); }
  • 65. Llamadas a procedimientos remotos (RPC) • RPC (remote procedure call): llamadas a procedimiento remoto (Birrel y Nelson 1985) • Híbrido entre llamadas a procedimientos y paso de mensajes • Las RPC constituyen el núcleo de muchos sistemas distribuidos • Llegaron a su culminación con DCE (Distributed Computing Environment) • Han evolucionado hacia orientación a objetos – Invocación de métodos remotos (CORBA, RMI)
  • 66. Funcionamiento de las RPC • El proceso que realiza la llamada empaqueta los argumentos en un mensaje, se los envía a otro proceso y espera el resultado • El proceso que ejecuta el procedimiento extrae los argumentos del mensaje, realiza la llamada de forma local, obtiene el resultado y se lo envía de vuelta al proceso que realizó la llamada • Objetivo: acercar la semántica de las llamadas a procedimiento convencional a un entorno distribuido (transparencia).
  • 67. Llamadas y mensajes en una RPC SISTEMA CLIENTE CÓDIGO DE LA APLICACIÓN PREPARA ENTRADA CONVIERTE SALIDA INICIO LLAMADA suma(5,2) FIN LLAMADA = 7 RESGUARDO CLIENTE 2 1 5 3 PROCEDIMIENTOS EJECUTA PROCEDIMIENTO REMOTO SISTEMA SERVIDOR RESGUARDO SERVIDOR PREPARA SALIDA CONVIERTE ENTRADA 4 67
  • 68. Suplentes (stubs) • Se generan automáticamente por el software de RPC • En el cliente: – Localizan al servidor – Empaquetan los parámetros y construyen los mensajes – Envían el mensaje al servidor – Espera la recepción del mensaje y devuelven los resultados • En el servidor – Realizan tareas similares • Los suplentes son independientes de la implementación que se haga del cliente y del servidor. Sólo dependen de la interfaz.
  • 69. RPC: protocolo básico cliente servidor Desempaqueta la respuesta Se registra con un servicio de nombres recibe petición Ejecuta el procedimiento envía petición “enlaza con el servidor” prepara parámetros, envía petición
  • 70. Aspectos de diseño de las RPC • Lenguaje de definición de interfaces. Generador de suplentes. • Transferencia de parámetros • Enlace dinámico (binding) • Semántica de las RPC en presencia de fallos
  • 71. Lenguaje de definición de interfaces • Una interfaz especifica un nombre de servicio que utilizan los clientes y servidores • Nombres de procedimientos y parámetros (entrada y salida). • Los compiladores pueden diseñarse para que los clientes y servidores se escriban en lenguajes diferentes. • Tipos de RPC – Integrado con un lenguaje de programación (Cedar, Argus) – Lenguaje de definición de interfaces específico para describir las interfaces entre los clientes y los servidores (RPC de Sun y RPC de DCE)
  • 72. Transferencia de parámetros • Una de las funciones de los resguardos es empaquetar los parámetros en un mensaje: aplanamiento (marshalling) • Problemas en la representación de los datos – Servidor y cliente pueden ejecutar en máquinas con arquitecturas distintas – Transmisión con un formato estándar: • XDR (external data representation) es un estándar que define la representación de tipos de datos – El receptor se encarga de la conversión (CORBA). • Problemas con los punteros – Una dirección sólo tiene sentido en un espacio de direcciones
  • 73. Aplanamiento SISTEMA CLIENTE CÓDIGO DE LA APLICACIÓN RESGUARDO CLIENTE Procedimiento(”ABC”, 123, 12.34) aplanamiento mensaje Tira de bytes A B C 123 12.34 PROCEDIMIENTOS SISTEMA SERVIDOR RESGUARDO SERVIDOR Extrae los parámetros A B C 123 12.34 Procedimiento(”ABC”, 123, 12.34)
  • 74. Enlace dinámico (Binding) • Enlace dinámico: permite localizar objetos con nombre en un sistema distribuido, en concreto, servidores que ejecutan las RPC. • Tipos de enlace: – Enlace no persistente: la conexión entre el cliente y el servidor se establece en cada RPC. – Enlace persistente: la conexión se mantiene después de la primera RPC. • Útil en aplicaciones con muchas RPC repetidas • Problemas si lo servidores cambian de lugar
  • 75. Enlazador dinámico • Enlazador dinámico (binder): Es el servicio que mantiene una tabla de traducciones entre nombres de servicio y direcciones. Incluye funciones para: – Registrar un nombre de servicio – Eliminar un nombre de servicio – Buscar la dirección correspondiente a un nombre de servicio • Como localizar al enlazador dinámico: – Ejecuta en una dirección fija de un computador fijo. – El sistema operativo se encarga de indicar su dirección – Difundiendo un mensaje (broadcast) cuando los procesos comienzan su ejecución.
  • 76. Establecimiento de la comunicación en una RPC Servidor de nombres 1. Registrar procedimiento 5. Dar de baja procedimiento 2. Buscar servidor 3. Dirección del servidor 4. Ejecutar procedimiento servidor servidor Máquina A Máquina B Máquina C
  • 77. Semántica de las RPC en presencia de fallos • Problemas que pueden plantear las RPC – El cliente no es capaz de localizar al servidor – Se pierde el mensaje de petición del cliente al servidor – Se pierde el mensaje de respuesta del servidor al cliente – El servidor falla después de recibir una petición – El cliente falla después de enviar una petición
  • 78. Cliente no puede localizar al servidor • El servidor puede estar caído • El cliente puede estar usando una versión antigua del servidor • La versión ayuda a detectar accesos a copias obsoletas • Cómo indicar el error al cliente – Devolviendo un código de error (-1) • No es transparente – Ejemplo: sumar(a,b) – Elevando una excepción • Necesita un lenguaje que tenga excepciones
  • 79. Pérdida de mensajes del cliente • Es la más fácil de tratar • Se activa una alarma (timeout) después de enviar el mensaje • Si no se recibe una respuesta se retransmite
  • 80. Pérdidas en los mensajes de respuesta • Más difícil de tratar • Se pueden emplear alarmas y retransmisiones, pero: – ¿Se perdió la petición? – ¿Se perdió la respuesta? – ¿El servidor va lento? • Algunas operaciones pueden repetirse sin problemas (operaciones idempotentes) – Una transferencia bancaria no es idempotente • Solución con operaciones no idempotentes es descartar peticiones ya ejecutadas – Un nº de secuencia en el cliente – Un campo en el mensaje que indique si es una petición original o una retransmisión
  • 81. Fallos en los servidores • El servidor no ha llegado a ejecutar la operación – Se podría retransmitir • El servidor ha llegado a ejecutar la operación • El cliente no puede distinguir los dos • ¿Qué hacer? – No garantizar nada – Semántica al menos una vez • Reintentar y garantizar que la RPC se realiza al menos una vez • No vale para operaciones no idempotentes – Semántica a lo más una vez • No reintentar, puede que no se realice ni una sola vez – Semántica de exactamente una • Sería lo deseable
  • 82. Fallos en los clientes • La computación está activa pero ningún cliente espera los resultados (computación huérfana) – Gasto de ciclos de CPU – Si cliente rearranca y ejecuta de nuevo la RPC se pueden crear confusiones
  • 83. Aspectos de implementación • Protocolos RPC – Orientados a conexión • Fiabilidad se resuelve a bajo nivel, peor rendimiento – No orientados a conexión – Uso de un protocolo estándar o un específico • Algunos utilizan TCP o UDP como protocolos básicos
  • 84. Programación con un paquete de RPC • El programador debe proporcionar: – La definición de la interfaz (idl) • Nombres de las funciones • Parámetros que el cliente pasa al servidor • Resultados que devuelve el servidor al cliente – El código del cliente – El código del servidor • El compilador de idl proporciona: – El resguardo del cliente – El resguardo del servidor
  • 85. Programación con RPC COMPILADOR C COMPILADOR C COMPILADOR CCOMPILADOR C CABECERA CABECERAFICHEROS FUENTE DEL CLIENTE FICHEROS OBJETO DEL CLIENTE FICHEROS OBJETO DEL SERVIDOR EJECUTABLE DEL CLIENTE EJECUTABLE DEL SERVIDOR FICHEROS FUENTE DEL SERVIDOR OBJETO SUPLENTE EN CLIENTE OBJETO SUPLENTE EN SERVIDOR MONTADOR MONTADOR BIBLIOT. RPC BIBLIOT. RPC DESARROLLO DE LA INTERFAZ DESARROLLO DEL CLIENTE DESARROLLO DEL SERVIDOR COMPILADOR IDL SUPLENTE EN SERVIDOR SUPLENTE EN CLIENTE CABECERA FICHERO DE DEFINICIÓN DE INTERFAZ
  • 86. Ejemplos de paquetes de RPC • RPC de Sun (1990) utilizado en NFS • RPC del proyecto ANSA (1989) desarrollado por Architecture Project Management Ltd. (Cambridge, Inglaterra) • RPC de DCE (1990), estándar desarrollado por Open Software Foundation
  • 87. RPC de Sun • Utiliza como lenguaje de definición de interfaz XDR: – Una interfaz contiene un nº de programa y un nº de versión. – Cada procedimiento específica un nombre y un nº de procedimiento – Los procedimientos sólo aceptan un parámetro. – Los parámetros de salida se devuelven mediante un único resultado – El lenguaje ofrece una notación para definir: • constantes • definición de tipos • estructuras, uniones • programas
  • 88. RPC de Sun • rpcgen es el compilador de interfaces que genera: – Suplente del cliente – Suplente del servidor y procedimiento principal del servidor. – Procedimientos para el aplanamiento (marshalling) – Fichero de cabecera (.h) con los tipos y declaración de prototipos. • Enlace dinámico – El cliente debe especificar el host donde ejecuta el servidor – El servidor se registra (nº de programa, nº de versión y nº de puerto) en el portmapper local – El cliente envía una petición al portmapper del host donde ejecuta el servidor
  • 90. Esquema de la aplicación suma.x repcgen suma_svc.c servidor.c suma.h suma_xdr.c suma_clnt.c cliente.c Archivos para el cliente Archivos comunes Archivos para el servidor
  • 91. suma.x struct peticion { int a; int b; }; program SUMAR { version SUMAVER { int SUMA(peticion) = 1; } = 1; } = 99;
  • 92. suma.h #ifndef _SUMA_H_RPCGEN #define _SUMA_H_RPCGEN #include <rpc/rpc.h> struct peticion { int a; int b; }; #define SUMAVER ((u_long)99) #define SUMA ((u_long)1) extern int * suma_1(peticion *, CLIENT *); extern int * suma_1_svc(peticion *, struct svc_req *); #endif /* !_SUMA_H_RPCGEN */
  • 93. servidor.c #include "suma.h" int *suma_1_svc(peticion *argp, struct svc_req *rqstp) { static int result; result = argp->a + argp->b; return(&result); }
  • 94. cliente.c #include "suma.h" main( int argc, char* argv[] ) { CLIENT *clnt; int *res; peticion suma_1_arg; char *host; if(argc < 2) { printf("usage: %s server_hostn", argv[0]); exit(1); } host = argv[1];
  • 95. cliente.c II /* localiza al servidor */ clnt = clnt_create(host, SUMAR, SUMAVER, "udp"); if (clnt == NULL) { clnt_pcreateerror(host); exit(1); } suma_1_arg.a = 5; suma_1_arg.b = 2; res = suma_1(&suma_1_arg, clnt); if (res == NULL) { clnt_perror(clnt, "call failed:"); } printf("La suma es %dn", *res); clnt_destroy( clnt ); }
  • 96. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 97. Relojes lógicos • En ausencia de un reloj global la relación causa-efecto (precede a) es la única posibilidad de ordenar eventos • Relación de precedencia (Lamport) – Si a y b son dos eventos del mismo proceso y a ocurrió antes que b, entonces a Y b – Si a=send(m) y b=receive(m), entonces a Y b – La relación es transitiva • Dos eventos son concurrentes (a || b) si no se puede deducir entre ellos una relación de causalidad potencial
  • 98. Relojes lógicos (algoritmo de Lamport) • Útiles para ordenar eventos en ausencia de un reloj común. • Algoritmo de Lamport (1978) • Cada proceso P mantiene una variable entera RLp (reloj lógico) • Cuando un proceso P genera un evento, RLp=RLp+1 • Cuando un proceso envía un mensaje m a otro le añade el valor de su reloj • Cuando un proceso Q recibe un mensaje m con un valor de tiempo t, el proceso actualiza su reloj, RLq=max(RLq,t) • El algoritmo asegura que si a Y b entonces RL(a) < RL(b)
  • 99. Mantenimiento de los relojes lógicos
  • 100. Relojes lógicos totalmente ordenados • Los relojes lógicos de Lamport imponen sólo una relación de orden parcial: – Eventos de distintos procesos pueden tener asociado una misma marca de tiempo. • Se puede extender la relación de orden para conseguir una relación de orden total añadiendo el nº de proceso – (Ta, Pa): marca de tiempo del evento a del proceso P • (Ta, Pa) < (Tb, Pb) sí y solo si – Ta < Tb o – Ta=Tb y Pa<Pb
  • 101. Problemas de los relojes lógicos • No bastan para caracterizar la causalidad – Dados RL(a) y RL(b) no podemos saber: • si a precede a b • si b precede a a • si a y b son concurrentes • Se necesita una relación (F(e), <) tal que: – a Y b si y sólo si F(a) < F(b) – Los relojes vectoriales permiten representar de forma precisa la relación de causalidad potencial
  • 102. Relojes vectoriales • Desarrollado independientemente por Fidge, Mattern y Schmuck • Todo proceso lleva asociado un vector de enteros RV • RVi[a] es el valor del reloj vectorial del proceso i cuando ejecuta el evento a. • Mantenimiento de los relojes vectoriales – Inicialmente RVi= 0 – Cuando un proceso i genera un evento • RVi[i ] = RVi[i ] +1 – Todos los mensajes llevan el RV del envío – Cuando un proceso j recibe un mensaje con RV • RVj = max(RVj , RV ) (componente a componente) • RVj[j ] = RVj[j ] +1 (evento de recepción)
  • 103. Relojes vectoriales P0 (1,0,0) (2,1,0) (3,1,2) (4,1,2) (5,1,2) (1,0,1) (1,0,2) (1,0,3) (1,0,4) (5,1,5) (0,1,0) (1,2,3) (4,3,3) P1 P2
  • 104. Propiedades de los relojes vectoriales • RV < RV´ si y solo si – RV RV´ y – RV[i ]  RV´[i ],  i • Dados dos eventos a y b – a precede a b si y solo si RV(a) < RV(b) • Si a es un evento del proceso i y b es un evento del proceso j (con i  j) – a precede a b si y solo si RV(a)[i ]  RV(b)[i ] • RV(a)[i ] = RV(b)[i ] cuando a es el evento de envío a j y b es el evento de recepción. – a y b son concurrentes si y solo si • RV(a)[i ] > RV(b)[i ] y RV(b )[j ] > RV(b)[j ] 
  • 105. Exclusión mutua distribuida • Los procesos ejecutan el siguiente fragmento de código entrada() SECCIÓN CRÍTICA salida() • Requisitos para resolver el problema de la sección crítica – Exclusión mutua – Progreso – Espera acotada • Algoritmos – Algoritmo centralizado – Algoritmo distribuido – Anillo con testigo
  • 106. Algoritmo centralizado • Existe un proceso coordinador 0 entrada OK C 1 2 No hay respuespuesta (bloquea al cliente) 0 entrada C 1 2 OK 0 salida C 1 2
  • 107. Anillo con testigo • Los procesos se ordenan conceptualmente como un anillo. • Por el anillo circula un testigo. • Cuando un proceso quiere entrar en la SC debe esperar a recoger el testigo • Cuando sale de la SC envía el testigo al nuevo proceso del anillo 2 1 testigo 3 4 5 6
  • 108. Algoritmo distribuido • Algoritmo de Ricart y Agrawala requiere la existencia un orden total de todos los mensajes en el sistema • Un proceso que quiere entrar en una sección crítica (SC) envía un mensaje a todos los procesos (y a él mismo) • Cuando un proceso recibe un mensaje – Si el receptor no está en la SC ni quiere entrar envía OK al emisor – Si el receptor ya está en la SC no responde – Si el receptor desea entrar, compara la marca de tiempo del mensaje. Si el mensaje tiene una marca menor envía OK. En caso contrario entra y no envía nada. • Cuando un proceso recibe todos los mensajes puede entrar
  • 109. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 110. Modelos de sistema • Conjunto de estaciones de trabajo – El sistema consta de estaciones de trabajo a las que tienen acceso los usuarios. • Pool de procesadores – Los usuarios con terminales. – Los procesos se envían a procesadores de un pool. • Modelo híbridos – Trabajos interactivos en las estaciones de trabajo. – Trabajos no interactivos en en el pool de procesadores.
  • 111. Asignación de procesadores • Objetivo: decidir en qué procesador se debería ejecutar un proceso para equilibrar la carga y optimizar el rendimiento. – Evitar que un nodo esté inactivo mientras hay procesos esperando a ejecutar. • Suposiciones: – Todos los procesadores son compatible en el código. – La velocidad de los procesadores puede ser distinta. – Conectividad total: cualquier procesador puede comunicarse con cualquier otro.
  • 112. Estaciones de trabajo inactivas • En entornos típicos con estaciones de trabajo se desperdicia cerca del 80% de ciclos totales de CPU. • Uso de estaciones de trabajo inactivas: – Ejecutar procesos de forma totalmente transparente en máquinas remotas que se encuentran inactivas . – Los usuarios de las estaciones de trabajo inactivas no deberían observar una degradación del rendimiento como consecuencia de la ejecución de procesos remotos.
  • 113. Empleo de estaciones de trabajo inactivas • ¿Qué es una estación de trabajo inactiva? – Una que lleva varios minutos sin recibir entrada del teclado o ratón y que no está ejecutando procesos interactivos. • ¿Cómo localizar estaciones inactivas? – Dirigidas por el servidor: la estación inactiva anuncia su disponibilidad. – Dirigida por el cliente: un cliente envía un mensaje al resto para localizar una estación inactiva.
  • 114. Estrategias para localizar una estación inactiva Nodo Nodo Tengo poca carga. Podéis mandarme procesos Tengo mucha carga. Busco estación inactiva (a) (b)
  • 115. Algoritmos de distribución de la carga • Política de transferencia: determina cuando transferir. • Política de selección: selecciona el proceso a transferir. • Política de ubicación: selecciona el nodo al que transferir. • Política de información: decide cuándo, desde dónde y qué información sobre otros nodos recoger.
  • 116. Planificación de procesos en sistemas distribuidos • Definición del problema: – Dado un conjunto de tareas con ciertas restricciones de precedencia y requisitos de cálculo y comunicación, – Dado un conjunto de procesadores conectados por una red de interconexión, – Encontrar la asignación de tareas a procesadores y el orden de ejecución con el objetivo de minimizar el tiempo de ejecución total.
  • 118. Complejidad del problema • El problema en su forma general es NP-completo • Algoritmos con complejidad polinomial: – Cuando sólo hay dos procesadores. • En el caso general se utilizan heurísticas. • Los planificadores se eligen por 2 métricas: – El rendimiento del plan generado. – La eficacia del planificador: tiempo tomado por el planificador para generar un plan.
  • 119. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 120. Sistema de archivos distribuido • Objetivo principal: compartir datos entre usuarios ofreciendo transparencia • Objetivos secundarios: – rendimiento (debería ser comparable al de un sistema tradicional) – tolerancia a fallos – disponibilidad
  • 121. Arquitectura Cliente Servidor Servidor Cliente RED DE INTERCONEXIÓN ...................... ...................... ........ ........CTR ..... CTR ..... CTR ..... CTR .....
  • 122. Componentes • Servicio de directorio: – Gestión de los nombres de los archivos – Objetivo: ofrecer un espacio de nombres único • Servicio de archivos: – Proporciona acceso a los datos de los archivos
  • 123. Métodos de accesos remotos • Modelo carga/descarga – Transferencias completas del fichero – Localmente se almacenan en memoria o discos locales – Normalmente utilizan semántica de sesión – Eficiencia en las transferencias – Llamada open con mucha latencia – Múltiples copias de un fichero • Modelo de servicios remotos – El servidor debe proporcionar todas las operaciones sobre el fichero. – Acceso por bloques – Modelo cliente/servidor • Empleo de cache en el cliente – Combina los dos modelos anteriores.
  • 124. Tipos de servidores • Servidores con estado – Cuando se abre un fichero, el servidor almacena información y da al cliente un identificador único a utilizar en las posteriores llamadas – Cuando se cierra un fichero se libera la información • Servidores sin estado – Cada petición es autocontenida (fichero y posición)
  • 125. Tipos de servidores II • Ventajas de los servidores con estado – Mensajes de petición más cortos – Mejor rendimiento (se mantiene información en memoria) – Facilita la lectura adelantada. El servidor puede analizar el patrón de accesos que realiza cada cliente – Es necesario en invalidaciones iniciadas por el servidor • Ventajas de los servidores sin estado – Más tolerante a fallos – No son necesarios open y close. Se reduce el nº de mensajes – No se gasta memoria en el servidor para almacenar el estado
  • 126. Cache de bloques • El empleo de cache de bloques permite mejorar el rendimiento – Explota el principio de proximidad de referencias • Proximidad temporal • Proximidad espacial – Lecturas adelantadas • Mejora el rendimiento de las operaciones de lectura, sobre todo si son secuenciales – Escrituras diferidas • Mejora el rendimiento de las escrituras • Otros tipos de cache – Cache de nombres – Cache de metadatos del sistema de ficheros
  • 127. Localización de las cache en un SFD • Cache en los servidores – Reducen los accesos a disco • Cache en los clientes – Reducen el tráfico por la red – Reducen la carga en los servidores – Mejora la capacidad de crecimiento – Dos posibles localizaciones • En discos locales – Más capacidad, – Más lento – No volátil, facilita la recuperación • En memoria principal – Menor capacidad – Más rápido – Memoria volátil
  • 128. Tamaño de la unidad de cache • Mayor tamaño puede incrementar la tasa de aciertos y mejorar la utilización de la red pero – Aumentan los problemas de coherencia • Depende de las características de las aplicaciones • En memoria cache grandes – Es beneficioso emplear bloques grandes (8 KB y más) • En memorias pequeñas – El uso de bloques grandes es menos adecuado
  • 129. Políticas de actualización • Escritura inmediata (write-through) – Buena fiabilidad – En escrituras se obtiene el mismo rendimiento que en el modelo de accesos remotos – Las escrituras son más lentas • Escritura diferida (write-back) – Escrituras más rápidas. Se reduce el tráfico en la red – Los datos pueden borrarse antes de ser enviados al servidor – Alternativas • Volcado (flush) periódico (Sprite) • Write-on-close
  • 130. Problema de la coherencia de cache • El uso de cache en los clientes de un sistema de ficheros introduce el problema de la coherencia de cache: – Múltiples copias. • El problema surge cuando se coutiliza un fichero en escritura: – Coutilización en escritura secuencial • Típico en entornos y aplicaciones distribuidas. – Coutilización en escritura concurrente • Típico en aplicaciones paralelas.
  • 131. Soluciones al problema de la coherencia • No emplear cache en los clientes. – Solución trivial que no permite explotar las ventajas del uso de cache en los clientes (reutilización, lectura adelantada y escritura diferida) • No utilizar cache en los clientes para datos compartidos en escritura (Sprite). – Accesos remotos sobre una única copia asegura semántica UNIX • Mecanismos de cache sin replicación de datos – Basado en esquemas cooperativos que definen un único espacio global formado por la unión de todas las cache del sistema. – Los datos fluyen a través de las caches sin replicación • Empleo de protocolos de coherencia de cache
  • 132. Contenido • Sistemas distribuidos • Sistemas operativos distribuidos • Comunicación de procesos • Sincronización de procesos • Gestión de procesos • Sistemas de archivos • Gestión de memoria
  • 133. Uso de paginadores externos Paginador externo Mensajes Transferir página Fallos de página Espacio de direcciones del proceso Nodo A Núcleo Nodo B Núcleo
  • 134. Memoria compartida distribuida Memoria física Nodo A proceso Memoria física Nodo B proceso Memoria física Nodo C proceso Red de interconexión Memoria compartida distribuida
  • 135. Características • Se construye utilizando paso de mensajes. • Modelo de programación más sencillo, no es necesario el paso de mensajes. • Sincronización utilizando construcciones tradicionales (semáforos, mutex, ...). • ¿Rendimiento? – Los accesos a memoria no son siempre locales • Modelos: – Basado en hardware (arquitectura NUMA). – Basado en páginas. – Basado en objetos
  • 136. Implementación • Replicación y caching (igual que los sistemas de ficheros) • Las escrituras se realizan localmente • Aparece un problema en el acceso a variables compartidas (en escritura). • Problema idéntico a la coherencia de cache