Title: Metodologa de desarrollo de aplicaciones concurrentes
1Metodología de desarrollo de aplicaciones
concurrentes
- Una metodología define
- Tareas a realizar
- Notaciones arquitectura de la aplicación con
distintos niveles de abstracción - Tareas
- Análisis y Especificación
- Identificación de recursos y tareas
- Refinamiento de los recursos
- Diseño basado en una primitiva (objetos
protegidos, paso de mensajes, etc) - Implementación
2Análisis y Especificación
- Descripción del problema
- Se deben identificar
- Requisitos de seguridad
- Operaciones excluyentes y simultáneas
- Requisitos de vivacidad
- Equidad/Prioridad en el acceso a los recursos
3Identificación de recursos y tareas
- Especificación informal de las tareas
- Recursos en el programa variables de TipoRecurso
- Grafo de recursos y tareas
Tarea A
Tarea B(i)
Nombre recurso
Estado interno (TipoRecurso)
op1
op3
op2
4Identificación de recursos y tareas (ii)
- Un recurso se define por medio de un TAD
concurrente - Interfaz operaciones o acciones públicas
- Estado interno Estado explícito Estado
implícito - Estado explícito colección de campos
(TipoRecurso) - Estado implícito estado de las operaciones
invocadas (bloqueadas o ejecutándose) - Operación procedimiento con parámetros de E, S,
y E/S. - Operaciones mutuamente excluyentes.
5Identificación de recursos y tareas (y iii)
- Similitudes con TADs
- Encapsulamiento
- Reusabilidad
- Especificación formal ? demostrabilidad
- Diferencias con TADs
- El estado del recurso no es independiente del
mundo externo (estado de las operaciones
invocadas). - No se pueden comparar (igualdad).
- No se pueden copiar.
6Refinamiento de los recursos
- Se especifican formalmente los recursos mediante
C-TADSOLs. - Notación extendida con aspectos de sincronización
(con respecto a los TADs).
7Sintaxis C-TADSOL
- C-TADSOL Nombre Recurso
- USA TipoExterno
- OPERACIONES
- .......................
- ACCIÓN Operacioni Tipo Recursoes xTipo1e x
. . . x Tipons - ......................
- SEMANTICA
- DOMINIO
- TIPO Tipo Recurso . . .
- DONDE Tipo Adicional ..
- INVARIANTE Fórmula que debe ser cierta antes y
después de ejecutar una operación.
INICIAL(r) Fórmula que especifica el valor
inicial del recurso .........................
PRE Precondición PRE P(r, a1, ..... ,
an) CPRE Precondición de
concurrencia CPRE P(r, a1, .... , an)
Operacion Recursoi (r, a1, . . . , an) POST
Postcondición de la operación POST
Q(r, a1, .... , an) .........................
8Sintaxis de las fórmulas
- Se usan fórmulas en Invariante, inicial, PRE,
CPRE y POST. - Lenguaje basado en lógica de primer orden
extendido con operadores aritméticos, conjuntos y
secuencias.
9Declaración de operaciones
- Sólo se especifican operaciones públicas.
- Representan el único medio para acceder al estado
del recurso. - Son mutuamente excluyentes.
- Son acciones porque siempre conllevan un cambio
de estado del recurso. - El primer parámetro es siempre el propio recurso,
y siempre es de entrada/salida.
ACCIÓN Operacioni Tipo Recursoes xTipo1e x
. . . x Tipons
10Declaración de dominio
- Define el TipoRecurso y los tipos auxiliares
necesarios. - TipoRecurso similar a un registro de un lenguaje
imperativo (campos). - El TipoRecurso debe reflejar el estado del
recurso - Datos
- Información necesaria para la sincronización.
- Invariante
- Restricción sobre el universo de valores descrito
en el TipoRecurso. - Se debe cumplir antes y después de ejecutar una
operación, pero no tiene por qué cumplirse
mientras se ejecuta.
11Estado inicial del recurso
- Establece los valores iniciales para los campos
del TipoRecurso. - I(r) es una fórmula y r es una variable de
TipoRecurso.
INICIAL(r) I(r)
12Especificación de las operaciones
- Precondición fórmula que debe ser cierta para
poder ejecutar una operación - Depende de los datos de entrada y el estado del
recurso. - Se desglosa en
- CPRE si no es cierta en el momento de la
llamada, se bloquea al proceso llamante. - PRE restricciones de uso.
- Postcondición fórmula que debe ser cierta tras
ejecutar la operación. - Depende de los datos de entrada, salida y el
estado de recurso. - No se especifica el momento en el que serán
desbloqueadas las operaciones.
13Especificación de las operaciones (ii)
- Aspectos de notación para las POSTs
- Valores de entrada y salida se usan cuando en
una fórmula hacemos referencia al valor de una
variable antes y después de ejecutar una
operación superíndices ent y sal. - Omisión de valores que no cambian
- POST r.asal r.aent 1 ? r.bsal r.bent
- r.csal r.cent ? r.dsal r.dent ? r.esal
r.eent - Se abrevia así
- POST rsal rent \ r.asal r.aent 1
14C-TADSOL del semáforo
CPRE cierto Init(s,v) POST ssal v CPRE
cierto Signal(s) POST ssal sent 1 CPRE s
gt 0 Wait(s) POST ssal sent - 1
- C-TADSOL Semáforo
- OPERACIONES
- ACCIÓN Init TipoSemaforos x Ne
- ACCIÓN Signal TipoSemaforoes
- ACCIÓN Wait TipoSemaforoes
- SEMANTICA
- DOMINIO
- TIPO TipoSemaforo N
- INVARIANTE cierto
- INICIAL(s) cierto
15C-TADSOL del aparcamiento
- C-TADSOL Aparcamiento
- OPERACIONES
- ACCIÓN Entrar TipoAparcamientoes
- ACCIÓN Salir TipoAparcamientoes
- SEMANTICA
- DOMINIO
- TIPO TipoAparcamiento 0..Max
- DONDE Max ...
- INVARIANTE cierto
- INICIAL(a) a 0
-
CPRE a lt Max Entrar(a) POST asal aent 1
CPRE cierto Salir(a) POST asal aent - 1
16C-TADSOL del Buffer con 1 dato
- C-TADSOL Almacen1Dato
- USA TipoDato
- OPERACIONES
- ACCIÓN Poner TipoBufferes xTipoDatoe
- ACCIÓN Tomar TipoBufferes xTipoDatos
- SEMANTICA
- DOMINIO
- TIPO TipoBuffer (Dato TipoDato x HayDato B
) - INVARIANTE cierto
- INICIAL(b) ?b.HayDato
-
CPRE b.HayDato Tomar(b, e) POST esal
b.Dato ? ?b.HayDatosal CPRE ?b.HayDato
Poner(b, e) POST b.Datosal eent ?
b.HayDatosal
17C-TADSOL del Buffer
- C-TADSOL Buffer
- USA TipoDato
- OPERACIONES
- ACCIÓN Poner TipoBufferes xTipoDatoe
- ACCIÓN Tomar TipoBufferes xTipoDatos
- SEMANTICA
- DOMINIO
- TIPO TipoBuffer Secuencia(TipoDato)
- INVARIANTE ?b?TipoBuffer ? Longitud(b) ltMAX
- DONDE MAX ...
- INICIAL(b) Longitud(b) 0
CPRE El buffer no está vacío CPRE Longitud(b)
gt 0 Tomar(b, d) POST Retiramos un elemento del
buffer POST l Longitud(bent) ? bent(1) d
? bsal bent(2..l) CPRE El buffer no está
lleno CPRE Longitud(b) lt MAX Poner(b, d)
POST Añadimos un elemento al buffer POST l
Longitud(bent) Longitud(bsal) l 1 ?
bsal(l 1) d ? bsal(1..l) bent