Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un Vistazo A Los Sistemas Distribuidos
Un Vistazo A Los Sistemas Distribuidos
Un Vistazo a los
Sistemas Distribuidos
_____________________
Gabriel Gerónimo C.
Licencia
Atribución-CompartirIgual 4.0
Internacional
Prólogo
Las presentes notas son una recopilaciones de diferentes libros básicos que se
recomiendan a los estudiantes de nivel licenciatura para la materia de Sistemas
Distribuidos, así como artículos fundamentales en los temas de teoría de
sincronización de relojes de Lamport, Gusella y Zatti; exclusión mutua de Ricart-
Agrawala; elección de líder de García-Molina, Le Lann; interbloqueos de Chady-
Misra-Hass; tolerancia a fallos de Lamport-Shostak-Pease; teoría de control de
acceso de Lampson, y formalismo de Harrison-Ruzzo-Ullman; y modelos de
seguridas propuesto por Bell-LaPadula, Clark-Wilson, Brewer-Nash, y Goguen-
Meseguer.
Las notas pueden ser compartida bajo la licencia CC, como indique, es una
antología de libros básicos como Sistemas Distribuidos de G. Coulouris,
Sistemas Distribuidos de A. Tanenbaum, Sistemas Distribuidos de Mullender,
Unix de C. Brown, Unix de F. M. Marquez, Unix de Robbins, y diferentes
artículos sobre temas relacionados con sistemas distribuidos, los cuales son
utilizados y mencionados en el desarrollo de los capítulos. Los artículos tratan de
enriquecer los temas, y cubrir los huecos que se dejan cuando solamente se
explora la bibliografía básica recomendada en los cursos de Sistemas
Distribuidos.
Estas notas con licencia cc, es la 0.6, faltan demasiados detalles que cubrir,
figuras que colocar y tablas que actualizar, sólo para justificar su liberación, diré
a mi favor: necesito colocar estas notas para que las lean mis estudiantes, y no
tengan excusa de no encontrar los libros, y artículos, pero si motivo de indicar
que algo anda mal en las páginas. ¡Espero sea de utilidad!
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Contenido
I. Comunicación: procesos e hilos..........................................................5
1. Procesos.........................................................................................5
2. Hilos..............................................................................................12
II. Sincronización..................................................................................16
1. Sincronización de relojes..............................................................16
1. Introducción..................................................................................27
5. Coordinador central......................................................................32
IV. Elección...........................................................................................34
1. Introducción..................................................................................34
V. Deadlock..........................................................................................45
1. Introducción..................................................................................45
3. Wait-For-Graph (WFG)..................................................................46
5. Modelos de deadlock....................................................................49
7. Propuesta de Chandy-Misra-Haas.................................................50
1. Introducción..................................................................................65
2. Matriz de acceso...........................................................................65
1. Introducción..................................................................................72
2. Modelo de Bell-LaPadula...............................................................72
3. Modelo de Biba.............................................................................75
4. Modelo de Clark-Wilson................................................................90
6. Modelo de Goguen-Meseguer.......................................................96
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Capítulo I
Comunicación:
procesos e hilos
Un proceso es una entidad en ejecución que tiene asociada un número para poder ser
identificado por el sistema. En el sistema se cuenta con procesos llamados hijos, y
procesos llamados hilos.
1. Procesos
Todos los sistemas de multiprogramación están construidos en torno al concepto de
procesos. El modelo más sencillo considera que un proceso puede estar en ejecución o
en espera del turno de ejecución (Figura 1.1).
Aunque este modelo es simple se puede apreciar algunos de los elementos del diseño
del sistema operativo, cada proceso debe representarse de forma que el sistema
operativo pueda seguirle la pista. Aquellos procesos que no están ejecutándose tiene
que guardarse en algún tipo de cola, para que esperen su turno de ejecución (Figura
1.2), por lo que, la vida de un proceso está limitada de su creación a su terminación.
Si todos los procesos estuvieran siempre listos para ejecutar, entonces la disciplina de
cola propuesta anteriormente sería eficaz, sin embargo, aún en el simple ejemplo que
se ha descrito, esta implementación no es adecuada: algunos procesos en el estado de
No Ejecución están listos para ejecutar, mientras que otros están bloqueados,
esperando a que termine una operación de E/S. Así pues, utilizando una cola sencilla, el
distribuidor de procesos podría no seleccionar exactamente el proceso que está en el
extremo más antiguo de la cola. Más bien, el distribuidor tendría que recorrer la lista
buscando el proceso que no esté “no bloqueado” y que lleve más tiempo en la cola.
Una forma más eficaz de afrontar esta situación es dividir el estado de No Ejecución en
dos estados: Listo y Bloqueado. De esta forma se cuenta ahora con cinco estados
(Figura 1.3):
• Ejecución. Proceso que está actualmente en ejecución.
• Listo. Proceso que está preparado para ejecutar, en cuanto se le dé la
oportunidad.
• Bloqueado. Proceso que no puede ejecutarse hasta que se produzca cierto
suceso, como la terminación de una operación de E/S.
• Nuevo. Proceso que se acaba de crear, pero que aún no ha sido admitido
por el sistema operativo en el grupo de procesos ejecutables.
• Terminado. Proceso que ha sido excluido del grupo de procesos
ejecutables, bien porque se detuvo o porque fue abandonado por alguna
razón.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Cuando un proceso genera otro, el proceso generador se conoce como proceso padre
y el proceso generado es el proceso hijo. Normalmente, estos procesos
“emparentados” necesitarán comunicarse y cooperar entre sí.
PROTOTIPO DE LA FUNCIÓN
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Entonces el llamado a fork crea procesos nuevos haciendo una copia de la imagen del
padre en la memoria. El hijo hereda la mayor parte de los atributos del padre,
incluyendo el ambiente y los privilegios. El hijo también hereda algunos de los recursos
del padre, tales como los archivos y dispositivos abiertos. Pero, no todos los atributos o
recursos del padre son heredados por el hijo. Este último tiene un ID de proceso nuevo
y, claro que es diferente del ID del padre. Los tiempos del hijo para el uso del CPU son
iniciados a 0. El hijo no obtiene los bloqueos que el padre mantiene. Si el padre ha
colocado una alarma, el hijo no recibe notificación alguna del momento en que ésta
expira. El hijo comienza sin señales pendientes, aunque el padre las tenga en el
momento en que se ejecuta el fork. Aunque el hijo hereda la prioridad del padre y los
atributos de la administración de procesos, tiene que competir con otros procesos, como
cualquier otra entidad, por el tiempo del procesador.
PROTOTIPO DE LA FUNCIÓN
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
PROTOTIPO DE LA FUNCIÓN
#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);
Los procesos pueden estar agrupados en conjuntos que tienen alguna característica en
común, por ejemplo el mismo padre. Para determinar a que grupo pertenece un
proceso, se utiliza getpgrp, y para cambiar a un proceso como líder del grupo se hace
uso del llamado setpgrp.
PROTOTIPO DE LA FUNCIÓN
#include <sys/types.h>
#include <unistd.h>
pid_t getpgrp(void);
pid_t setpgrp(void);
Se debe tener en consideración que cuando el proceso padre llega a morir antes que
los hijos, el PPID del proceso hijo toma el valor de 1, el cual corresponde al proceso
init/systemd.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
PROTOTIPO DE LA FUNCIÓN
#include <sys/types.h>
#include <sys/wait.h>
La llamada al sistema wait detiene al proceso que la invoca hasta que un hijo de éste
termine o se detenga, o hasta que el proceso que la invocó reciba una señal. wait
regresa de inmediato si el proceso no tiene hijos o si el hijo termina o se detiene y aún
no se ha solicitado la espera. Si wait regresa debido a la terminación de un hijo, el
valor devuelto es positivo e igual al ID de proceso de dicho hijo. De lo contrario, wait
devuelve –1 y pone un valor en errno. Si errno es igual a ECHILD, indica que no
existen procesos hijos a los cuales hay que esperar. Si errno es igual a EINTR, la
llamada fue interrumpida por una señal.
Por otra parte, cuando se necesite esperar que un proceso especifico termine, se debe
utilizar la función waitpid la cual suspende la ejecución del proceso en curso hasta
que el hijo especificado por el argumento pid ha terminado, o hasta que se produzca
una señal cuya acción sea finalizar el proceso actual o llamar a la función manejadora
de la señal.
*status es la localidad en la cual se devuelve la información del estado de terminación
del hijo, pid contiene un valor que puede ser, -1 para indicar que espera a cualquier hijo,
un número>0 (positivo) indica que debe esperar al proceso cuyo PID sea ese número, 0
para indicar que espere a cualquier hijo cuyo Process Group ID sea igual al del proceso
que invoco el llamado, un número<0 (negativo) indica que espere a cualquier proceso
cuyo Process Group ID sea igual al valor absoluto de PID.
hijo, WUNTRACED que no esperar si el hijo está parado a no ser que este siendo
trazado, WCONTINUED volver si un hijo ha continuado ejecutándose tras mandarle la
señal SIGCONT. Las banderas WUNTRACED y WCONTINUED solo son efectivas si
SA_NOCLDSTOP no ha sido establecida para la señal SIGCHLD.
Tiempo máximo de espera El proceso ha esperado más allá del tiempo máximo
rebasado especificado para que se produzca cierto suceso.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
PROTOTIPO DE LA FUNCIÓN
#include <stdlib.h>
Los sistemas que administran procesos deben ser capaces de realizar ciertas
operaciones sobre los procesos y con ellos. Tales operaciones incluyen: crear, destruir,
suspender, reanudar, cambiar la prioridad, bloquear, despertar, despachar y comunicar
procesos.
PROTOTIPO DE LA FUNCIÓN
#include <unistd.h>
int execl (const char *path, const char *arg0, … , const char *argn,
char * / *NULL*/);
int execle (const char *path, const char *arg0, … , const char *argn,
char * /*NULL*/, const char *envp[]);
int execlp (const char *file, const char *arg0, … ,const char *argn,
char */*NULL*/);
PROTOTIPO DE LA FUNCIÓN
#include <unistd.h>
2. Hilos
Los hilos representan una manera de trabajar con diferentes procesos no
emparentados. Para utilizarlos se necesita contar con la librería pthreads que es un
estándar de POSIX (Portable Operating System Interface). En los sistemas UNIX, un
estándar de programación C para interface de programación de hilos se encuentra
especificada por el estándar IEEE POSIX 1003.1c. Las implementaciones que se basan
en este estándar son referenciados como POSIX threads o pthreads. En la tabla 1.2 se
pueden observar algunas funciones usadas para el manejo de hilos, estas se verán con
mayor detalle en secciones posteriores.
La diferencia entre un hilo y un proceso es que los procesos no comparten la misma
memoria, mientras que los hilos sí comparten totalmente la memoria entre ellos. Para la
creación de los hilos se usan las funciones de la librería pthread o de cualquier otra que
soporte threads mientras que para crear procesos se usa la llamada al sistema fork.
Para compilar programas que hagan uso de la librería pthread, usando GNU cc o GNU
Compiler Collection gcc se ejecuta la orden:
cc hilos.c -o hilos -lpthread
o
gcc hilos.c -o hilos -lpthread
Descripción POSIX
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
PROTOTIPO DE LA FUNCIÓN
#include <pthread.h>
Los atributos para un proceso son especificados en attr, si attr es NULL, el atributo
por omisión es usado. Si la función se realiza con éxito, se almacena el ID del hilo en la
localidad referenciada por thread.
El hilo que está creado ejecuta la función o rutina start_routine con arg como su
argumento. Si necesitamos pasar o devolver más de un parámetro a la vez, se puede
crear una estructura y colocar ahí los campos necesarios. Luego se pasa o se devuelve
la dirección de esta estructura como único parámetro.
• EAGAIN. Insuficiente recursos para crear un hilo, o el límite de los hilos del
sistema fueron alcanzados (en Linux vea /proc/sys/kernel/threads-max)
• EINVAL. Inválido el atributo.
• EPERM. Política de planificación no permitida y los parámetros de attr.
PROTOTIPO DE LA FUNCIÓN
#include <pthread.h>
PROTOTIPO DE LA FUNCIÓN
#include <pthread.h>
PROTOTIPO DE LA FUNCIÓN
#include <pthread.h>
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
La función pthread_join() suspenderá la ejecución del hilo que hace la llamada, hasta
que el hilo destino termine. Esta función es un mecanismo que permite la sincronización
de hilos (vea figura 1.4).
PROTOTIPO DE LA FUNCIÓN
#include <pthread.h>
El valor que pase el thread destino con la función pthread_exit() estará disponible en
la localidad de memoria a la que hace referencia value_ptr.
La función espera hasta que termine el hilo especificado en thread. La función retorna
0 en caso de éxito o el número de error en otro caso. Los errores pueden ser:
• EDEADLK. Un deadlock fue detectado, es decir, dos hilos esperan uno del otro.
• EINVAL. thread no está unido a otro hilo.
• ESRCH. El hilo con ID thread no fue encontrado.
Capítulo II
Sincronización
En el caso de una computadora no importa si el reloj se desfasa, puesto que todos los
procesos de la máquina utilizan el mismo reloj, tendrán consistencia interna, pero
cuando se comienza a trabajar con varias máquinas la situación es distinta. Al tener n
computadoras, los n relojes, correspondientes, trabajan en forma distinta, lo que
provoca una pérdida de sincronización llamada distorsión del reloj. Como consecuencia
de esta distorsión, podrían fallar los programas que esperan que el tiempo asociado a
un archivo, objeto, proceso o mensaje sea el correcto, independientemente del sitio
donde se haya generado.
1. Sincronización de relojes
La sincronización en los sistemas distribuidos es más compleja que en los sistemas
centralizados, ya que se deben utilizar algoritmos distribuidos, que cumplan con las
siguientes propiedades: la información relevante se debe distribuir entre varias
máquinas, los procesos deben tomar las decisiones sólo con base en la información
disponible en forma local, se debe evitar un punto de fallo en el sistema, no existe un
reloj común o alguna otra fuente precisa de tiempo global.
En el capítulo anterior se mostraron características de los procesos, los cuales son el
punto esencial de todos los sistemas operativos. Algo fundamental es la comunicación
entre ellos, pero, no es todo lo que hay que considerar, íntimamente relacionado con
esto, está la forma en que los procesos cooperan y se sincronizan entre sí, por ejemplo,
la forma de accesar a las secciones críticas o las asignaciones de recursos en el
sistema. En los sistemas con un procesador, los problemas relativos a las secciones
críticas, la exclusión mutua y la sincronización se resuelven, en general, mediante
métodos tales como semáforos, memoria compartida o paso de mensajes. Estos
métodos no son adecuados para su uso en los sistemas distribuidos, puesto que se
basan en la existencia de memoria compartida. Por ejemplo, dos procesos que
interactúan mediante un semáforo deben tener acceso a éste, si se ejecutan en la
misma máquina, pueden compartir el semáforo guardándolo en el núcleo y realizando
llamadas al sistema para tener acceso a él. Sin embargo, si se ejecutan en máquinas
distintas, este método ya no funciona, por lo que se necesitan otras técnicas, incluso el
hecho de determinar si el evento A ocurrió antes o después del evento B requiere una
reflexión cuidadosa.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Condición de Reloj:
Para cualesquiera eventos a, b: Si a→b entonces C(a) < C(b)
Para satisfacer la condición C2, es necesario que cada mensaje m contenga una marca
de tiempo Tm que debe ser igual a el tiempo en la cual se envío el mensaje. Al recibir un
mensaje de la marca de tiempo Tm, el proceso debe avanzar su reloj uno más que Tm.
Con mayor precisión se tiene la siguiente regla:
IR2:
a) Si el evento a es el que envía un mensaje m por parte del proceso Pi,
entonces el mensaje m contiene una etiqueta de tiempo Tm = Ci(a);
b) Al recibir un mensaje m, el proceso Pj fija Cj mayor que o igual a su valor
actual pero mayor que Tm.
Por el momento se deja hasta aquí la exploración del artículo de Lamport, pero se
retomará en el capítulo II, donde se muestra el algoritmo propuesto sobre exclusión
mutua que también se trata en el artículo.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
propio tiempo y el objetivo es mantener el tiempo de todas las máquinas tan cercano
como sea posible. Existen muchas propuestas para limitar el retardo de trasmisión de
los mensajes y basado en ello tratar de sincronizar los relojes, dentro de estas
propuestas se encuentran las aportaciones de Kopetz y Ochsereiter, 1987, artículo
“Clock Synchronization in Distributed Real-Time”; Riccardo Gusella y Stefano Zatti,
1987, artículo, “The Accuracy of the Clock Synchronization Achieved by TEMPO in
Berkeley UNIX 4.3 BSD”; Flaviu Cristian en 1989 dentro del artículo “Probabilistic clock
synchronication”; Drummond y Babaoglu, 1993, artículo “Low-cost syncronization”.
A continuación se muestra el planteamiento de Gusella y Zatti (1987) para llevar a cabo
la sincronización de los relojes de un conjunto de máquinas que forman una red.
3.1. Funcionamiento
3. Calcular el promedio
R0 + R 1+ R 2
◦ Av = =−5
3
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
|C A (t 0 )−C B (t 0)|≤R
Lema 1
Para t1 ≥ t0 :
(1−)(t 1−t 0)≤C (t 1)−C(t 0 )≤(1+)(t 1−t 0)
Lema 2
El valor absoluto de la tasa de desviación relativa de dos relojes cualquiera
satisfaciendo (1), es a lo más 2⍴.
|d⋅(C (t)−C
A
dt
(t))
|≤2
B
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Teorema 1
Sea TmAB y TmBA los tiempos mínimos posibles de transmisión de A a B y de
B a A respectivamente. Si se fija un límite TM ≥ 2max (TmAB, TmBA), en el tiempo
de ida y vuelta, es decir, CA(t3) - CA(t1) ≤ TM . Entonces, el máximo error en la
estimación de ∆AB es:
Corolario 1
El límite inferior para el error ɛ es:
ɛ ≥ |T mAB −T mBA|
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Corolario 2
El algoritmo de medición permite que una máquina pueda calcular la diferencia
de tiempo entre otras dos máquinas con un error máximo de 2ɛ.
Demostración
Se deduce
Teorema 2
Si el maestro, usando el algoritmo anterior de sincronización se encarga de
sincronizar un número de máquinas, entonces cualquiera de los dos relojes no
defectuosos están, una vez que la sincronización es ejecutada, en un rango de
4ɛ.
Teorema 3
Si una máquina mide los tiempos ∆´s para un conjunto de máquinas y los
sincroniza cada T segundos, entonces, en cualquier momento, todos los relojes
no defectuosos están dentro del rango 4ɛ + 2⍴T.
exactamente las instrupciones H veces por cada segundo, y se puede estar alejado en
un intervalo [t, t’] con un error de a lo más ρ(t - t’), donde ρ es una constante llamada
tasa máxima de alejamiento especificada por el fabricante, entonces se tiene que:
Teorema
Si los relojes de los procesos P y Q son correctos, el valor del reloj de Q, cuando
P recibe el mensaje de respuesta con el tiempo T, se encuentra en el
intervalo
El teorema indica que P puede determinar el intervalo que contiene el valor del reloj Q
(CQ(t)) si 2D es el retardo de ida y vuelta. Como P no conoce exactamente dónde se
encuentra Q en el intervalo, lo mejor que puede hacer es una estimación de CQ(t), por
medio de T y D que sí son conocidos, C P (T , D) , por lo que el error de P se
Q
encuentra en |C QP ( T , D)=C (t)|
Q . Minimizando el error estimado de C Q(t) eligiendo
C P (T , D) como el punto medio del intervalo, se tiene que, ”P lee el reloj Q” en:
Q
e=D(1+2 )−min
Así, cualquier otra elección de estimación conduce a un error máximo mayor. Lo cual se
interpreta como, mientras más corto sea el retardo de ida y vuelta, menor es el error de
P al leer el reloj de Q. Por lo que, si se presenta un retardo de ida y vuelta mayor que
2U, donde:
U=(1−2 )(∈+min)
Se debe descartar cualquier intento de lectura del reloj, y con un retardo inferior a 2U se
puede lograr un precisión exitosa. Cuando más cerca esté U de min, mejor será la
precisión de lectura de P. Sin embargo, como en el peor de los casos, el temporizador
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
de P puede funcionar a una velocidad tan rápida como 1+ρ, P debe elegir un retraso de
tiempo de espera mayor que:
U min ≈min( 1+)
Sea p la probabilidad de que P observe un retraso de ida y vuelta mayor que 2U.
Cuanto mayor sea U, menor será p. Por el contrario, cuanto menor sea U, mayor será
p. Por lo tanto, existe una compensación fundamental entre la precisión alcanzable al
intentar leer un reloj remoto y la probabilidad 1-p de éxito. Cuanto mejor sea la precisión
deseada, menor será la probabilidad de éxito. Por el contrario, cuanto peor es la
precisión, mayor es la probabilidad de éxito. En el caso límite, si se conoce un retardo
máximo de mensaje en tiempo real max, estableciendo una precisión de lectura de reloj
remoto de max(1+3ρ)-minρ)-min)-min (correspondiente a un retardo de tiempo de espera de
max(1+ρ)-min)), se obtiene un algoritmo de lectura de reloj remoto determinista. El precio de
tal elección es la falta de precisión.
2
n̄=
(1− p)
Referencias
[1] L. Lamport. “Time, Clocks, and the Ordering of Events in a Distributed
System”. Communications of the ACM. Vol. 21 No. 7. 1978.
[2] Riccardo Gusella y Stefano Zatti. “The Accuracy of the Clock Synchronization
Achieved by TEMPO in Berkeley UNIX 4.3 BSD”. 1987.
[3] Andrew S. Tanenbaum. “Sistemas Operativos Distribuidos”. Prentice Hall. 1996.
[4] F. Cristian. “Probabilistic clock synchronization”. Distributed Computer. Springer-
Verlag. 3. pp. 146-158. 1989.
REALIZAR:
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Capítulo III
Exclusión mutua
Para llevar a cabo la exclusión mutua el proceso debe proteger su sección crítica para
garantizar que ningún otro proceso utilice el recurso compartido. En los sistemas con un
procesador, las secciones críticas se protegen mediante semáforos, colas de mensajes,
o constructores similares; mecanismos que no se tienen en los sistemas distribuidos,
por lo que llevar a cabo la exclusión mutua necesita diferentes técnicas para que los
procesos de diferentes procesadores puedan utilizar los recursos compartidos.
1. Introducción
Según Michel Raynal en su artículo “A simple taxonomy for distributed mutual
exclusion algorithms”[1] de 1991, clasifica los algoritmos de exclusión mutua
distribuida en: basados en permisos, basados en tokens y el caso especial de
coordinador central. También, se puede decir que dentro de los algoritmos basados en
permiso, se encuentra la clasificación de los algoritmos basados en quorum (o mayoría),
los cuales suelen utilizarse cuando existen fallos en la comunicación. Desde 1997, Le
Lann, en su artículo “Distributed Systems: towards of a formal approach” y en el
artículo de Lamport “Time, clocks and the ordering of events in a distributed
systems” de 1978 [8], aportan algoritmos distribuidos para tratar de resolver el
problema de la exclusión mutua. Para ello, se considera que el sistema distribuido está
formado por n sitios (P1 a Pn) cuya comunicación entre procesos es sólo por mensajes,
y el retardo de las transferencias es finito pero impredecible.
Los algoritmos basados en permiso son plasmados por Ricart y Agrawala (1981) en su
artículo “An Optimal Algorithm for Mutual Exclusion in Computer Networks” [9] y
formalizada por Sanders (1987) en su artículo “The Information Structure of
Distributed Mutual Exclusion Algorithms” [10]. La idea de los algoritmos es muy
simple: cuando un proceso quiere entrar a la sección crítica pregunta a los demás si le
dan permiso para entrar, y espera hasta que todos otorguen el permiso. Si un proceso
no está interesado en la sección crítica este envía su permiso tan pronto como haya
recibido la solicitud. Si está interesado, se establece una prioridad entre las solicitudes
conflictivas.
En Ricart y Agrawala se propone un mecanismo de etiqueta (semejante al de Lamport)
asociado a cada solicitud y como las etiquetas (#Secuencia) son totalmente ordenadas,
los conflictos son fáciles de resolver en favor de la solicitud con la etiqueta mas baja, en
el caso de presentarse la igualdad, el conflicto se resuelve con base en el número de
nodo. En la propuesta, un proceso debe preguntar a un conjunto procesos
estáticamente definidos para que otorguen el permiso. Las mejoras al mecanismo
propuesto por Ricart y Agrawala están en la gestión y el tamaño del conjunto. Algunas
mejoras que plantean otros autores son:
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Por otra parte, Maekawa [6], usando una técnica basada en plano proyectivo finito,
reduce la complejidad a √ n y; Agrawala y El Abbadi [7] reduce a log ( n) usando
una estructura lógica de un árbol. Ellos asumen las siguientes propiedades:
1. La propiedad de seguridad (el estado de la exclusión mutua nunca es violada) es
garantizada obteniendo un número suficiente de permisos;
2. La propiedad liveness (cada solicitud se otorgará) es garantizada por el orden
total, cada solicitud está asociada con una etiqueta de tiempo o por la
administración de un grafo acíclico dirigido distribuido, los vértices son los
procesos solicitantes.
En la siguiente sección se analizaran los algoritmos basados en permiso, el algoritmo
propuesto por Lamport en su artículo “Time, Clocks, and Ordering of Events in
Distributed System” [8], y el algoritmo de Ricart y Agrawala propuesto en “An Optimal
Algorithm for Mutual Exclusion in Computer Networks” [9].
Supuestos:
• El sistema cuenta con un orden total de eventos.
• Para cualesquiera de dos procesos Pi y Pj, los mensajes enviados de Pi a Pj se
reciben en el mismo orden que fueron enviados.
• Todos los mensajes son recibidos.
• Cada proceso puede enviar mensajes directamente a cada uno de los demás
procesos.
• Cada proceso mantiene su propia cola de solicitudes, la cual nunca es conocida por
los demás procesos.
• Cada cola de solicitudes contiene inicialmente un sólo mensaje To:Po de solicitud de
recurso, donde Po es el proceso al cual se le otorga inicialmente el recurso y To es
menor que el valor inicial de cualquier reloj.
Algoritmo
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Por conveniencia, las acciones definidas por cada regla se supone que forman un sólo
evento:
1. Para solicitar el recurso, el proceso Pi envía los mensajes Tm:Pi de solicitud de
recurso a todos los demás procesos y coloca el mensaje en su cola de
solicitudes, donde Tm es la etiqueta de tiempo del mensaje.
2. Cuando un Pj recibe el mensaje de solicitud de recurso Tm:Pi, lo coloca en su
cola de solicitudes y envía un mensaje (de etiqueta de tiempo) de acuse de
recibo a Pi
3. Al proceso Pi se le otorga el recurso cuando se satisfacen las dos condiciones:
i. Existe un mensaje Tm: Pi de solicitud de recurso en la cola de solicitud, el
cual está ordenado antes de cualquier otra solicitud por la relación ⇒
ii. Si Pi a recibido un mensaje de cualquier otro proceso la etiqueta de tiempo
recibida es más grande que Tm (las condiciones i e ii son pruebas locales de
Pi).
4. Para liberar el recurso, el proceso P i elimina cualquier mensaje de solicitud de
recurso Tm:Pi de su cola de solicitudes y envía un mensaje (de etiqueta de
tiempo) Pi de liberación de recursos a todos los demás procesos.
5. Cuando un proceso Pj recibe un mensaje Pi de liberación de recursos, este
elimina cualquier mensaje Tm:Pi de solicitud de recurso de su cola de
solicitudes.
También se realizan las siguientes especificaciones para los N nodos que forman la red:
• El algoritmo idéntico en cada nodo tiene tres procesos para implementar la
exclusión mutua:
◦ P1. Se despierta cuando la exclusión mutua es invocada.
◦ P2. Recibe y procesa los mensajes de SOLICITUD.
◦ P3. Recibe y procesa los mensajes de RESPUESTA.
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
5. Coordinador central
La exclusión mutua más sencilla de implementar en un sistema distribuido se realiza por
medio de la designación de una máquina como el coordinador. Siempre que un proceso
desea entrar a una sección crítica, envía un mensaje de solicitud al coordinador,
indicando que desea entrar a una sección critíca. Si ningún otro proceso está en ese
momento en la sección crítica, el coordinador envía una respuesta otorgando el
permiso, y al llegar la respuesta al solicitante este puede entrar a la sección crítica
[11].
Suponga que el proceso P4 de la figura 1, pide permiso para entrar a la misma sección
crítica. El coordinador sabe que un proceso distinto ya se encuentra en esta sección,
por lo que no puede otorgar el permiso. El método de negación del servicio depende del
sistema, una alternativa es que el coordinador no responda, con lo cual se bloqueará el
proceso P4, que espera una respuesta, otra alternativa es enviarle una respuesta de
negación del servicio. Cuando el proceso P1 sale de la sección crítica, envía un mensaje
al coordinador para liberarla. El coordinador extrae a un proceso solicitante de la cola de
solicitudes y envía un mensaje al proceso solicitante para otorgarle el permiso. Si el
proceso estaba bloqueado, elimina el bloqueo y entra a la sección crítica.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Referencias
REALIZAR:
Capítulo IV
Elección
Muchos algoritmos distribuidos necesitan que un proceso actúe como coordinador,
iniciador, secuenciador o que desempeñe de alguna forma un papel especial de líder de
un grupo. Pero, si todos los procesos son idénticos, sin ninguna característica que los
distinga, no existe forma para elegir a uno de ellos como especial. Para esto, se supone
que cada proceso tiene un identificador único, y a partir de ello se toma la decisión de
elección. El objetivo de una elección es garantizar que al iniciar dicho proceso esta
concluya con el acuerdo de todos y se designe al líder.
1. Introducción
Después de un fallo en el sistema distribuido es frecuentemente necesario reorganizar a
los nodos activos para que continúen la ejecución de las tareas, y el primer paso para la
reorganización es elegir a un nodo coordinador para administrar las operaciones.
Hay al menos dos estrategias básicas que pueden adaptarse cuando se presentan los
fallos:
1. Tener un software que pueda operar continuamente, y cuando se presente un
problema este pueda ser reparado.
2. Realizar temporalmente una operación de paro y tomar un tiempo fuera para
reorganizar el sistema (durante este tiempo los componentes de estado del
sistema pueden ser evaluados, cualquier trabajo pendiente puede ser finalizado
o descartado, y puede ser seleccionado algún algoritmo para tratar la situación
que ocurre).
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Suposición 7: Todos los mensajes del nodo i que llegan al nodo j, son procesados
en j en el mismo orden en el cual ellos son enviados. Esto pueden ser garantizado por
el número de secuencia añadido a los mensajes.
Notación
El vector de estado de un nodo i, S(i), es una colección de celdas de almacenamiento
seguras, las cuales contienen datos cruciales para los algoritmos de elección y
aplicación.
3. S(i)∙d indicará la tarea definida que iniciará la ejecución en el nodo i. Esto usualmente
incluye los algoritmos de las aplicaciones que inician la ejecución, una lista de los nodos
participantes, y otros estados de información.
Un protocolo de elección debe seguir un conjunto de reglas en forma ordenada para ser
considerado como un “buen” protocolo.
El hecho de que S(i)∙d es igual a S(j)∙d bajo la operación normal no quiere decir que
todos los nodos se les asigna exactamente el mismo conjunto de tareas.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Tan pronto como el nodo i completa la primera parte del protocolo, este debe
asumir el trabajo de ser coordinador.
2) Para informar a todos los nodos con prioridad más baja que es el coordinador,
el nodo i en la segunda parte del algoritmo de elección debe proceder en dos
pasos:
i) Desde que el nodo i no conoce el contenido de los vectores de estado de los
nodos con prioridad menor, fuerza a estos nodos a entrar “a un fallo simulado”.
Enviando un mensaje de “Paro” a los nodos k, el nodo i hace que un nodo k pare
cualquier procesamiento y coloque S(k)∙s=“Elección”. Desde que todos los nodos
están en un estado conocido, el vector de estado puede ser modificado.
ii) El nodo i envía el mensaje “Yo fui electo” a los nodos con prioridad menor.
Cuando el nodo k recibe el mensaje, este coloca S(k)∙s=“Reorganizar”.
Teorema 1
En un ambiente donde tenemos las suposiciones 1 al 9, el algoritmo de
Bully satisfacen las afirmaciones 1 y 2.
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Teorema 2
En un sistema distribuido que no satisface las suposiciones 8 y 9, no
existe un protocolo de elección que satisfaga las afirmaciones 1 y 2.
Grupos de nodos
A continuación se introduce la notación de número de grupo en un conjunto de nodos
que se encuentran activos. Cualquier grupo de nodos que tienen, de algún modo, que ir
a juntos a una elección de coordinador y trabajan sobre una tarea común o alguna
manera se identifican con un único número de grupo. Todos los mensajes
intercambiados por los nodos de un grupo contienen el número del grupo, así que un
nodo puede ignorar los mensajes que pueden ser generados por otros grupos.
Notación
Se asume que un nodo i tiene su número de grupo en su vector de estado S(i). Así que
S(i)∙g será el número del grupo del nodo i.
Usando el número del grupo, se puede establecer la afirmación que debe ser satisfecha
por los protocolos de elección. Todos los nodos en un mismo grupo deben tener el
mismo coordinador.
El hecho de que S(i)∙d es igual a S(j)∙d bajo la operación normal no quiere decir que
todos los nodos se les asigna exactamente el mismo conjunto de tareas.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
El coordinador de cada grupo periódicamente busca alrededor del sistema si hay otros
grupos los cuales quieren unirse a este. Para evitar que todos los coordinadores envíen
invitaciones a los demás, se implementa un mecanismo que utilice una prioridad para
que los de baja prioridad dejen de enviar invitaciones por un largo periodo de tiempo.
Ahora, suponga que, el nodo 4 y 5 creyeron que ellos son los coordinadores con
prioridad más alta, envían invitaciones al resto de los coordinadores. El nodo 3 acepta la
invitación del nodo 4, mientras el nodo 1 y 2 aceptan la invitación del nodo 5. Entonces
de esta manera se forman dos nuevos grupos. Después de un tiempo, uno de los dos
coordinadores invita al otro a unirse con su grupo, y al final se puede tener un sólo
grupo con un sólo coordinador.
Teorema 3
En un ambiente donde las suposiciones 1 al 7 se satisfacen, el
algoritmo de Invitación satisface las afirmaciones 3 y 4.
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Por otra parte, Ernest Chang y Rosemary Roberts en 1979, plantean en “An improved
algorithm for decentralized extrema-finding in circular configurations of processes”, un
esquema basado en Le Lann, para reducir el número de mensajes a O(n log n). El
algoritmo supone que cada proceso conoce su propio número, e inicialmente genera un
mensaje con su propio número, pasándolo a la izquierda. Un proceso que recibe un
mensaje compara el número del mensaje con el suyo. Si su número es más bajo, el
proceso pasa el mensaje (a su izquierda). Si su propio número es mayor, el proceso
descarta mensaje que le llegó y envía el mensaje con su número. Si llega un mensaje
con su propio número, es decir igual al suyo, entonces es el proceso con el número más
alto del sistema. El algoritmo detecta uno y sólo uno número más alto. Por la naturaleza
circular de la configuración y la dirección consistente de los mensajes, cualquier
mensaje debe cumplir con todos los demás procesos antes de regresar a su iniciador.
Sólo un mensaje, el que tiene el número más alto, no encontrará un número más alto en
su camino. Por lo tanto, el único proceso que recibe su propio mensaje es el que tiene
el número más alto y será el líder.
1. Mejor de los casos. Los procesos son ordenados en el sentido de las agujas del reloj
en una secuencia de incremento, de modo que cada mensaje (excepto el mensaje n)
sólo viaja una vez en el anillo. Hay n-1 de estos, mientras el mensaje n requiere n
pasadas. Por lo tanto, el número total de mensajes que viajan son n + n-1 = 2n-1.
2. Peor de los casos. Los procesos son ordenados en el sentido de las agujas del reloj
en una secuencia decreciente, de modo que el mensaje i debe pasar i veces en el
n
n(n+1)
anillo. Así, el total de mensajes que viajan son ∑ i= 2
i=1
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Por cual, el número esperado de pasadas del mensaje, para todos los mensajes, es
n−1 n−1 n−1
n 1 1 1
E( k)=n+ ∑ ∑ k P(i , k )=n+ ∑ ( )=n(1+ + + ...+ )
i=1 k=1 k=1 k +1 2 3 n
La serie armónica tiene una suma parcial de C + log en, por lo cual, el número promedio
de mensajes es O(n log n).
El algoritmo usa un orden de O(n) mensajes pero puede requerir un gran número de
rondas. El procesador elegido, y sólo él, entra al conjunto de estado “elegido”. El
número total de mensajes, incluyendo cualquier mensaje que deba ser enviado después
de ganar la elección es O(n). El algoritmo es para un anillo unidireccional, pero puede
ser aplicado para anillo didireccional, asumiendo que la comunicación se realiza en
sentido contrario al de las agujas del reloj. El IDi único del procesador i es un entero. El
algoritmo es iniciado por un procesador que decide libremente despertarse. La
restricción es que no se permite que ningún procesador (participante en la elección)
inicie una elección después de recibir un mensaje del procesador que inicia la elección.
2. Se tiene una fase preliminar para cada proceso de mensaje. En esta fase todos los
mensajes viajan a la misma velocidad, una transmisión de mensaje por ronda. Cuando
un procesador decide que desea participar genera un mensaje y lo envía a su vecino. El
mensaje viaja por el anillo hasta que encuentra al siguiente procesador participante.
Después de ello continua con la fase que se describió en el punto 1.
Teorema 1.
Existe un algoritmo de elección de líder en un anillo síncrono de n procesadores
que usa menos que 4n mensajes y un tiempo O(n2i), donde i es el ID del
eventual ganador.
Los mensajes se dividen en tres categorias separadas:
1. Mensajes para saber quienes serán los participantes, n mensajes, después de un
tiempo de n rondas pasan a la segunda categoría.
2. Mensajes para buscar quien será el líder, dentro de los participantes, n/2j como
máximo de mensajes para j>0, lo cuál es menor que n.
3. Mensajes para notificar al ganador, n/2j-i mensaje j en un tiempo i en un recorrido n, lo
cuál es menor que 2n.
Por lo que el total de mensajes (sumando los mensajes de las tres categorías) es menor
que 4n y como la velocidad de trasmisión es variable el número de rondas requeridas es
O(n2i) donde i es el ID del eventual ganador.
Teorema 2.
Dado c>1. Existe un algoritmo de elección de líder en un anillo síncrono de n
procesadores que usa menos que 2cn/(c-1) mensajes y un tiempo O(nci), donde
i es el más pequeño ID de los procesadores en el anillo.
Algoritmo
Suposiciones:
1. Cada procesador es idéntico a todos los demás, excepto su identificador (ID).
2. Cada ID es único y es elegido de un espacio X, que está completamente ordenado.
Dichos ID serán de 0 a n-1.
3. Todos inician su algoritmo de elección al mismo tiempo.
4. Todos parte de un estado inicial (que será simplemente su ID), para pasar de un
estado a otro, examina su estado para decidir si envia un mensaje a su vecino y si
recibido mensaje de su vecino.
5. Existe un estado llamado “elegido”
6. Un tamaño de anillo n sobre el espacio X de ID es una n-tupla de elemetos de X.
7. Un vector de mensajes de tamaño n es una n-tupla de pares ordenados de L(X) U
{Null}.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Referencias
[1] García-Molina. “Elections in a Distributed Computing System”. IEEE Transactions on
Computers, Vol. 31, No.1. 1982.
[2] Greg N. Frederickson, and Nancy A. Lynch. “Electing a Leader in a Synchronous
Ring”. Journal of the Association for Computing Machinery, Vol. 34, No. 1. 1987.
[3] E. Chang, and R. Roberts. “An Improved Algorithm for Decentralized Extrema-
Finding in Circular Configurations of Processes”. ACM Communications, Vol. 22, No. 5.
1979.
[4] G. Lee Lann. “Distributed Systems-Towards a formal approach”. IFIP Congress
Proceedigs. 1977.
REALIZAR:
1. Suppose that two processes detect the demise of the coordinator simultaneously and
both decide to hold an election using the bully algorithm. What happens?
2. To achieve totally-ordered multicasting with Lamport timestamps, is it strictly
necessary that each message is acknowledged?
3. In Fig. 6-21 we have two ELECTION messages circulating simultaneously. While it
does no harm to have two of them, it would be more elegant if one could be killed
off. Devise an algorithm for doing this without affecting the operation of the basic
election algorithm.
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
4. In the centralized approach to mutual exclusion (Fig. 6-14), upon receiving a message
from a process releasing its exclusive access to the resources it was using, the
coordi- nator normally grants permission to the first process on the queue. Give
another possible algorithm for the coordinator.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Capítulo V
Deadlock
Los bloqueos en los sistemas distribuidos son similares a los bloqueos en los sistemas
con un procesador, sólo que peores. Son más difíciles de evitar, prevenir e incluso
detectar, además de ser más difíciles de eliminar cuando se les sigue la pista, puesto
que toda la información relevante está dispersa en muchas máquinas. En ciertos
sistemas, como los sistemas de bases de datos, los bloqueos pueden ser en extremo
serios, por lo que es importante comprender sus diferencias con los bloqueos ordinarios
y lo que se puede hacer con ellos.
1. Introducción
Los deadlocks son un problema fundamental en los sistemas distribuidos. Un proceso
puede solicitar recursos en cualquier orden, el cuál puede no ser conocido a priori y un
proceso puede solicitar recursos mientras tiene otros recursos. Si la secuencia de las
asignaciones de los recursos a los procesos no se controla, pueden ocurrir deadlocks.
Un deadlock es un estado donde un conjunto de procesos solicitan recursos que están
en manos de otros procesos del conjunto.
3. Wait-For-Graph (WFG)
En esta sección se mostrará la aportación de Selvaraj Srinivasan y Rajaram de su
artículo, A decentralized deadlock detection and resolution algorithm for generalized
model in distributed systems, del 2011. Ellos proponen que el estado de un sistema
puede ser modelado por un grafo dirigido, llamado un wait for graph (WFG). En un
WFG , los nodos son procesos y existe un lado dirigido de un nodo P 1 a un nodo P2, si
P1 está bloqueado es porque espera a que P2 libere algún recurso. Un sistema está
bloqueado si y sólo si existe un ciclo dirigido o nudo en el WFG.
La Figura 1 muestra un WFG, donde un proceso P11 del sitio 1 tiene un lado al proceso
P21 del sitio 1 y otro lado P 32 del sitio 2, está esperando entonces un recurso el cuál
actualmente es retenido por el proceso P21, y al mismo tiempo el proceso P32 está
esperando que le proceso P33 libere un recurso. Si P21 es esperado por el proceso P11,
entonces los procesos P11, P32 y P21 forman un ciclo y los 4 procesos están involucrados
en un deadlock en función del modelo de solicitud.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
La prevención del deadlock es comúnmente lograda teniendo una totalidad del proceso
de adquisición de los recursos necesarios antes de iniciar la ejecución o adelantarse
antes de que un proceso mantenga el recurso que será necesitado. Una manera de
prevención del deadlock en un sistema distribuido es conceder un recurso a un
proceso si el estado global del sistema resultante es SEGURO (tenga en cuenta que el
estado global incluyen todos los procesos y todos los recursos del sistema distribuido).
Sin embargo, debido a varios problemas, evitar los deadlock es impráctico en sistemas
distribuidos.
transacción una marca de tiempo global al momento de su inicio, aquí es esencial que
ninguna pareja de transacciones tenga asociada la misma marca de tiempo. La idea
detrás de este algoritmo es que cuando un proceso está a punto de bloquearse en
espera de un recurso que está utilizando otro proceso, se verifica cuál de ellos tiene la
marca de tiempo mayor (es decir, es más joven). Puede permitir entonces la espera
sólo si el proceso en estado de espera tiene marca inferior (más antiguo) que el proceso
esperado. De esta forma, al seguir cualquier cadena de procesos en espera, las marcas
siempre aparecen en forma creciente, de modo que los ciclos son imposibles. Otra
alternativa consiste en permitir la espera de procesos sólo si éste tiene una marca
mayor (es más joven) que el proceso esperado, en cuyo caso las marcas aparecen en
la cadena de forma descendente.
Aunque ambos métodos previenen los bloqueos, es más sabio dar prioridad a los
procesos más viejos, ya que se han ejecutado durante más tiempo, por lo que el
sistema ha invertido mucho en ellos y es probable que conserven más recursos.
Además, un proceso joven eliminado en esta etapa llegará en cierto momento al punto
en que sea el más antiguo del sistema, de modo que esta opción elimina la inanición.
Veamos la figura 2, para visualizar mejor el algoritmo, en (a), un proceso antiguo desea
un recurso que mantiene un proceso joven, en (b), un proceso joven desea un recurso
que mantiene un proceso antiguo. En el primer caso debemos permitir al proceso que
continúe (lo colocamos en espera); en el otro caso lo eliminamos (matamos el proceso).
Por lo anterior este algoritmo se llama espera-muerte.
Una vez que hemos supuesto la existencia de transacciones, podemos hacer algo que
antes estaba prohibido: tomar los recursos de los procesos en ejecución. Con lo que
estamos diciendo que al surgir un conflicto, en vez de eliminar el proceso que hace la
solicitud, podemos eliminar los procesos propietarios. Sin las transacciones, la
eliminación de un proceso podría tener severas consecuencias, puesto que el proceso
podría haber modificado ciertos archivos, con las transacciones estos efectos se
desvanecen si la transacción muere. Consideremos ahora la situación de la figura 3,
donde se van a permitir las prioridades. Dado que nuestro sistema venera a los
ancestros, no queremos que un joven tenga prioridad sobre un viejo, de modo que la
figura 3(a) y no la figura 3(b) recibe el nombre de “derecho de prioridad”. Por esta razón,
podemos llamar con seguridad a la figura 3(b) espera. Este algoritmo recibe el nombre
de herida-espera, puesto que se supone que una de las transacciones queda herida
(en realidad se le elimina) y la otra espera.
Si un proceso antiguo desea un recurso mantenido por uno joven, el proceso antiguo
ejerce su derecho de prioridad sobre el joven, cuya transacción es eliminada, como se
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
5. Modelos de deadlock
Los sistemas distribuidos permiten varios tipos de solicitudes de recursos, y con base
en esto se puede hacer una clasificación de ellos:
1) Modelo de recurso simple o individual.
En este modelo, un proceso puede tener como máximo una solicitud
pendiente para una sola unidad de un recurso. Dado que el grado máximo
de salida de un nodo en un WFG para el modelo de recurso simple puede
ser 1, la presencia de un ciclo en el WFG indicará que existe un deadlock.
2) Modelo AND.
En el modelo AND, un proceso puede solicitar más de un recurso
simultáneamente y la petición se satisface sólo después de conceder todos
los recursos solicitados. El grado de un nodo en el WFG para el modelo AND
puede ser más de 1. La presencia de un ciclo en el WFG indica un
deadlock en el modelo AND. En comparación con el modelo de recurso simple,
en donde un proceso sólo puede tener como máximo una solicitud
pendiente, el modelo AND es una forma más general.
3) Modelo OR.
En el modelo OR, un proceso puede realizar una solicitud para varios
recursos simultáneamente y la solicitud es satisfecha si alguno de los
recursos solicitados es garantizado.
7. Propuesta de Chandy-Misra-Haas
En los siguientes párrafos se mostrarán las aportaciones de K. Mani Chandy, Jayadev
Misra, Laura M. Haas en su artículo Distributed Deadlock Detection publicado en 1983
[2].
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
deadlock para redes de procesos que no cuentan con un agente central, y en los
cuales los retardos de mensajes son arbitrarios pero finitos. El único supuesto que se
hace es que los mensajes enviados por el proceso A al proceso B son recibidos por B
en el orden en el cual fueron enviados por A.
En cualquier tiempo dado, un proceso está en uno de dos estados: inactivo o ejecución.
Solamente los procesos que están en estado de ejecución pueden enviar mensajes. Un
proceso en ejecución puede cambiar su estado (a inactivo) en cualquier momento, pero
un proceso inactivo solo puede cambiar su estado (a ejecución) después de que se han
concedido sus peticiones; cabe hacer notar que las condiciones para cambio de estados
son diferentes para los modelos de recursos y de comunicación.
Una BDD esta implementada por N computadoras S 1,..., SN. Un sistema operativo local
o controlador Cj en cada computadora Sj planifica procesos, administra recursos, y lleva
a cabo la comunicación. Existen M transacciones T1.....TM ejecutándose en la BDD. Una
transacción está implementada por una colección de procesos con un máximo de un
proceso por computadora. Cada proceso está etiquetado con una dupla P ij donde Ti es
el identificador de la transacción donde pertenece el proceso y S j es la computadora en
la cual se ejecuta el proceso.
Cuando Pim adquiere el recurso solicitado desde Cm, este envía un mensaje a Pij (vía Cm
y Cj) indicando que la solicitud del recurso ha sido otorgada. P ij podrá proceder a su
cálculo sólo después de que haya recibido respuestas positivas a todas sus solicitudes
de recursos. Cuando los procesos en una transacción Ti ya no necesitan un recurso
administrado por Cm, ellos se comunican con el proceso P im el cual es responsable de
liberar el recurso de Cm. Los mensajes enviados por cualquier controlador Ci a otro Cj,
llegan secuencialmente y en un tiempo finito.
Un proceso no puede proseguir con su cálculo hasta que adquiera todos los recursos
que haya solicitado. Un conjunto de recursos se dice que está inactivo cuando espera
adquirir un recurso; se dice que está en ejecución cuando no está inactivo. Por lo tanto,
si un proceso nunca adquiere un recurso solicitado, estará permanentemente inactivo.
Se supondrá que si un sola transacción se ejecuta por si misma en un BDD, está
terminará en un tiempo finito y eventualmente liberará todos los recursos. Cuando dos
o más transacciones se ejecutan en paralelo, puede surgir un deadlock.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Un conjunto no vacío S de procesos que cumpla con las tres condiciones anteriores
debe estar permanentemente inactivo por que:
1. un proceso Pi inactivo en S puede iniciar su ejecución solamente después de
recibir un mensaje de algún proceso Pj en su conjunto de dependencia,
2. cada proceso Pj y los restantes Pi's en su conjunto de dependencia que están
también en S y no pueden enviar un mensaje mientras permanezca en estado
inactivo, y
3. no existe mensajes en transito entre P j y Pi, lo cual implica que P i nunca recibirá
mensaje de algún proceso en su conjunto de dependencia.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Existen varias formas de romper un bloqueo. Una forma es que el proceso que inició la
exploración se comprometa a suicidarse. Sin embargo, este método tiene problemas si
varios procesos llaman en forma simultánea al algoritmo. Por ejemplo, en la figura 5,
imaginemos que 0 y 6 se bloquean al mismo tiempo y ambos inician exploraciones,
entonces ellos descubrirían el bloqueo y se eliminarían a si mismo. Esto es demasiada
eliminación, con que uno desaparezca es suficiente.
Referencias
REALIZAR:
1. Algoritmo de Mitchell-Merrit
2. Algoritmo de Sinha-Natarajan
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Capítulo VI
Tolerancia a fallos
El diseño y la verificación de las aplicaciones distribuidas tolerantes a fallas es
ampliamente vistas como un esfuerzo complejo. En recientes años, varios paradigmas
han surgido para simplificar esta tarea. La clave es el consenso general y los tipos
fiables broadcast. Los consensos permiten a los procesos tener una decisión común, los
cuales dependen en sus entradas iniciales, a pesar de las fallas. Los algoritmos de
consenso pueden ser usados para resolver muchos problemas que surgen en la
práctica, tales como la elección de un líder. En algunas aplicaciones los procesos deben
de confiar en los mensajes broadcast, así que ellos acuerdan los mensajes de entrega o
arreglar un orden de entrega. Por otra parte, supongamos que la comunicación es
perfecta, pero ¿qué pasa cuándo los procesadores no lo son?
Como en los sistemas distribuidos puede fallar uno de los equipos que lo forman, el
sistema debe continuar su ejecución y/o recuperarse del fallo parcial sin afectar el
rendimiento general, es decir, debe ser tolerante a fallos. Un punto específicamente
difícil en los grupos de procesos es llegar a un consenso entre los miembros del grupo
sobre qué operación se debe realizar, para ello se envían mensajes en multidifusión
atómica. La tolerancia a fallo está fuertemente relacionada con la confiabilidad que se
tiene sobre el sistema: disponiblidad, fiabilidad, seguridad y mantenimiento.
Dentro del conjunto de fallas que se pueden presentar se encuentran:
• Paro del sistema, pero puede funcionar correctamente hasta llegar a detenerse.
• Falla de omisión de mensajes: responder, recibir, enviar mensajes.
• Falla de tiempo de respuesta: responde en un tiempo mayor de lo esperado.
• Envio de respuestas incorrectas.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Quiebre
Omisión Omisión
de envío de recibo
Omisión
general
Arbitrario con
mensajes de autenticación
Arbitrario
Problema de los Generales Bizantinos. Un comandante general debe enviar una orden
a sus n-1 tenientes generales de manera que:
IC1. Todos los tenientes leales obedecen la misma orden.
IC2. Si el comandante general es leal, entonces cada teniente leal obedece la orden
que le fue enviada.
Resultados imposibles
Se demuestra que con mensajes orales no hay solución para tres generales en la
presencia de un traidor. Para simplificar, se considera el caso en el cuál las únicas
decisiones posibles son “atacar” o “retirada”.
Usando este resultado, se puede mostrar que existe solución con al menos 3m+1
generales enfrentando a m traidores.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Se supone que el comandante ordena el tiempo del ataque, y requiere las dos
condiciones siguientes:
IC1'. Todos los tenientes leales atacan con 10 minutos de diferencia.
IC2'. Si el comandante general es leal, entonces cada teniente leal ataca 10 minutos
después que el comandante ordenó.
Inductivamente se definen los algoritmos de Mensajes Orales OM(m), para todos los
enteros no negativos m, por los cuales el comandante envía una orden a los n-1
tenientes. Se demuestra que OM(m) resuelve el Problema de los Generales Bizantinos
para 3m + 1 o más generales en la presencia de a lo más m traidores.
El algoritmo asume una función mayoría con la propiedad de que si la mayoría de los
valores de vi es igual a v, entonces la función mayoría (v1,.. ,vn-1) es igual a v. (En
realidad, asume una secuencia de tales funciones -- una para cada n). Existen dos
elecciones naturales para el valor de mayoría (v1, ... ,vn-1):
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
1. El valor mayoría entre los vi si este existe, de lo contrario el valor será RETIRADA;
2. La mediana de los vi, en el supuesto de que provienen de un conjunto ordenado.
Algoritmo OM(0)
(1) El comandante envía su valor a cada uno de los tenientes.
(2) Cada uno de los tenientes usa el valor recibido del comandante, o usa el valor
RETIRADA si no recibió ningún valor.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Lema 1
Para cualquier m y k, el Algoritmo OM(m) satisface IC2 si existen a lo más
2k+m generales y a lo más k traidores.
Teorema 1
Para cualquier m y k, el Algoritmo OM(m) satisface IC1 e IC2 si existen a lo más
3m generales y a lo más m traidores.
Note que una posible definición es dejar que elección(V) sea el elemento de la mediana
de V -- suponiendo que existe un ordenamiento de los elementos.
En el siguiente algoritmo, x:i denota el valor x firmado por el General i. Por lo tanto, v:j:i
denota el valor v firmado por j, y el valor v:j firmado por i. Sea el General igual a 0 para
el comandante. En este algoritmo, cada teniente i mantiene su conjunto Vi, que contiene
el conjunto de ordenes debidamente firmados que ha recibido hasta ese momento (Si el
comandante es leal, entonces este conjunto nunca debe contener más de un sólo
elemento).
Algoritmo SM (m)
Inicialmente Vi = ∅) = RETIRADA, donde ∅ es el conjunto vacío..
(1) El comandante firma y envía su valor a cada uno de los tenientes.
(2) Para cada i:
(a) Si el Teniente i recibe un mensaje de la forma v:0 del comandante y aún no ha
recibido ninguna orden, entonces
←(i) Coloca a Vi igual a {v};
←(ii) Envía los mensajes v:0:i a cada uno de los demás tenientes.
Teorema 2
Para cualquier m, el Algoritmo SM(m) resuelve el Problema de los Generales
Bizantinos si existen a lo más m traidores.
Definición 1
(a) Un conjunto de nodos {i1,...,ip} se dice que es un conjunto regular de vecinos
de un nodo i si:
(i) cada ij es un vecino de i, y
(ii) para cualquier k diferente de i, existen caminos ɣ j,k desde ij a k no pasando
a través de i tal que cualquiera de los dos caminos diferentes ɣj,k no tiene ningún
nodo en común a parte de k.
(b) El grafo G se dice ser p-regular si cada nodo tiene un conjunto regular de
vecinos consistente de p nodos distintos.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Algoritmo OM (m,p)
Lema 2
Para cualquier m>0 y cualquier p ≥2k+m, el algoritmo OM(m,p) satisface IC2 si
existen a lo más m traidores.
Teorema 3
Para cualquier m>0 y cualquier p ≥ 3m, el Algoritmo OM(m,p) resuelve el
Problema de los Generales Bizantinos si existen a lo más m traidores.
Teorema 4
Para cualquier m y d, si existen a lo más m traidores y el subgrafo de generales
leales tiene el diámetro d, entonces el Algoritmo SM(m+d-1) (con la modificación
anterior) resuelve el Problema de los Generales Bizantinos.
Corolario
Si el grafo de los generales leales es conectado, entonces SM(n-2) (con la
modificación anterior) resuelve el Problema de los Generales Bizantinos.
Sistemas Confiables
Para que la votación por mayoría se produzca en un sistema fiable, las siguientes dos
condiciones deben cumplirse:
1. Todos los procesadores no defectuosos deben usar el mismo valor de entrada (así
ellos producen la misma salida).
2. Si la unidad de entrada es no defectuosa, entonces todos los procesadores no
defectuosos usan el valor proporcionado como entrada (así ellos producen la salida
correcta).
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Referencia
[1] Lamport, L., Shostak R, Pease M. “The Byzantine Generals Problem”. ACM
Transactionson Programming Languages and Systems,Vol. 4, No. 3. pp. 382-401.
1982.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Capítulo VII
Control de acceso
Un sistema de cómputo o una red de computadoras incluyen datos, archivos,
programas, dispositivos y otros recursos que se les llama objetos, estos son accesibles
para algunos usuarios, procesos y otros componentes activos que se les llama sujetos
del sistema o de la red. Los sujetos pueden poseer derechos de acceso a los objetos, y
este par (objeto, derechos) se les llama capacidad del sujeto, de esta forma, el conjunto
de todas las capacidades de un sujeto se llama el dominio de protección.
1. Introducción
Los controles de acceso garantizan que todos los accesos directos a los objetos sean
autorizados, regulando la lectura, modificación, y borrado de los datos y programas. De
esta manera se protegen en contra de amenazas accidentales o maliciosas.
La eficacia del control de acceso se basa en dos premisas:
1. La identificación del usuario propietario: nadie puede ser capaz de adquirir los
derechos de acceso de otro (debe existir Autenticación).
2. La información que especifica los derechos de acceso de cada usuario o programa
está protegida contra modificaciones no autorizadas. Esta se cumple mediante
control de acceso a objetos del sistema, así como control a los objetos del usuario.
2. Matriz de acceso
La matriz de acceso proporciona un framework para describir un sistema de protección.
La versión del modelo para protección del sistema operativo fue formulada por Lampson
(1971) en su artículo “Protection”, y refinada por Graham y Denning (2972) en su
artículo “Protection: Principles and Practice ”. La versión formal del modelo fue dado por
Harrison, Ruzzo, y Ullman (1976) en el artículo “Protection in Operating Systems”. El
modelo es definido en términos de estados y transiciones, donde el estado de un
sistema protegido es representado por una matriz, y las transiciones de los estados son
descritas por comandos.
S ⊆ O
2. O es el conjunto de objetos, los cuales son entidades protegidas del sistema. Cada
objeto tiene un identificador único asignado por un nombre.
3. A es una matriz de acceso, con filas correspondientes a los sujetos y columnas a los
objetos. Una entrada A[s,o] enumera los derechos de acceso (o privilegios) del un
sujeto s sobre el objeto o.
Los objetos típicamente son: archivos, segmentos de memoria y procesos. Los sujetos
pueden ser: usuarios, procesos y dominios. Los dominios son el ambiente de protección
en el cual el proceso se ejecuta. Un proceso puede cambiar de dominio durante su
ejecución. Los derechos de acceso especifican las clases de acceso que pueden ser
ejecutadas sobre diferentes tipos de objetos. Los derechos de segmentos y archivos
usualmente son R (read), W (write) y E (ejecución), algunos sistemas tienen además el
derecho de Añadir, con el cual el sujeto le añade datos al final de un objeto pero no
sobre escribe en los datos existentes. El número de derechos genéricos es finito.
La figura 1 muestra el estado de un sistema que tiene dos procesos (sujetos), dos
segmentos de memoria y dos archivos (objetos). Cada proceso tiene su segmento
privado y es propietario de un archivo. Ningún proceso puede controlar otro proceso.
Graham y Dennig asocian a cada tipo de objeto un monitor que se encarga de controlar
el acceso a dicho objeto. El monitor de un objeto o impide a un sujeto s accesar a o
cuando A[s,o] no contiene el derecho necesario.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
La tabla 1 muestra las operaciones primitivas y los nuevos estados a los que cambia el
sistema si la operación se ejecuta correctamente.
________________________________________________________________
.
.
.
rm in A[xsm, xom] then
op1;
op2;
.
.
.
opn
end
Donde
r1,..., rm son derechos,
s1,..., sm y o1,..., om son enteros entre 1 y k.
Un comando puede tener un conjunto vacío de condiciones (es decir, m=0). Aquí se
asume que cada comando ejecuta al menos una operación.
2.3. Comandos
El efecto de un comando sobre el estado de un sistema protegido es como sigue:
Sean
c(a1,..., ak) un comando con parámetros a1..... ak, y
Q = (S, O, A) un estado de un sistema protegido.
Siempre que
1. Q' = Q si una de las condiciones de c no se satisfizo, y
2. Q' = Qn en otro caso, cuando existen estados Q0, Q1, . . . , Qn tales que
Q = Qo ⊦op Q' op1 * Q1 ⊦op Q' op2 * ... ⊦op Q' opn * Qn,
donde opi* denota la operación primitiva opi, sustituyendo el actual parámetro de a i por
el parámetro formal xi.
Se escribirá Q ⊦op Q' c Q' si existen parámetros a1, … ,ak tales que Q ⊦op Q' c(a1, ..., ak) Q'; y
Q ⊦op Q' Q' si existe un comando c tal que Q ⊦op Q' c Q' . Finalmente se escribirá Q ⊦op Q' * Q' si existe
una secuencia de longitud n ≥ 0 : Q = Q0 ⊦op Q' Q1 ⊦op Q' ... ⊦op Q' Qn = Q'
Cualquier proceso puede crear un archivo nuevo. El proceso que crea el archivo
automáticamente es el propietario, y tiene acceso R y W sobre él. Esto se representa
por el comando:
command create.file(p, f)
create objeto f;
enter Own into A [p, f];
enter R into A[p, f];
enter W into A[p, f]
end.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
El proceso propietario de un archivo puede cambiar los derechos del archivo. Por
ejemplo, un proceso p propietario de un archivo f puede proteger a f de modificaciones
involuntarias removiendo el acceso W sobre f. Puede además conferir cualquier
derecho del archivo (excepto propietario) a otros procesos. Por ejemplo, el acceso R
puede ser conferido por el proceso p al proceso q con el comando.
Algunos sistemas permite a los sujetos transferir un derecho de acceso r a un objeto sin
ser los dueños. Este es modelado con una bandera de copia (denotada como un
asterisco después de r). Siguiendo el principio de attenuation of privilege, un proceso
puede transferir derecho de acceso que tiene sobre el objeto siempre que la bandera se
establezca. El siguiente comando transfiere el acceso R de proceso p a q, pero no le da
habilidades a q para transferir derechos:
El propietario de un objeto debe ser capaz de conferir los derechos con o sin cualquier
de las banderas. Algunos sistemas permiten a un proceso generar procesos
subordinados y controlar los derechos de acceso de estos subordinados. Con el
siguiente comando, un proceso p puede crear un subordinado q teniendo un segmento
de memoria m:
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Referencias
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
[1] Butler W. Lampson. “Protection”. Proc. 5th Princeton Conf. on Information Sciences
and Systems, Princeton. 1971.
[2] Michael A. Harrison, Walter L. Ruzzo and Jeffrey D. Ullman. “Protection in Operating
Systems”. Communications of ACM. Vol. 19, No. 8. pp. 461-471. 1976.
[3] James P. Anderson. “Computer Security Technology Planning Study”. Deputy for
command and management systems. Electronic Systems Division. ESD-TR-73-51. Vol
1. 1972.
[4] G. Scott Graham and Peter J. Dennig. “Protection - Principles and Practice”. Spring
Joint Computer Conference. pp. 417-429. 1972.
REALIZAR:
Capítulo VIII
Modelos de
seguridad
Un sistema lo consideraremos seguro si podemos confiar en él, y se comporta como los
usuarios esperan que lo haga. Por otra parte si vemos al sistema como un autómata
finito y contamos con un conjunto de operaciones que le permiten pasar de un estado a
otro, entonces podemos definir a los estados en autorizados (seguros) y no autorizados
(no seguros). Bajo esto, podemos decir que un sistema es seguro si inicia en un estado
autorizado y nunca entra en un estado no autorizado; pero si llegase a caer, aplicando
una operación, en un estado no autorizado entonces el sistema tiene un problema de
seguridad.
1. Introducción
En los sistemas de computo los tipos de seguridad que podemos aplicar a los datos los
podemos clasificar en:
• Confidencial. Sea X un conjunto de entidades e Y una cierta información. Entonces
Y tiene la propiedad de confidencialidad con respecto de X si ningún x∈X puede
obtener información sobre Y.
• Integridad. Sea X un conjunto de entidades e Y una cierta información. Entonces Y
tiene la propiedad de integridad con respecto de X si todos los x∈X confían en Y.
• Disponibilidad. Sea X un conjunto de entidades e Y una cierta información.
Entonces Y tiene la propiedad de disponibilidad con respecto de X si todos los x∈X
pueden acceder a Y.
2. Modelo de Bell-LaPadula
La siguiente información mostrada está basada en el artículo de Elliott Bell, Leonard J.
LaPadula (1973): Secure Computer Systems: Mathematical Foundations.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Para colocar un orden de clasificación de seguridad, BLP opta por colocar lo siguiente:
– Ultra Secreto: Nivel más alto
– Secreto
– Confidencial
– No clasificada: Nivel más bajo
Por lo que las propiedades que puede tener un sujeto sobre un objeto las podemos
describir en forma temporal de la siguiente manera.
Esta propiedad también es conocida como la Regla de “Write Up”, lo cual indica, que el
sujeto sólo puede escribir un objeto en su mismo nivel o en un nivel superior. Con base
en estas dos propiedades se desprende el siguiente teorema de seguridad.
El conjunto de categorías a las que una persona puede tener acceso es simplemente el
conjunto potencial del conjunto de categorías. Por ejemplo, si las categorías son NUC,
EUR, y US, alguien puede tener acceso a cualquiera de los siguientes conjuntos de
categorías: ∅) = RETIRADA, donde ∅ es el conjunto vacío., {NUC},{EUR}, {US}, {NUC,EUR}, {NUC,US},{EUR,US}, y
{NUC,EUR,US}. Este conjunto de categorías forma una lattice bajo la operación de
subconjunto ⊆ .
Por ejemplo: Willy puede estar acreditado en el nivel (SECRET, {EUR}), Jorge dentro
del nivel (TOP SECRET,{NUC,US}). Un documento puede ser clasificado como
(CONFIDENCIAL, {EUR}). Los niveles de seguridad cambian el acceso. Debido a que
las categorías se basan en “una necesidad de conocer”, alguien con acceso a la
categoría {NUC,US} presumiblemente no tiene ninguna necesidad de accesar a los
elementos en la categoría EUR.
Aquí el acceso de lectura debe ser denegada, incluso si la seguridad acreditada del
sujeto es mayor (superior) que la seguridad de clasificación del objeto. Pero si el objeto
deseado está en cualquier nivel de seguridad ∅) = RETIRADA, donde ∅ es el conjunto vacío., {NUC},{US}, o {NUC,US}, y la
seguridad de acreditación del sujeto es nada menos que la clasificación de seguridad
del documento, debería permitir el acceso porque el sujeto esta acreditado en el mismo
conjunto de categoría del objeto.
Esto sugiere una nueva relación para cubrir la combinación de los conjuntos de
clasificación de seguridad y categoría. De esta manera se define dom (domina) como
sigue.
Definición
El nivel de seguridad (L,C) domina el nivel de seguridad (L´, C´) si y sólo si L´≤
L y C´⊆ C.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Al escribir (L,C) ¬dom(L´, C´) donde (L,C) dom (L´, C´) es falso. Esta relación además
induce a una lattice sobre el conjunto de los niveles de seguridad.
Entonces:
Jorge dom Luis como CONFIDENCIAL ≤ SECRET y { NUC }⊆ { NUC, EUR }
Jorge ¬dom Pedro como { EUR, US }⊈{ NUC, EUR } { NUC, EUR }
Jorge dom Hugo como SECRET ≤SECRET y { EUR } ⊆ { NUC, EUR }
Sea L(S) la categoría del conjunto de sujetos S, y sea L(O) la categoría del conjunto de
objetos O. La condición de seguridad simple, versión preliminar, es modificada como:
Con base a estas dos propiedades modificadas bajo un domino se desprende la nueva
versión del teorema de seguridad.
3. Modelo de Biba
La siguiente información se ha tomado del reporte de K. J. Biba (1975): Integrity
Considerations for Secure Computer Systems. The Mitre Corporation. Bedford,
Massachusetts.
El “no write up” es esencial ya que limita el daño que puede ser ocasionado por objetos
maliciosos en el sistema. Por ejemplo, “no write up” limita la cantidad de daño que
puede ser hecho por los caballos de troya en el sistema. Si el código malicioso se
oculta en un sujeto que sólo tiene habilitado escribir a objetos en su mismo nivel o nivel
inferior. El “no read down” impide que un sujeto de confianza sea contaminado por un
objeto de menor confianza.
Monitor de referencia
El monitor de referencia es una noción abstracta para dar solución genérica al problema
de protección de los sistemas.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Monitor
Sujetos de Objetos
referencia
Políticas de protección
Se define los siguientes axiomas para restringir el acceso de los sujetos a los objetos.
Donde S es el conjunto de sujetos, O es el conjunto de objetos y una relación
a⊆S×O que denota que un sujeto s puede accesar a un objeto o; y una función
dominio: S → POWERSET(O).
∀ s∈ S , o∈O s a o→o∈dominio(s)
El axioma 1.1 especifica que un sujeto s puede acceder a un objeto o sólo si o está en
dominio de s. La función dominio es una codificación de una política de protección que
identifica la accesibilidad al espacio de nombres por parte del sujeto.
Una política de protección toma la forma de un algoritmo de decisión que define los
espacios de nombres (o particiones de espacios de nombres) asignados a sujetos. Las
líneas punteadas de la Figura 5-2 representan los dominios de acceso dos sujetos S1 y
S2. Las flechas tienen la siguiente interpretación: las flechas que apuntan a un objeto
representan una modificación de un objeto por parte de un sujeto; las flechas que
apuntan a un sujeto desde un objeto representan una observación del objeto por parte
del sujeto.
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
1 4
2 a
a a a
a a
S1 3 S2
Modos de acceso.
Existe tres modos de acceso básicos a los objetos por parte de los sujetos:
1. Observación. El sujeto puede visualizar la información. El sujeto que puede
observar puede elegir basado en la información observada.
2. Modificación. Puede definirse en términos de observación, es decir, un sujeto
modifica la información si cambia de modo después de una observación.
3. Invocación. La invocación es una solicitud lógica de servicio de un sujeto a otro.
Debido a que el estado de control del sujeto invocado esta en función del hecho
que el sujeto fue invocado, se dice que la invocación es un caso especial de
modificación.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
El dominio de acceso de cada sujeto se divide con respecto al modo de acceso. Para
ello se presentan los siguientes axiomas.
De los axiomas anteriores se tiene entonces que, el dominio de acceso de cada sujeto s
es entonces el conjunto
{o∈O∣sl (o)≤sl (s)∨sl ( s)≤s l (o)}
Se puede extender los axiomas anteriores para la invocación entre sujetos mediante la
relación i : subconjuto S×S que define la capacidad de acceso para la invocación
entre sujetos.
Concepto de kernel.
La implementación de un monitor de referencia dentro de un sistema de cómputo se
denomina kernel. Conceptualmente, el kernel es el centro de sistema de
hardware/software que aplica la política de protección del monitor de referencia. El
kernel define una máquina abstracta compuesta de operaciones y objetos lógicos, cuyo
acceso está determinado por la política de protección. Una parte crucial del proceso de
desarrollo del kernel es la verificación formal de la propiedad: la política de protección
se aplica para todos los accesos designados.
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Amenazas de fuente
Se consideran dos fuentes de amenazas:
1) subsistema externo; y
2) subsistema interno.
El origen del ataque está implícito en su nombre. Una amenaza externa es planteada
por un subsistema que intenta, indebidamente, cambiar el comportamiento de otro
subsistema, mediante datos falsos, invocaciones indebidas o la modificación directa de
su propio comportamiento. Una amenaza interna se presentan si el subsistema es
malicioso o realiza funciones incorrectas.
Amenazas de tipo
Este tipo de amenazas se clasifican en:
1. Directas (abierto), e
2. Indirectas (encubierta).
Las amenazas directas implican medios "directos": una escritura en un objeto de base
de datos protegido. Se deben considerar, en este caso, solamente las propiedades de
protección del sujeto que accede y del objeto accedido. Las amenazas indirectas
incluyen una clase mucho más grande de escenarios. Generalmente, las amenazas
indirectas se refieren a modificaciones inapropiadas que resultan del uso de datos o
procedimientos realizados (modificados) por un subsistema malicioso. Estos datos
(procedimiento), al no cumplir con los requisitos esperados, pueden sabotear las
funciones de sus usuarios. Esta estructura requiere conocimiento, de cada acceso,
tanto de la última fuente como de la ruta de transferencia de la información a la que se
accede. Ejemplos de amenazas de tipo pueden ser:
• Directo externo. Un subsistema modifica maliciosamente el código de ejecución
de una base de datos de otro subsistema.
• Indirecta externa. Un subsistema coloca en otro subsistema una subrutina con
comportamiento malicioso (ataque de caballo de troya).
• Directo interno. Código automodificable.
• Indirecto interno. Código automodificable involuntario, por ejemplo, apuntadores
inicializados incorrectamente.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Frecuencia de aplicación
Estático
Frecuencia de granularidad
Grueso Fino
Dinámico
Problemas de integridad
Las interpretaciones específicas de la noción de modificación "adecuada" y las
consiguientes políticas de protección dependen de los requisitos de protección
específicos del problema. Biba se enfoca en tres clases de modificaciones adecuadas:
1. Propiedad de modificación con respecto a la importancia de información de la
seguridad;
2. Propiedad de modificación con respecto a la identidad de acceso de un usuario
(“necesidad para modificar”); y
3. Propiedad de modificación con respecto razones especificas de la aplicación.
Ambiente de protección
Los subsistemas de un sistema de cómputo realizan diferentes funciones y, por lo tanto,
a menudo requieren diferentes políticas de integridad. Los requisitos de protección
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Los siguientes análisis definen un conjunto de primitivas para el modelo que, aunque
comparten una identificación de objeto abstracto común, proponen diferentes políticas
para restringir el acceso.
Cada política se define como un conjunto de relaciones, una para cada tipo de modo de
acceso definido, sobre los conjuntos de elementos activos y pasivos del sistema de
cómputo. Esta categorización identifica los elementos del sistema que realizan accesos
a la información (sujetos) y aquellos a los que se accede (objetos). Claramente,
diferentes políticas de protección pueden proteger diferentes tipos de objetos de
diferentes tipos de accesos de sujetos. Por lo tanto, la identificación de sujetos y objetos
a menudo depende de la política. Una política de protección se identifica mediante una
regla de decisión que determina las relaciones de acceso.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Para indicar el nivel de integridad se toman las siguientes etiquetas: TS para máximo
secreto, S para secreto, y C para confidencial. Tienendo ellos un orden parcial C < S <
TS.
Definiciones
Cada modelo tiene los siguientes elementos:
S: El conjunto de sujetos s, los elementos activos de procesamiento de información del
sistema de cómputo;
O: El conjunto de objetos o, los elementos pasivos del repositorio de información del
sistema de cómputo;
I: El conjunto de niveles de integridad;
il: S×O→ I una función que mapea el nivel de integridad de cada sujeto y objeto;
define una red (lattice) bajo la relación ≤;
≤: Una relación (un subconjunto I ×I ) que define el orden parcial “menor que o igual”
en el conjunto de niveles de integridad I;
<: Una relación transitiva antisimetría (un subconjunto I ×I ) que define la relación
“menor que” en el conjunto de niveles de integridad I;
min: POWERSET (I )→I Una función que retorna el mayor de los menores
(conocido) del subconjunto de I especificado;
o: Una relación (subconjunto S×O ) que define la capacidad de un sujeto, s ∈S ,
para observación de un objeto, o∈O :s o o ;
m: Una relación (subconjunto S×O ) que define la capacidad de un sujeto, s ∈S ,
para modificación de un objeto, o∈O :s mo ;
i: Una relación (subconjunto S×S ) que define la capacidad de un sujeto, s 1 ∈S ,
para invocación de otro sujeto, s 2 ∈S : s1 i s 2 ;
La política prevé un valor dinámico, monótono y no creciente de il (s) para cada sujeto.
El valor de il(s), en cualquier momento, refleja la marca de agua-baja del
comportamiento previo del sujeto. La marca de agua-baja es el nivel de integridad
mínimo de un objeto al que accede el sujeto para su observación. Además, un sujeto
está obligado a modificar sólo aquellos objetos que poseen un nivel de integridad
inferior o igual al del sujeto. Las propiedades se formalizan mediante los siguientes
axiomas.
Axioma 1.5
Para cada acceso de observación de un un sujeto s sobre un objeto o, el nivel de
integridad del sujeto il'(s), inmediatamente posterior al acceso, se define por:
i l ' ( s)=min{i l (s), i l (o)}
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Axioma 1.6
Para cada acceso de modificación de un un sujeto s sobre un objeto o.
∀ s∈S , o∈O s m o→i l ( o)⩽i l ( s)
Axioma 1.7
Para cada acceso de invocación de un un sujeto s1 sobre un sujeto s2.
∀ s1 , s2 ∈S s1 i s 2 → i l (s 2)≤i l (s1 )
Definición 1
Una ruta de transferencia de información es una secuencia de objetos {o 1, … , on+1} y
una correspondiente secuencia de sujetos { s1, … , sn } tal que
∀ i ∈(1,. .. , n) si o o i ∧ si m oi +1
Teorema 1
Si existe una ruta de transferencia de información del o1 ∈O a el objeto o n+1 ∈O
entonces la aplicación de la política de marca de agua-baja requiere
i l (o n+1 )⩽i l (o 1)
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Definición. Auditoría.
Para cada acceso de observación de un sujeto s sobre un objeto o:
c l ( s)=min {c l (s ), cl (o)}
Definición. Auditoría.
Para cada acceso de modificación de un sujeto s sobre un objeto o:
c l ( o)=min{c l (s), c l ( o)}
Política de Anillo
En la secciones anteriores se identificaron dos clases de modificaciones impropias:
directas e indirectas. La política de marca de agua-baja abordó directamente el
problema de la modificación directa: prohibió las modificaciones directas (Axioma 1.6 y
Axioma 1.7). Las modificaciones incorrectas indirectas se evitaron mediante un cambio
en el nivel de integridad del sujeto que accede (y, por lo tanto, su dominio de acceso).
La política de anillo proporciona la aplicación del kernel sólo de una política de
protección que aborda la modificación directa. Los niveles de integridad tanto de los
sujetos como de los objetos se fijan durante su vida útil y sólo se permiten
modificaciones de objetos de menor o igual nivel de integridad. Si bien permite
garantías de integridad menos sustanciales, particularmente en lo que respecta a la
modificación incorrecta indirecta, la flexibilidad del sistema aumenta sustancialmente.
Esto se logra al permitir la observación de objetos en cualquier nivel de integridad. La
política esta definida por los siguientes axiomas.
Axioma 1.8
∀ o ∈O , s ∈S s m o→i l ( o)⩽i l ( s)
Axioma 1.9
∀ s1 , s2 ∈S s1 i s 2 → i l (s 2)≤i l (s1 )
Axioma 1.10
∀ s∈S , o∈O s o o→i l (s)⩽i l (o)
Axioma 1.11
∀ s∈S , o∈O s m o→i l ( o)⩽i l ( s)
Axioma 1.12
∀ s1 , s2 ∈S s1 i s 2 → i l (s 2)≤i l (s1 )
La satisfacción de Axioma 1.11 asegura que los objetos no puedan ser modificados
directamente por sujetos que no posean privilegios suficientes. Sin embargo, esto
supone que las modificaciones realizadas por un sujeto autorizado están bajo la
dirección explícita de un programa no malicioso. Claramente, el uso irrestricto de
subsistemas escritos por usuarios arbitrarios (cuyo carácter no malicioso que no se
puede atestiguar) no satisface esta suposición. Así, Axioma 1.10 restringe el uso de
subsistemas (datos o procedimientos) a aquellos cuyo carácter no malicioso (en virtud
de su nivel de integridad) pueda acreditar el sujeto: aquellos objetos que tienen un nivel
de integridad mayor o igual al del sujeto . Ahora podemos asegurarnos de que el
carácter no malicioso de estos objetos se conserva al demostrar que no se puede
transferir información (según los axiomas anteriores) de objetos con un nivel de
integridad "bajo" a otros con un nivel de integridad "superior" (similar a Teorema 1).
Teorema 2
Si existe una ruta de transferencia de información del o1 ∈O a el objeto o n+1 ∈O
entonces la aplicación de la política de integridad estricta requiere
i l (o n+1 )⩽i l (o 1)
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
dinámica por un sujeto con privilegios apropiados, por lo cual tiene un carácter
discrecional.
Se considera que las siguientes restricciones de acceso solo se aplican a sujeto ->
acceso al objeto.
Axioma 1.13
∀ s∈S , o∈O s o o→∃acl e∈acl (o), name (acl e)=user (s)∧modo (acl e)=' o '
Axioma 1.14
∀ s∈S , o∈O s m o→∃acl e∈acl (o), name ( acl e)=user (s )∧modo (acl e)=' m' .
La función acl define la política de protección discrecional. El axioma 1.13 restringe los
accesos de observación a esos objetos nombrando específicamente al usuario del
sujeto que accede en su ACL. El axioma 1.14 restringe de manera similar los accesos
de modificación. Las relaciones o y m pueden cambiarse mediante modificaciones a
acl. Este privilegio para modificar acl está definido por el privilegio a modificar el objeto
en el que se encuentra acl.
Propiedades de protección
El problema del acceso de modificación directa se aborda mediante las especificaciones
explícitas del contenido de ACL (Axioma 1.14). Sin embargo, persisten dos problemas:
1) modificación indirecta, y 2) identificación de qué sujetos pueden modificar la política
de protección (cambiar la ACL). El problema de la modificación indirecta es difícil de
abordar con esta política/mecanismo. La política de integridad estricta hizo
declaraciones precisas con respecto a la modificación indirecta, ya que se definieron
clases estáticas definidas externamente de sujetos y objetos (niveles de integridad). Las
propiedades atribuidas externamente a sujetos y objetos de un nivel de integridad dado
permitieron alguna declaración sobre la preservación de estas propiedades. Sin
embargo, tal afirmación no puede hacerse fácilmente en este caso. El problema se ve
agravado por la naturaleza dinámica de las ACL. Dado que el conjunto de sujetos
(usuarios) que pueden acceder a un objeto no está bajo control externo, ninguna
propiedad de estos sujetos (usuarios) puede definirse externamente. Por lo tanto, no se
puede hacer ninguna declaración sobre las propiedades de los objetos accedidos
únicamente sobre la base de el mecanismo de control de acceso. De hecho, la falta de
"enunciados precisos" es una característica fundamental de la política discrecional, y es
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Axioma 1.15
∀ o ∈H ancestro(o , o)
Axioma 1.16
∀ o , p∈H ancestro(o , p)∧ancestro( p , o)→o= p
Axioma 1.17
∀ o , p , q∈H ancestro( o , p)∧ancestro( p , q)→ancestro(o ,q )
Axioma 1.18
∀ o , p , q∈H ancestro( o , p)∧ancestro( o , q)→ancestro (p ,q )∨ancestro (q , p)
Dada la definición anterior, podemos aumentar las relaciones o y m dado que para
acceder a cualquier objeto en H, un sujeto debe tener acceso a todos sus antepasados.
Axioma 1.19
∀ s∈S , o , p∈ H s o o∧ancestro(o , p)→s o p
Axioma 1.20
∀ s∈S , o , p∈H s m o∧ancestro(o , p)∧o≠ p→s o p
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Axioma 1.21
∀ s∈S , o∈ H accesible (o , s)→s ∈o∨∃ p∈H ancestro(o , p)∧s m p
La comunidad de usuarios y sujetos identificados por accesible son aquellos que tienen
o pueden obtener acceso a un objeto. Observamos que la definición de accesible y la
jerarquía de objetos se pueden extender a otras políticas de protección o
combinaciones de políticas.
Anillos
La política/mecanismo de protección de anillos que se discute es un prototipo de la
política de anillos vista anteriormente, ofrece la capacidad de:
a) proteger un subsistema de su invocador; o
b) proteger a un invocador de un subsistema invocado.
Modelo
Se definen los siguientes elementos:
R: Un conjunto finito de nombres de anillo, normalmente números enteros pequeños;
≤: Orden lineal “menor que o igual que” en R;
<: Orden lineal “menor que” en R;
r: Una función, S×R que define el anillo de ejecución para cada sujeto;
lir: Una función, S×R que define el límite inferior del anillo para cada sujeto
invocador;
uir: Una función, S×R que define el límite superior del anillo para cada sujeto
invocador;
umr: Una función, O×R que define el límite superior del anillo para cada acceso de
modificación; y
uor: Una función, O×R que define el límite superior del anillo para cada acceso de
observación;
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Axioma 1.22
∀ s1 , s 2∈ S , s 1 i s 2→(lir (s 2)≤r ( s 1)≤uir (s2 )∧r (s 2)< r ( s1 )∨r ( s 1)≤r ( s2 ))
El axioma 1.22 restringe un sujeto para invocar sujetos: 1) de mayor privilegio solo a
través de un rango permitido de anillos; y 2) de menor o igual privilegio
indiscriminadamente.
Axioma 1.23
∀ s∈S , o∈O s o o→r ( s)≤uor (o)
El axioma 1.23 restringe a los sujetos a observar sólo a objetos en un rango permitido
de los anillos: O≤r (s )≤uor ( o)
Axioma 1.24
∀ s∈S , o∈O s m o→r (s)≤umr (o)
El axioma 1.24 restringe a los sujetos a modificar sólo a objetos en un rango permitido
de los anillos: O≤r (s )≤umr (o)
Se considera que cada sujeto tiene un único punto de invocación (entrada), El aximio
1.22 restringe la invocación entre sujetos en una “zona” especifica de dominios (anillos).
Mientras el axioma 1.22 asume un límite inferior explícitamente especificado, los
axiomas 1.23 y 1.24 implicitamente asumen un límite inferior del elemento mínimo de R.
Se observa, en cuanto a las listas de control de acceso que este mecanismo puede no
aplicarse uniformemente a todos los sujetos, objetos y modos de acceso dentro de una
implementación específica. El análisis proporcionado anteriormente para las listas de
control de acceso se aplica a la estructura de protección del anillo. Al igual que las ACL,
la política de protección puede ser modificada por un sujeto debidamente privilegiado.
La capacidad de alterar los atributos de protección de un sujeto u objeto debe estar
restringida a sujetos de mayor o igual privilegio. La forma en que se restringe el acceso
depende de la forma en que se organizan los sujetos y los objetos.
4. Modelo de Clark-Wilson
El modelo BLP esta dirigido a políticas de seguridad militar, metas de descubrimiento no
autorizado de información. Sin embargo en muchos ambientes, el descubrimiento es
menos importante que la prevención de la modificación de datos no autorizados. Un
ejemplo de esto es el procesamiento de datos comerciales que manejan la
administración y la contabilidad de fondos financieros. En estos ambientes, la
prevención de fraudes es más importante que el descubrimiento de información.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
asegurar que un usuario no pueda modificar datos de alguna manera que ocasione
pérdidas, corrupción de fondos o contabilidad de registros de la compañía.
El modelo usa dos categorías de mecanismos para llevar a cabo esta meta. La primera
de ellas es llamada transacciones bien formadas (web-formed transactions) y la
segunda es la separación de derechos (separation of duty). El propósito de una
transacción bien formada es garantizar que un usuario no pueda alterar
arbitrariamente datos. En cambio, los datos sólo pueden ser alterados en formas
específicas que estrictamente restringen los cambios posibles en un orden para
preservar su consistencia interna. La separación de derechos intenta mantener la
consistencia de los objetos de datos, separando todos las operaciones en varias partes
y requiere que cada parte sea ejecutada por un sujeto diferente. Básicamente menciona
que cualquier usuario que tiene permitido iniciar una transacción bien formada no le
esta permitido ejecutarla. Por ejemplo, el proceso de comprar algunos productos puede
incluir varios pasos.
Los usuarios en sistemas BLP están restringidos a los datos que pueden acceder
mientras que en modelo Clark-Wilson están restringidos por los programas que pueden
ejecutar. Mientras que las políticas de seguridad BLP usan la tripleta sujeto-objeto-
mododeacceso para determinar la restricción de acceso, el modelo Clark-Wilson usa
sujeto-objeto-programa donde el modo de acceso, y en consecuencia la operación a
ser ejecutada en los datos, esta implícita en el programa a ejecutar.
2. Elementos de datos no restringidos (UDIs- Unconstrained Data Items) son los ele-
mentos que no están cubiertos en el modelo de integridad y pueden ser manipulados li-
bremente.
A diferencia de BLP el acceso a los datos no es limitado por los atributos de los datos
en cuestión, dado que BLP permite accesar (reglas obligatorias) a los sujetos a mas de
un conjunto de datos agrupados dentro de “clases de conflictos de interés”, algo que
no es restringido por las reglas mandatorias si ésta es satisfecha.
Para entender el modelo se define primero que será la muralla china y luego, mediante
la elaboración de un conjunto de reglas de modo que ninguna persona (sujeto) nunca
puede acceder a los datos (objetos) en el lado equivocado de la muralla.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
La base de la política Muralla China es: sólo se les permite a los usuarios el acceso a
la información que no se considera conflictiva con cualquier otra información que ellos
ya poseen. La única información que ya posee un usuario debe ser información que: a)
se lleva a cabo en la computadora y, b) el usuario ha accedido previamente.
Por ejemplo: si un sujeto Su, tiene acceso a un Objeto O r entonces N(u,r) debe ser
verdadero, en otro caso falso, si Su accesa a un nuevo objeto Ot entonces N debe ser
actualizado, y N´(u,t) debe tomar el valor de verdadero.
Dado
S el conjunto de sujetos,
O el conjunto de objetos, y
L el conjunto de etiquetas de seguridad (x, y).
Axioma 1
y1= y2 ➞ x x1=x2
Corolario 1
x1< > x2 ➞ x y1 < >y2
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Definición 1
Sea N una matriz booleana con elementos N(v,c) correspondientes a los
miembros de SxO, la cual toma el valor de verdadero si el sujeto Sv tiene o ha
tenido acceso al objeto Oc o el valor es falso si Sv no tiene o no ha tenido
acceso al objeto Oc. Cuando un sujeto Su realiza alguna solicitud R(u,r) para
accesar a un nuevo objeto Or y está es aceptada entonces N(u,r) debe fijarse
en verdadero para que refleje el hecho del acceso concedido.
De esta forma podemos decir, que cualquier solicitud R(u,r) causa una transición de
estado donde N es reemplazado por N´.
Axioma 2
El acceso a cualquier objeto Oc por cualquier sujeto Su, es garantizado si y sólo
si para todo N(u,c)=true.
( ( xc < > xr ) or ( yc = yr ) )
Axioma 3
N(v,c)=false, para toda (v,c) que representa un estado inicial seguro.
Axioma 4
Si N(u,c) es en todas partes false para algún Su entonces cualquier solicitud
R(u,r) es concedida.
Teorema 1
Una vez que un sujeto a tenido acceso a un objeto, los únicos objetos
accesibles por él se encuentran en el mismo conjunto de datos de la empresa o
dentro de una clase de conflicto de interés diferente.
Teorema 2
Un sujeto puede a lo más tener acceso a un conjunto de datos de empresa en
cada clase de conflicto interés.
Teorema 3
Si por alguna clase de conflicto de interés X existe un conjunto de datos de la
empresa Xy entonces el número mínimo de sujetos que permitirá accesar a
cada objeto es Xy.
Definición 2
Para cualquier objeto Os,
ys = yo implica que Os contiene información esterilizada
ys < > yo implica que Os contiene información no esterilizada.
Axioma 5
yo ↔ xo
Si un objeto tiene la etiqueta de seguridad y o entonces también debe llevar la
etiqueta xo y viceversa. T2 indica que todos los sujetos pueden accesar al
conjunto de datos de la empresa.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Axioma 6
El acceso de escritura a cualquier objeto Ob, por cualquier sujeto Su es
permitido si y sólo si N´(u,b)=true y no existe ningún objeto Oa
(N´(u,a=true)) cual puede ser leído por Su para los que:
ya < > yb and ya < > yo
Teorema 4
El flujo de información no esterilizada se limita a su propia conjunto de datos de
la empresa; sin embargo, la información esterilizada puede fluir libremente por
todo el sistema.
Axioma 7
Un usuario Su, puede ejecutar un proceso pf si y sólo si (u,f) es un miembro de
A.
Axioma 8
Un proceso pf puede solo accesar a un objeto Or si
Zf es un subconjunto de pzf
Las reglas de acceso son hasta ahora gobernadas por A2-A4 y A6-A8. En particular un
estado inicialmente seguro existe cuando ningún usuario haya accesado cualquier
objeto (A3) y la primera vez de su acceso de cualquier usuario a cualquier objeto es
totalmente sin restricciones (A4). Los usuarios pueden, sin embargo, accesar a aquel
sujeto (Su and Or respectivamente) vía algún proceso pf donde (u,f) está en A para
cuyo zr es subconjunto de pzf (A7-A8).
Los usuarios pueden entonces accesar a algún otro objeto Or vía pf si y sólo si ∀
N(u,c)=true:
((u,f) ∊ A) and (z A) and (zr ⊆ pzf) and ((xc < > xr or yc = yr )) A2, A7, A8
6. Modelo de Goguen-Meseguer
El modelo tiene las siguientes propiedades:
• Introduce una teoría de autómatas simple y general para modelar sistemas se-
guros.
• Muestra el uso de las capacidades abstractas para modelar los aspectos dinámi-
cos de seguridad de los sistemas.
• El enfoque no solo se aplica a sistemas operativos, sino a sistemas de mensajes
y a sistemas de bases de datos.
• Introduce un concepto general de políticas de seguridad, tal que permite a las
políticas incluir seguridad multinivel (MLS), paso de capacidades, confinamiento,
acceso discrecional, acceso multiusuario/multillave, distribución automática, ca-
nales autorizados y degradación.
• Proporciona un formalismo para la especificación de políticas seguras.
• Proporciona técnicas para probar que un determinado sistema satisface una de-
terminada política.
Definiciones básicas:
1. Un grupo de usuarios, usando un cierto conjunto de comandos, no interfiere con
otro grupo de usuarios si lo que hace el primero grupo con estos comandos no
afectan a lo que el segundo grupo de usuarios puede ver.
2. Dado un estado seguro inicial, el sistema es seguro en multinivel si el primer
usuario no es interferido por el segundo usuario, a menos que el nivel del prime-
ro sea menos que o igual que el segundo usuario.
Definición 1
Una máquina de estado M consiste de lo siguiente:
• un conjunto U cuyos elementos llamados “usuarios” -sujetos
• un conjunto S cuyos elementos llamados “estados”
• un conjunto C cuyos elementos llamados “comandos de estado”
• un conjunto Out cuyos elementos llamados “salidas”
• junto con
◦ Una función de Salida out: SxU --> Out
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Definición 2
Un Sistema de Capacidades M consiste de:
• Un conjunto U cuyos elementos son llamados “usuarios”
• Un conjunto S cuyos elementos son llamados “estados”
• Un conjunto SC cuyos elementos son llamados “comandos de estados”
• Un conjunto Out cuyos elementos son llamados “salidas”
• Un conjunto Capt cuyos elementos son llamados “tablas de capacidades”
• Un conjunto CC cuyos elementos son llamados “comandos de capacidades”
junto con:
◦ Una función out: S x Capt x U --> Out (función de salida)
◦ Una función do: S x Capt x U x SC --> S (función de estado de
transición)
◦ Una función cdo: Capt x U x CC --> Capt (función de capacidades de
transición)
◦ Las constantes t0∊ A) and (zCapt y s0∊ A) and (zS que son tabla de capacidad inicial y
estado de la máquina inicial, respectivamente.
Nota3ρ)-min: C = CC ∪ SC SC
Esta definida, para s∊ A) and (zS, t∊ A) and (zCapt, u∊ A) and (zU por
Podemos por lo tanto extender la función de transición del sistema en el camino clásico
para cadenas de entrada, definiendo:
csdo: S x Capt x (UxC)* --> S x Capt
con las ecuaciones: csdo (s,t,NIL) = (s,t)
y csdo (s,t,w.(u,c)) = csdo (csdo(s,t,w),u,c)
Para s∊ A) and (zS, t∊ A) and (zCapt, u∊ A) and (zU, c∊ A) and (zC y w∊ A) and (z(UxC)*, donde NIL denota la cadena vacía y el
“punto” denota la concatenación de las cadenas.
Podemos usar la notación
[ [w] ] = csdo (t0, c0, w)
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Políticas Estáticas
Notaciones:
Dado una máquina de estados M, w∊ A) and (z(UxC)*, y u∊ A) and (zU. Definimos [[ w ]]u como “la salida
de u después de hacer w sobre M”, es decir,
[[w]] u = out ([[w]],u)
Tenga en cuenta que M puede tener una estructura adicional como un sistema de
capacidad. En ese caso, el espacio de estados tiene la forma SxCapt, el conjunto C de
los comandos es una unión disjunta CC U SC de estados y los comandos que cambian
la tabla de capacidad, y la función de transición de estado es csdo.
Definición 3
Dado G⊆ U un “grupo” de usuarios, A⊆ C una capacidad, y w∊ A) and (z(UxC)*. Entonces
decimos que PG(w) denota la subsecuencia de w obtenida por la eliminación de
aquellos pares (u,c) con u en G. Similarmente, decimos que PA(w) denota la
subsecuencia de w obtenida eliminando aquellos pares (u,c) con c en A.
Combinando estos dos, decimos que PG, A(w) denota la subsecuencia de w
obtenida eliminando los pares (u,c) con u en G y c en A.
Por ejemplo:
Si G ={ u , v } y A = { c1 , c2 }, entonces
PG,A ((u’,cl)(u,c3)(u,c2)(v’,c1)) =
(u’,c1)(u,c3)(v’,c1,)
Definición 4
Dada una máquina de estados M y los conjuntos de usuarios G y G´, decimos
que G no hace interferencia con (o no interfiere con) G´, escribiendo G :| G´, si y
sólo si ∀w∊ A) and (z(UxC)* y u∊ A) and (zG,
[[w]] u = [ [PG(w) ]] u
En general, los usuarios en G con capacidad A no interfieren con los usuarios en G´,
escribiendo A,G :| G´ si y sólo si ∀w∊ A) and (z(UxC)* y u∊ A) and (zG,
[[w]] u = [ [PG,A(w) ]] u
Definición 5
Una política de seguridad es un conjunto de afirmaciones de no interferencia.
x
SISTEMAS DISTRIBUIDOS
Teoría Fundamental para Sistemas Distribuidos
Definición 6
Dado los conjunto de usuarios G y G`, A el conjunto de comandos, y P un
predicado definido sobre (Ux C)*. Entonces G usando A no interfiere con G` bajo
la condición de P, escrito
G,A:| G` si P
si y sólo si ∀ u`∊ A) and (z G`, ∀w∊ A) and (z(UxC)*
[[w]] u` = [ [P(w) ]] u`
donde P es definido por P(λ)= λ)= λ)= λ
donde λ)= λ es la cadena vacía, y P(o1...on)=o`1...o`n
donde o´i= λ)= λ si P(o´1...o´i-1) y o´i=(u,a)
con u∊ A) and (zG y a ∊ A) and (zA y o´i= oi
Referencias
[1] Elliott Bell, Leonard J. LaPadula. “Secure Computer Systems: Mathematical
Foundations”. National Technical Information Service. Report ESD-TR-73-278. Vol. 1.
1973.
[2] K. J. Biba. “Integrity Considerations for Secure Computer Systems”. MITRE
Technical Report. MTR-3153. 1975.
[3] David D. Clark, David R. Wilson. “A Comparison of Commercial and Militar
Computer Security Policies”. IEEE. pp. 184-194. 1987.
[4] Goguen and Meseguer. “Security Policies and Security Models”. IEEE. pp. 11-20.
1982.
[5] David F.C. Brewer and Michael J. Nash. “The Chinese Wall Security Policy”. IEEE.
pp. 206-214. 1989.
[6] TrustedBSD. http://www.trustedbsd.org/