SINCRONIZACI - PowerPoint PPT Presentation

1 / 55
About This Presentation
Title:

SINCRONIZACI

Description:

La informaci n relevante se distribuye entre. varias m quinas. ... de WWV, el tiempo debe colocarse manualmente y luego sincronizar el resto de los relojes. ... – PowerPoint PPT presentation

Number of Views:61
Avg rating:3.0/5.0
Slides: 56
Provided by: Joaquin62
Category:

less

Transcript and Presenter's Notes

Title: SINCRONIZACI


1
SINCRONIZACIÓN EN SISTEMAS DISTRIBUIDOS
  • Sistemas de operación II
  • Abril-Julio 2012
  • Yudith Cardinale

2
INDICE
  • Introducción
  • Relojes (timers)
  • Sincronización de relojes lógicos
  • Sincronización de relojes físicos
  • Exclusión mutua distribuida
  • Algoritmos de elección de coordinador

3
INTRODUCCIÓN
  • La información relevante se distribuye entre
  • varias máquinas.
  • Los procesos toman las decisiones sólo con
  • base en la información disponible en forma local.
  • Debe evitarse un punto de fallo único en el
  • sistema.
  • No existe un reloj común o alguna otra fuente
  • precisa del tiempo global.

4
INTRODUCCIÓN
  • Tiempos y estados globales.
  • Exclusión mutua.
  • Algoritmos de elección. Problemas de
  • consenso
  • Operaciones atómicas distribuidas
  • Transacciones

5
(No Transcript)
6
RELOJES (Timers)
  • Cristal de cuarzo asociado a un dispositivo
    electrónico (chip) que cuenta oscilaciones.
  • C contador, se decrementa con cada
    oscilación.
  • HR Holding register, con este valor se
    inicializa C cada vez que llegue a 0.

HR
C
  • Cuando C llega a 0, se genera una interrupción
    (tick de reloj), la cual puede ser manejada por
    software (contando los ticks de reloj) y escalada
    a una unidad de tiempo conveniente.

7
RELOJES (Timers)
  • Pueden dos eventos tener el mismo registro de
    reloj?
  • Depende de la resolución del reloj y de la
    frecuencia de ocurrencia de eventos.
  • Aunque la frecuencia a la cual un cristal de
    cuarzo oscila es usualmente estable, puede variar
    por varios factores (temperatura, tamaño del
    cristal, forma de corte), presentando un desfase
    de reloj.
  • El desfase de reloj es el cambio en el offset
    (diferencia en lectura) entre el reloj y un reloj
    perfecto de referencia, por unidad de tiempo
    medida.

8
SINCRONIZACIÓN DE RELOJES
  • Los relojes físicos (de hardware) de un sistema
    distribuido no están sincronizados
  • Necesidad de sincronizacion para
  • Aplicaciones en tiempo real
  • Ordenacion natural de eventos distribuidos
  • Concepto de sincronizacion
  • Mantener relojes sincronizados entre si
  • Mantener relojes sincronizados con la realidad

9
SINCRONIZACIÓN DE RELOJES LÓGICOS
  • El interés en las aplicaciones distribuidas, no
    necesariamente es el tiempo exacto, sino la
    secuencia en que ocurren los eventos. Así, se
    pueden manejar relojes lógicos, en lugar de
    relojes físicos.
  • Reloj lógicocontador de software que se
    incrementa monótonamente, cuyo valor no necesita
    estar relacionado con ningún reloj físico.
  • Generalmente se asocia a cada proceso un reloj
    lógico.

10
SINCRONIZACIÓN DE RELOJES LÓGICOS
  • Algoritmo de Lamport
  • Se basa en
  • 1. Si dos eventos ocurrieron en el mismo proceso,
    entonces ellos ocurrieron en el orden en que
    fueron observados. Notación x p y , x e y
    son eventos que ocurren en el proceso p y x pasó
    antes que y
  • 2. Siempre que un mensaje es enviado entre
    procesos, el evento de enviar el mensaje ocurre
    antes que el evento de recibirlo.

11
SINCRONIZACIÓN DE RELOJES LÓGICOS
  • Lamport generalizó estas dos ordenamientos con la
    relación pasó antes(happened before) , se
    denota con y se define como
  • PA1 Si existe un proceso P, tal que x p
    y, entonces x y.
  • PA2 Para cualquier mensaje m,
  • send(m) rcv(m).
  • PA3 Si x,y,z son eventos tales que x y,
  • y z, entonces x z (propiedad de
    transitividad)

12
SINCRONIZACIÓN DE RELOJES LÓGICOS
  • a b, b c, c d, d f
  • Los eventos a y e son paralelos
  • a e

a
b
P0
c
d
P1
  • Si cada proceso tiene un reloj lógico Cp, se
    puede asignar un valor de tiempo a cada evento a
    Cp(a).
  • Estos relojes lógicos deben tener las siguientes
    propiedades
  • Si a b, entonces Cp(a) lt Cp(b).
  • El valor de Cp debe ser siempre incrementado,
    nunca deben decrementarse.

e
f
P2
13
SINCRONIZACIÓN DE RELOJES LÓGICOS
  • Algoritmo de Ordenamiento Causal
  • LC1 Cp es incrementado antes que cada evento
    sea ejecutado Cp Cp 1.
  • LC2 Cuando un proceso p envía un mensaje m,
    coloca en el mensaje el valor t Cp.
  • LC3 Cuando un proceso q recibe (m,t), q calcula
    Cqmax(Cq,t) y aplica LC1.
  • Es verdad que si Cp(a) lt Cq(b), entonces a
    b?

14
SINCRONIZACIÓN DE RELOJES LÓGICOS
  • Veamos con un ejemplo cómo funciona el algoritmo
  • Tres relojes no sincronizados
    Sincronización de relojes

P1
P2
P3
P1
P2
P3
0
0
0
0
0
0
a
a
A
A
6
8
10
6
8
10
b
b
12
16
20
12
16
20
c
c
B
B
18
24
30
18
24
30
d
d
24
32
40
24
32
40
30
40
50
30
40
50
e
e
C
C
36
48
60
36
48
60
f
f
42
56
70
42
61
70
g
g
D
D
48
64
80
48
69
80
h
h
54
72
90
70
77
90
60
80
100
76
85
100
15
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Se requiere
  • Sincronizar los relojes físicos con la hora real.
  • Sincronizar los relojes físicos ente si.
  • Se toma en cuenta el Tiempo Universal Coordinado
    (UTC)

16
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Algunas consideraciones importantes
  • El Tiempo Atómico Internacional (TAI) es
    mantenido por el BIH (Bureau International de
    lHeure) en París.
  • Un conjunto de laboratorios mantienen el tiempo
    contando las transiciones del átomo de
    cesium-133. Considerando que un segundo atómico
    es 9.192.631.770 transiciones del cesium-133.
  • Periódicamente cada laboratorio envía al BIH el
    número de ticks de su reloj (comenzaron a
    contarse desde 1ero. de enero de 1958). El BIH
    calcula el TAI promediando las lecturas de todos
    los laboratorios.

17
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Algunas consideraciones importantes (cont.)
  • Segundo solar 1/86.400 veces el día solar.
  • El Tiempo Universal Coordinado (UTC) es un
    estándar internacional basado en TAI y usa unos
    segundos de saltos para sincronizar el TAI con
    los segundos solares.
  • Para proveer el UTC, el Instituto Internacional
    de Tiempo Estándar (NIST), tiene a disposición
    una estación de radio de onda corta WWV.
  • Existen otras estaciones satelitales que también
    dan servicio UTC NTP (Internet), Satélite (GEOS
    y GPS).

18
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Si se requiere sincronizar los relojes del
    sistema con el tiempo real, se usa el UTC. Para
    esto
  • Una máquina debe tener un receptor para WWV y
    sincronizar el resto de los relojes con este
    tiempo.
  • Tener varios receptores para WWV, GEOS.
    Establecer un rango (intervalo de tiempo) en el
    cual UTC cae. Se requiere un acuerdo entre las
    máquinas receptoras para generar un solo
    intervalo.
  • Si no hay máquina con receptora de WWV, el tiempo
    debe colocarse manualmente y luego sincronizar el
    resto de los relojes.

19
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • TAI Vs Segundos Solares

20
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Cada cuánto se debe sincronizar?
  • Cada máquina tiene un reloj que causa H
    interrupciones por segundos. En la práctica se
    obtiene un error ?.
  • En cada interrupción se suma 1 al reloj de
    software (C) que mantiene el número de ticks
    desde algún tiempo en el pasado.
  • La idea es que si UTCt, en la máquina p se
    cumpla que Cp(t)t para todo p,t. Si esto es
    verdad, se cumple que dc/dt1.
  • Se cumple que 1- ? lt dc/dt lt 1 ?

21
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Cada cuánto se debe sincronizar?
  • Donde ? lo provee el fabricante y se llama tasa
    máxima de alejamiento.
  • La idea es sincronizar el reloj con UTC y que
    entre ellos no haya una diferencia mayor de ?.
    Para esto los relojes deben ser resincronizados
    cada ?????segundos.

22
SINCRONIZACIÓN DE RELOJES FÍSICOS
  • Cada cuánto se debe sincronizar?

23
ALGORITMOS DE SINCRONIZACIÓN
  • Algoritmo de Cristian

Servidor de Tiempo con receptor WWV
ST
mr
mt
  • ST recibe solicitudes de tiempo y responde tan
    rápido como pueda.

mt
mr
P1
P2
P0
  • Qué hace el enviador cuando recibe la
    respuesta?
  • a. Colocar su reloj en el CUTC que le envía ST.
  • Problemas
  • Si CUTC es menor que el Cp, se estará
    devolviendo.
  • No se considera el tiempo de transmisión de los
    mensajes.

24
ALGORITMOS DE SINCRONIZACIÓN
  • Algoritmo de Cristian
  • Qué hace el enviador cuando recibe la
    respuesta?
  • b. Ajustar su reloj CUTC gradualmente
  • En lugar de sumar 1 al Cp con cada tick de
    reloj, se suma un valor mayor (si Cp lt CUTC) o
    menor (si Cp gt CUTC).
  • Ejemplo
  • 1 seg H interrupciones, así al sumar 1 a Cp se
    están sumando 1/H segs.
  • 1 seg 100 interrupciones, así al sumar 1 a Cp
    se suman 10 msegs.
  • Si en lugar de sumar 1, se suma 0.9 se estarán
    adicionando 9 msegs.
  • Si en lugar de sumar 1, se suma 1.1 se estarán
    adicionando 11 msegs.
  • Problema No considera el tiempo de transmisión
    de los mensajes.

25
ALGORITMOS DE SINCRONIZACIÓN
  • Algoritmo de Cristian
  • Solución Estimar el tiempo de propagación
    Tpropag.
  • Enviador Servidor del tiempo
  • T0
  • TI
  • T1
  • T0 y T1 se miden con el mismo reloj, así
  • Tpropag (T1 T0)/2.
  • Si se conoce TI (tiempo de atención de la
    interrupción), Tpropag (T1 -
    T0 - TI)/2.

26
ALGORITMOS DE SINCRONIZACIÓN
Algoritmo de Berkeley
  • Se basa en un servidor de tiempo activo (demonio
    del tiempo) que realiza un polling a cada
    máquina periódicamente para preguntar el tiempo
    que tienen.
  • Es útil, aún si no hay una máquina receptora
    para WWV. El tiempo debe ser colocado
    manualmente por el operador.

Demonio del tiempo
Demonio del tiempo
Demonio del tiempo
300
0
300
300
300
5
300
-20
300
15
25
-10
325
325
325
250
250
250
27
ALGORITMOS DE SINCRONIZACIÓN
Algoritmo de Berkeley
  • Qué ventaja tiene transmitir el ajuste y no la
    hora?
  • Qué pasa si hay relojes con desfases muy
    grandes?
  • El demonio toma un promedio tolerante a fallas.
    Esto es, el subconjunto de relojes seleccionados,
    para promediar, son aquellos que no difieran
    entre sí en una cantidad especificada.

28
ALGORITMOS DE SINCRONIZACIÓN
Algoritmo de Promediación
  • Es distribuido.
  • La idea es dividir el tiempo en intervalos de
    resincronización de longitud fija.
  • El i-th intervalo comienza en T0 iR y corre
    hasta T0 (i1)R, donde T0 es el tiempo inicial
    del pasado y R un parámetro del sistema.

Pi
T0
T1
T2
...
Tn
R
R
Sinc
Sinc
Sinc
Sinc
29
ALGORITMOS DE SINCRONIZACIÓN
Algoritmo de Promediación
  • Al comienzo de cada intervalo cada máquina
    realiza un broadcast de su tiempo actual. Inicia
    un timerS para recolectar los broadcast de las
    otras máquinas.
  • Corregir cada mensaje adicionando un estimado de
    Tpropag.
  • Eliminar los valores más altos y más bajos.
  • Promediar los valores restantes.

30
(No Transcript)
31
EXCLUSIÓN MUTUA DISTRIBUIDA
Requerimientos para proveer exclusión mutua
  • EM1 (seguridad) A lo más un proceso puede
    ejecutarse en su sección crítica (sc) a la vez.
  • EM2 (vitalidad)
  • A un proceso que requiere entrada a su sc ,
    eventualmente se le concederá.
  • Cualquier proceso que se ejecute en su sc,
    eventualmente la abandonar.
  • (Libre de deadlock e inanición)
  • EM3 (ordenamiento) La entrada a la sc debe ser
    otorgada en orden pasó antes.

32
ALGORITMOS DE EXCLUSIÓN MUTUA
Algoritmo Centralizado (un coordinador)
  • Si un proceso quiere entrar a su región crítica
    envía un mensaje de requerimiento al coordinador
    indicando la sc a la que quiere entrar.
  • Si ningún proceso está en esa sc, el coordinador
    envía un mensaje de otorgamiento.
  • Si hay otro proceso en la sc encola su petición
    y
  • Le envía un mensaje de negación o
  • No le envía nada y el solicitante se bloquea.

33
ALGORITMOS DE EXCLUSIÓN MUTUA
Algoritmo Centralizado (un coordinador)
  • Cuando un proceso abandona su sc, le envía un
    mensaje al coordinador de liberación de sc. El
    coordinador busca la siguiente petición encolada
    y envía un mensaje de otorgamiento
  • Si el cliente no estaba bloqueado, tendrá que
    hacer polling.
  • Si el cliente estaba bloqueado se desbloquea y
    entra a su sc

Coordinador
P4
P2
P1
1. request
sc1
sc2
2. release
3. grant
P1
P2
P3
P4
34
ALGORITMOS DE EXCLUSIÓN MUTUA
Algoritmo Centralizado (un coordinador)
  • Ventajas
  • Se puede generalizar para asignación de recursos
    en general.
  • Es justo, las peticiones son atendidas en el
    orden que son realizadas.
  • Requiere sólo de tres mensajes (requerir,
    otorgar, liberar)
  • Desventajas
  • Centralizado
  • Si el coordinador no envía respuesta ante la
    negación, el solicitante no sabe si la respuesta
    no le llega por negación o por falla.
  • Qué pasa si un cliente falla dentro de una sc?

35
ALGORITMOS DE EXCLUSIÓN MUTUA
  • Algoritmo Distribuido (Ricart y Agrawala)
  • La idea básica del algoritmo es que el proceso
  • que requiere entrar a su Sección Crítica envía
  • un mensaje a todos los procesos y entra,
  • únicamente, cuando recibe un reconocimiento
  • de todos ellos.

. . .
36
ALGORITMOS DE EXCLUSIÓN MUTUA
  • Algoritmo Distribuido (Ricart y Agrawala)
  • Construye un mensaje con el nombre de la sección
    crítica, su número de proceso y la hora actual.
  • Envía el mensaje a todos los demás procesos,
    incluyéndose a sí mismo (Se supone un envío
    confiable).
  • Cuando un proceso recibe un mensaje de solicitud
    de otro proceso
  • 1. Si el receptor no está en la región crítica y
  • no desea entrar a ella -gt OK
  • 2. Si el receptor ya está en la región crítica
    no
  • responde sino que incluye la solicitud en
    una lista.
  • 3. Si el receptor desea entrar a la región
    crítica pero no
  • lo ha logrado compara la marca de tiempo del
    mensaje
  • recibido con la marca del mensaje que envió a
    cada
  • uno. Si el suyo es menor encola la petición,
    si no envía OK.

37
ALGORITMOS DE EXCLUSIÓN MUTUA
  • Algoritmo Distribuido (Ricart y Agrawala)
  • Dos procesos quieren hacer uso de la Sección
  • Crítica al mismo tiempo. En particular, los
    procesos 0
  • y 2 son los involucrados.

8
8
8
12
12
12
38
ALGORITMOS DE EXCLUSIÓN MUTUA
  • Algoritmo Distribuido (Ricart y Agrawala)

Entra a la Sección Crítica
OK
OK
OK
OK
39
ALGORITMOS DE EXCLUSIÓN MUTUA
  • Algoritmo Distribuido (Ricart y Agrawala)
  • Problemas
  • 1. Si cualquier proceso falla no es posible
  • responder a las peticiones hechas (se puede
  • interpretar incorrectamente). Probabilidad de
  • falla contra un proceso coordinador es n veces
  • mayor.
  • 2. Primitiva de comunicación de membresía de
  • grupo.

40
ALGORITMOS DE EXCLUSIÓN MUTUA
Algoritmo basado en token-ring
  • La idea es ordenar los n procesos en un anillo
    lógico, y hacer pasar un token en la dirección
    del reloj.
  • Si un proceso quiere entrar a su sc, esperará el
    token y lo retendrá. Al salir de la sc, pasará el
    token a su vecino.
  • Si un proceso que no quiere entrar a su sc
    recibe el token, lo pasa inmediatamente al
    vecino.
  • Se requerirán de 1 a n-1 mensajes para obtener
    el token.

41
ALGORITMOS DE EXCLUSIÓN MUTUA
Algoritmo basado en token-ring
  • Ventajas
  • Cumple con ME1 y ME2, pero no con ME3.
  • Requiere menos mensajes que el algoritmo
    distribuido.
  • Desventajas
  • Si un proceso falla hay que rehacer el anillo.
  • Si falla el proceso que tiene el token, se deberá
    crear un nuevo token (cuidado con dos tokens!)

42
(No Transcript)
43
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Una elección es un procedimiento para
    seleccionar un proceso de un grupo, para que
    ejecute algunas operaciones específicas (nuevo
    coordinador, tome la responsabilidad de un
    proceso que ha fallado).
  • El requerimiento principal para la selección es
    que el proceso electo sea único, aún cuando
    varios procesos llamen a la elección
    simultáneamente, y que todos sepan cuál es el
    proceso electo.

44
ALGORITMOS DE ELECCIÓN DE COORDINADOR
Algoritmo del grandulón
  • Puede ser usado cuando los miembros del grupo
    conocen las identidades y direcciones de los
    otros procesos.
  • El algoritmo selecciona el proceso sobreviviente
    con el identificador mayor.
  • Se asume que la comunicación es confiable, pero
    que los procesos pueden fallar durante una
    elección.
  • Hay tres tipos de mensajes en este algoritmo
    elección, respuesta y coordinador.

45
ALGORITMOS DE ELECCIÓN DE COORDINADOR
Algoritmo del grandulón
  • La elección puede comenzarla cualquier proceso P
    que detecte que el coordinador ha fallado.
  • El proceso P envía un mensaje de elección a
    todos aquellos procesos que tengan un
    identificador más alto que el suyo y espera un
    mensaje de respuesta.
  • Si no le llega ningún mensaje de respuesta
    dentro un período de tiempo determinado, el
    proceso se considera coordinador y envía, a todos
    los procesos con identificadores menores, un
    mensaje coordinador anunciándose como nuevo
    coordinador.

46
ALGORITMOS DE ELECCIÓN DE COORDINADOR
Algoritmo del grandulón
  • Si le llega al menos una respuesta, espera un
    tiempo determinado por un mensaje coordinador. Si
    al terminar ese tiempo no le llega, inicia una
    nueva elección.
  • Si un proceso recibe un mensaje coordinador,
    registra el identificador y comenzará a
    comunicarse con él cuando necesite de sus
    servicios.
  • Si un proceso recibe un mensaje de elección,
    envía un mensaje de respuesta y comienza una
    nueva elección.
  • Cuando un proceso que falló es recuperado, éste
    comienza una elección, aún cuando el coordinador
    no haya fallado.

47
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo del grandulón

E
Estado 1 Falla el coordinador
P4
R
P1
P3
P4
E
P2
R
E
P1
P3
P4
Estado 2P2 y P3 inician nueva
elección
E
R
P2
E
C
Estado 3 P3 es coordinador pero
falla antes de anunciarlo
P1
P3
P2
48
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo del grandulón

C
Eventualmente.... p1 inicio de nuevo
elección y p2 es coordinador.
Coord.
P1
P2
  • En el mejor caso, el proceso con el segundo
    identificador mayor se da cuenta de la falla del
    coordinador, y sólo se envían n-2 mensajes
    coordinador.
  • En el peor caso, el proceso con menor
    identificador se da cuenta de la falla del
    coordinador, y se requieren O(n2) mensajes.

49
ALGORITMOS DE ELECCIÓN DE COORDINADOR
Algoritmo en anillo lógico (Chang y Roberts)
  • No se requiere que los procesos conozcan los ids
    de los demás procesos, sólo el del vecino en la
    dirección del anillo.
  • Se elige como coordinador el proceso con el id
    mayor.
  • Cualquier proceso P puede iniciar la elección,
    coloca su id en un mensaje de elección y lo pasa
    a su vecino.
  • Si el vecino ha fallado, el mensaje es pasado al
    siguiente vecino que esté corriendo.
  • Cuando un proceso recibe un mensaje de elección,
    adiciona si id en el mensaje y lo pasa.

50
ALGORITMOS DE ELECCIÓN DE COORDINADOR
Algoritmo basado en anillo lógico
  • Eventualmente, el mensaje regresará al proceso
    que inició la elección. Esto se detecta cuando
    recibe el mensaje de elección y su id está en la
    lista.
  • El mensaje es cambiado a coordinador y circula
    de nuevo en el anillo.
  • Qué sucede en ambos algoritmos si dos procesos
    simultáneamente inician elección?

51
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo basado en anillo lógico
  • No se conoce la identidad de los otros
    procesos a priori.
  • Sólo existe comunicación entre vecinos (en un
    sentido).
  • Se asume la funcionalidad y alcance de los
    procesos durante la elección.

52
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo en anillo (Variante Tanenbaum)

1.- Inicialmente cada proceso se marca como
no participante. 2.- Cualquier proceso puede
iniciar la elección. - Se marca como
participante. - Envía un mensaje de
elección con su ID al vecino.
53
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo en anillo (Variante Tanenbaum)

3.- Cuando se recibe un mensaje de elección
se compara el ID del mensaje con el propio.
- IDmensaje gt IDreceptor, se reenvía. -
IDmensaje lt IDreceptor, y el receptor no es
participante, se sustituye el
ID y se reenvía. - IDmensaje lt IDreceptor, y
el receptor es
participante, no se reenvía. - IDmensaje
IDreceptor, este proceso pasa a
ser el coordinador.
54
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo en anillo (Variante Tanenbaum)

4.- El coordinador se marca como no
participante, y envía un mensaje de elegido
con su ID. 5.- Cuando se recibe un mensaje de
elegido por cualquier otro proceso (no
coordinador) se marca como no participante y
reenvía el mensaje.
55
ALGORITMOS DE ELECCIÓN DE COORDINADOR
  • Algoritmo en anillo (Variante Tanenbaum)
  • Peor Caso
  • Cuando sólo un proceso empieza la elección y su
    vecino contrario es el de mayor ID.
  • Se envían 3n 1 mensajes en total.
  • n 1 hasta llegar al vecino de mayor ID
  • n mensajes de este vecino a través del anillo
  • n mensajes de elegido
Write a Comment
User Comments (0)
About PowerShow.com