Vous êtes sur la page 1sur 18

BORRADOR

DAVID ESTEBAN SASTRE

1. Introduccin a SDL
Esta seccin tiene como objetivo dar una visin general de lo que es el lenguaje
SDL, para que un usuario que lea esta memoria no se vea obligado a buscar informacin
externa sobre ello, ya que en varios puntos de este documento se presentarn algunos
ejemplos en SDL o se harn referencias al lenguaje. No es ni mucho menos un manual
completo, por lo que no entraremos en todos los detalles.
1.1 Qu es SDL?
SDL es un lenguaje orientado a la especificacin y descripcin de sistemas de
telecomunicaciones que funcionan en tiempo real (control de sistemas, protocolos de
comunicaciones, etc.). Adems, permite elegir entre dos formas sintcticas diferentes
para la representacin de sistemas.
La primera es SDL/GR (Graphical Representation), siendo un lenguaje grfico
que define la estructura y flujos de control del sistema. La segunda es SDL/PR (Phrase
Representation), el cual es un lenguaje de programacin. Principalmente nos
centraremos en la primera.
1.2 Entidades
El lenguaje SDL se compone de entidades en forma de jerarqua. La entidad
principal es el sistema, el cual est compuesto por bloques. Los bloques estn
conectados entre s y con el entorno mediante canales, los cuales transportan seales.
Dentro de los bloques tenemos procesos, los cuales estn definidos por una mquina de
estados finita extendida, con variables, parmetros, acciones y temporizadores. Los
procesos tambin se comunican entre s por medio de seales.
Podramos resumir la jerarqua de la siguiente forma:

Pg. 1 de 18

BORRADOR

DAVID ESTEBAN SASTRE

1.2.1 Sistema
Un sistema es la entidad de ms alto nivel y obviamente representa a todo el
sistema que queremos modelar. Est separado de su entorno por la frontera del sistema,
con el que se comunica por medio de seales. Adems, un sistema contiene un conjunto
de bloques, que tambin se comunican por medio de seales. Las seales, como ya
sabemos, se transmiten por medio de canales. El conjunto sistema/entorno se puede
resumir de la siguiente forma:

Asimismo, el contenido de un sistema se podra explicar con el siguiente


diagrama:

Pg. 2 de 18

BORRADOR

DAVID ESTEBAN SASTRE

1.2.2 Bloque
Un bloque contiene una o ms definiciones de proceso de un sistema (al menos
una). La misin de un bloque es agrupar procesos que realizan una cierta funcin. Como
ya sabemos, los bloques se comunican mediante canales por lo que la definicin de un
bloque proporcionar una interfaz de comunicacin esttica para comunicarse con otros
procesos. Adems establece un mbito para definiciones de proceso. Un ejemplo
sencillo podra ser el siguiente:

1.2.3 Proceso
Un proceso se define como una mquina de estados finita extendida. Como ya
sabemos, en una mquina de estados existen estados y transiciones entre ellos. En este
caso se da una transicin de un estado a otro siempre que se recibe una seal vlida de
otro proceso o del entorno. Al realizarse esa transicin, se pueden realizar operaciones
como manipular datos locales al proceso (se hace por medio de variables locales,
permitiendo cualquier tipo de datos incluido struct), enviar seales (a otros procesos o
al entorno), llamar a un procedimiento o incluso crear instancias de procesos. Las
seales recibidas por el proceso se denominan seales de entrada y las seales enviadas
se denominan seales de salida, aunque en el conjunto de seales de entrada vlidas
debemos aadir las seales del temporizador. Adems, una seal solo puede ser
consumida por un proceso cuando ste se encuentra en un estado.
Pueden existir varias instancias de un proceso ejecutndose concurrentemente, y
adems simultneamente con instancias de procesos distintos. Por otro lado, los
procesos tienen acceso al tiempo absoluto NOW, y pueden realizar clculos de tiempos.
Con respecto a la recepcin de seales de un proceso, debemos destacar que
cada proceso (mejor dicho, cada instancia) tiene una nica cola de seales de entrada
que no comparte con otros. Aparte de esto, para cada estado hay un conjunto de seales
de conservacin (saved signals). stas son seales que podremos evitar o conservar en
un estado concreto para posponer su procesamiento, ya que debido a que las seales se
almacenan en una cola FIFO puede ser que nos interese evitar ciertas seales para
consumirlas posteriormente y no interrumpir el funcionamiento del sistema. stas

Pg. 3 de 18

BORRADOR

DAVID ESTEBAN SASTRE

seales sern las primeras en ser consumidas una vez se haya realizado la transicin de
estado en el mismo orden en el que llegaron.
Dicho esto, el esquema de un proceso quedara de la siguiente forma:

1.2.4 Canal
Con respecto a los canales no tenemos mucho que decir. Ya sabemos que un
canal es una ruta para transportar seales entre dos bloques o un bloque y su entorno (si
es entre dos bloques no puede ser el mismo en los dos extremos). Podemos aadir que el
orden en el que llegarn las seales ser el mismo que el orden en el que se envan
desde el otro extremo. Asimismo, para cada canal debe haber una lista de seales que
transporta. Para terminar, podemos decir que pueden existir varios canales entre dos
extremos. Un ejemplo podra ser:

1.2.5 Seal
Una seal es un flujo de informacin entre procesos. La declaracin de seales
en SDL/GR se realiza mediante la inclusin de un cuadro TEXT (ver seccin 1.3), cuyo
contenido debe comenzar por la etiqueta SIGNAL y posteriormente los nombres de las
seales seguido de los tipos de los parmetros entre parntesis (siendo esto opcional),
como por ejemplo:

Pg. 4 de 18

BORRADOR

DAVID ESTEBAN SASTRE

1.2.6 Temporizadores
Uno de los recursos que pueden utilizar los procesos son los temporizadores. Un
temporizador es un objeto que puede operar con tiempos. Se inicializa con la sentencia
SET, en cuyo caso se le asocia un valor de tiempo. Cuando el tiempo del sistema llega
al tiempo establecido para el temporizador, se aade a la cola de seales de entrada (ver
seccin 1.2.3) una seal con el mismo nombre que el temporizador. Otra de las
operaciones que se pueden aplicar a un temporizador es la operacin de RESET, la cual
desactivar la operacin anterior (adems, si hay una seal en la cola de entrada
correspondiente al temporizador tambin se suprime).
Dicho esto se pueden distinguir dos estados del temporizador, activo e inactivo.
Estar activo desde la inicializacin hasta el consumo de la seal del temporizador por
parte del proceso (en cualquier otro caso estar inactivo). Cuando realizamos una
operacin de RESET, el temporizador pasar de activo a inactivo.
Para referirnos a un tiempo concreto normalmente utilizaremos el tiempo
absoluto del sistema (NOW), que es visible por todos los procesos y se comparte. Dicho
esto, explicaremos como manejar estas operaciones con SDL/GR.
Primeramente, la declaracin de un temporizador se realiza mediante la
inclusin de un cuadro TEXT (ver seccin 1.3) con la etiqueta TIMER seguido del
nombre que le queremos dar al temporizador. Un ejemplo sera:

El cual declarara un temporizador llamado T.


La inicializacin se efecta mediante la sentencia SET, que recibe dos
argumentos. El primero de ellos es el tiempo en el cual vence el temporizador, como ya
hemos dicho utilizaremos la sentencia NOW para utilizar el tiempo actual del sistema
sumndole los segundos que queramos que pasen hasta la activacin del temporizador.
Esta sentencia la deberemos aadir en un cuadro TASK (ver seccin 1.3) dentro de la
definicin de un procedimiento. Un ejemplo sera:

Activara el temporizador T para ser activado tras 13 segundos.

Pg. 5 de 18

BORRADOR

DAVID ESTEBAN SASTRE

Por otro lado, la reinicializacin de un temporizador se realiza mediante la


sentencia RESET, la cual recibe un nico argumento correspondiente al nombre del
temporizador. Tambin debe ir dentro de un cuadro TASK (ver seccin 1.3). Para
reinicializar el temporizador anterior aadiramos:

Para terminar, vamos a resumir el comportamiento de un temporizador en el


siguiente autmata:

1.3 Smbolos
Una vez entendidas las entidades de las que se compone un sistema especificado
en SDL vamos a ver los principales smbolos de los que se componen. A no ser que se
especifique lo contrario nos estaremos refiriendo siempre al nivel de proceso dentro de
la jerarqua.

Smbolo

Nombre
Include

Text

Uso
Se usa para incluir libreras SDL en el sistema.
Utilizaremos la directiva #include seguida de la
librera que queremos aadir entre comillas simples.
Contiene la declaracin de las estructuras, variables,
temporizadores y seales.
Para la declaracin de variables deberemos utilizar la
palabra reservada DCL seguido del nombre (uno o
varios) y el tipo de la variable que queremos declarar.
Tambin se pueden inicializar de forma anloga al
lenguaje C. Los tipos predefinidos ms comunes son
Boolean, Character, Charstring, Integer, Natural y
Real. Un ejemplo sencillo sera el siguiente:

Pg. 6 de 18

BORRADOR

DAVID ESTEBAN SASTRE

Para la declaracin de constantes utilizaremos la


palabra reservada SIGNAL seguida del nombre de la
seal y los parmetros que contendr entre parntesis.
Como por ejemplo:

Start

En los niveles de bloque y sistema ser solamente


para seales y canales.
Indica el comienzo de un proceso. Debe existir una
vez por cada proceso.

State

Simboliza un estado del sistema.

Input

Indica la espera de una seal de entrada por lo que se


tratar de un smbolo bloqueante. Debe encontrarse
inmediatamente despus de un smbolo de estado. Si
la seal es recibida se consume y se produce una
transicin de estado poniendo a disposicin del
proceso la informacin transportada por la seal. Si la
seal lleva informacin (parmetros) debe ser
copiada en variables locales al proceso, es decir, debe
haber una variable local al proceso con el mismo
nombre que indiquemos en el parmetro de la seal.
En caso contrario se descartar el valor y no se
almacenar en ningn sitio.
Enva una seal, usualmente se realizar al final de
una transicin.

Output

Task

Save

Decision

Usado para realizar tareas generales, como por


ejemplo asignacin de variables u operaciones sobre
temporizadores. Puede contener una lista de
asignaciones separadas por comas.
Aade una seal al conjunto de seales de
conservacin de un estado. Podemos aadir una seal
concreta o podemos usar el smbolo * para
referirnos a todas las seales.
Es usada para escoger entre dos rutas alternativas
segn el resultado de una condicin.

Pg. 7 de 18

BORRADOR

DAVID ESTEBAN SASTRE

Connector

Stop

Un conector posee una etiqueta que simboliza la


continuacin desde otro conector que posea la misma
etiqueta, es decir, se utilizan para realizar saltos
incondicionales.
Indica la terminacin de un proceso.

Procedure call

Ejecuta la llamada a un procedimiento previamente


declarado.

Procedure
reference

Declaracin de un procedimiento el cual es llamado


en el proceso actual.

Procedure start

Procedure
return
Text extension

Comienza la definicin de un proceso.

Retorno de procedimiento a donde fue llamado.

Se utiliza para incluir comentarios.

Pg. 8 de 18

BORRADOR

DAVID ESTEBAN SASTRE

2. El protocolo parada y espera


El protocolo de comunicacin ms sencillo entre dos puntos lgicamente
correcto es el protocolo de parada y espera. Si lo situamos en la pila de protocolos
TCP/IP correspondera al nivel 2 o nivel de enlace. Ser el ejemplo que usaremos como
referencia a lo largo de esta memoria.
2.1 Descripcin
A grandes rasgos el funcionamiento del protocolo consiste en:

La estacin emisora enva una trama a la estacin receptora.


La estacin receptora despus de la llegada de la trama, enva una seal
para indicar que puede continuar.
La estacin emisora debe esperar esta seal para mandar la siguiente
trama.

Pero es obvio que se pueden perder tramas durante la transmisin por lo que
debe tener recuperacin de errores. Para ello utiliza un mecanismo de ARQ (automatic
repeat request), que consiste en retransmisiones por parte del emisor si se detecta algn
tipo de error. En el caso anterior si se pierde una trama de datos habramos perdido
informacin. Para solucionar esto el emisor incorpora un temporizador de
retransmisin, y en el caso de no recibir la trama de confirmacin en un intervalo
determinado de tiempo realiza una retransmisin de la misma trama.

Pg. 9 de 18

BORRADOR

DAVID ESTEBAN SASTRE

Con esto habramos solucionado el problema de prdida de tramas pero no de


prdida de confirmaciones. Si se produce una de ellas, el receptor recibir dos tramas
duplicadas porque vencer el temporizador como hemos dicho anteriormente, y dicha
trama se desechar. Para solucionar este caso introduciremos numeraciones en las
tramas y en las confirmaciones, de este modo el receptor cada vez que confirme una
trama enviar adems el nmero de trama por la que espera.

Podemos observar que una vez llega la trama de confirmacin ACK con
parmetro 1 el emisor ya sabe que el receptor espera por esa trama, envindosela
posteriormente. Por ltimo, podemos destacar que slo son necesarias dos
numeraciones de tramas (0 y 1), ya que una vez enviada la trama 1 volveremos a enviar
la trama 0.

Pg. 10 de 18

BORRADOR

DAVID ESTEBAN SASTRE

2.2 Especificacin en SDL


Una vez conocido el protocolo parada y espera vamos a ver como sera su
especificacin en SDL. A nivel de sistema tendramos lo siguiente:

El sistema contiene dos bloques, uno ser el emisor y otro el receptor. Entre
ambos podemos ver que hay dos canales (C1 y C2) por los que se enviarn las seales
TRAMA_DATOS y ACK. Aparte, el emisor posee otro canal de entrada (C3) por el
que le llega la seal DATOS_EMISOR del exterior o entorno. En la pila de protocolos
TCP/IP esta seal sera enviada por el nivel superior (nivel 3), pero como no vamos a
modelar ese nivel la seal la enviar el usuario mediante una interfaz. El receptor
tambin posee otro canal (C4) pero en este caso de salida, el cual transporta la seal
DATOS_RECEPTOR hacia el entorno. Esta seal tambin debera ser enviada al nivel
3 pero por los mismos motivos se manifestar en la interfaz de usuario como la
anterior.
Tambin observamos que hay un cuadro text con la declaracin de las seales
dichas anteriormente, debemos declarar TRAMA_DATOS y ACK con un parmetro
entero para la numeracin de tramas y confirmaciones como hemos dicho en el apartado
anterior.

Pg. 11 de 18

BORRADOR

DAVID ESTEBAN SASTRE

2.2.1 El bloque emisor


El bloque emisor corresponde a toda la entidad emisora y contiene lo siguiente:

Principalmente, el bloque EMISOR contiene un nico proceso que se denomina


EMISOR igualmente. Este nivel debe ser coherente con los distintos niveles, por lo que
el bloque deber tener la misma interfaz (canales de entrada y de salida) que el que
aparece en el nivel de sistema. En este caso no declararemos las seales porque ya lo
hicimos en el nivel superior.

Pg. 12 de 18

BORRADOR

DAVID ESTEBAN SASTRE

El proceso EMISOR est definido de la siguiente forma:

Dentro de este proceso tenemos un total de 3 variables locales. La primera de


ellas es n y se utiliza para recibir el parmetro de la seal ACK una vez la recibamos
(ver apartado 1.3). La segunda es nsec y representa la numeracin de la trama que
vamos a enviar, por lo que se utilizar como parmetro en la seal TRAMA_DATOS.
Por ltimo tenemos incnsec, la cual contiene el valor que deseamos recibir en un ACK,
es decir, la numeracin que tiene que llevar un ACK recibido para confirmar la ltima
trama enviada.
En el comienzo del proceso lo primero que se realiza es una inicializacin de la
variable nsec a cero, esto es, para que la primera trama se enve con dicha numeracin.
Posteriormente se pasa al estado DESOCUPADO.

Pg. 13 de 18

BORRADOR

DAVID ESTEBAN SASTRE

Como ya hemos dicho, un smbolo de estado debe estar seguido de un smbolo


Input. En este caso esperaremos por la seal DATOS_EMISOR que como ya hemos
mencionado provendra del nivel 3 indicndonos que debemos enviar una trama al otro
extremo.

Durante esta transicin de estado lo primero que realizaremos ser enviar la


seal TRAMA_DATOS al bloque receptor con el parmetro nsec como habamos dicho
anteriormente. Seguidamente deberemos calcular el nmero de secuencia que deber
llevar la trama ACK que recibiremos para que la confirmacin de la trama enviada sea
correcta. Para ello almacenamos el nmero de secuencia recientemente enviado en la
variable incnsec, y llamamos al procedimiento INC_MOD_incnsec que calcular el
valor esperado en una trama ACK a partir del nmero de secuencia recientemente
enviado con la trama de datos (en nuestro caso como solo tenemos dos nmeros de
secuencia cambiar 0 por 1 y 1 por 0). Para terminar esta transicin inicializamos el
temporizador de retransmisin T.
El estado al que saltaremos ser ESPERANDO_ACK, que simboliza el intervalo
de tiempo en el cual el emisor enva la trama y espera la confirmacin ACK.

Pg. 14 de 18

BORRADOR

DAVID ESTEBAN SASTRE

Dentro de este estado tenemos dos transiciones posibles. La primera de ellas es


que recibamos una trama ACK (corresponde a la rama de la izquierda). Si esto ocurre
deberemos realizar una comprobacin sobre el parmetro que contiene dicha seal, que
habremos copiado en la variable local n. En la transicin al estado ESPERANDO_ACK
hemos dejado el valor correcto que debe contener una trama ACK recibida en la
variable incnsec, por lo tanto comprobaremos si n es igual a incnsec en un smbolo de
bifurcacin. Si esto se cumple (rama true) incrementaremos la variable nsec mediante el
procedimiento INC_MOD_nsec y pasaremos al estado DESOCUPADO nuevamente.
En caso contrario, el ACK que hemos recibido lleva un nmero de secuencia incorrecto
(rama false), por lo que deberemos pasar nuevamente al estado ESPERANDO_ACK
habiendo desechado la trama.
La otra opcin (rama de la derecha) se dar en el caso de que venza el
temporizador de retransmisin, la cual se realizar si recibimos la seal T (recordemos
que si un temporizador vence enva una seal con su mismo nombre al proceso actual).
Si esto ocurre quiere decir que algo no ha ido bien y que deberemos retransmitir la
trama. Por lo tanto enviaremos la seal TRAMA_DATOS con el mismo parmetro nsec
(sin modificarle ya que se trata de la misma trama). Seguidamente volvemos a
inicializar el temporizador y pasamos al mismo estado ESPERANDO_ACK.
Para terminar la explicacin del bloque EMISOR vamos a ver la definicin de
dos procedimientos: INC_MOD_incnsec e INC_MOD_nsec. Dado que son
procedimientos auxiliares, deben tener su correspondiente smbolo de declaracin como
muestra la siguiente figura:

Pg. 15 de 18

BORRADOR

DAVID ESTEBAN SASTRE

stos, como ya hemos dicho, estos procedimientos incrementan los valores de


incnsec y nsec respectivamente. El primero de ellos est definido de la siguiente forma:

Al tratarse de un procedimiento comienza con el smbolo Procedure Start (ver


seccin 1.3). Seguidamente realiza una comprobacin sobre la variable incnsec que
queremos incrementar. Si el valor de la variable es igual a cero cambiar su valor a uno
y viceversa. En ambos casos se retorna del procedimiento con el smbolo
correspondiente.
El otro procedimiento INC_MOD_nsec queda de la siguiente forma:

Pg. 16 de 18

BORRADOR

DAVID ESTEBAN SASTRE

En este caso no hace falta realizar ninguna explicacin, ya que es similar al


anterior pero modificando la variable nsec.
2.2.2 El bloque receptor
El bloque receptor corresponde a toda la entidad receptora y contiene lo
siguiente:

El bloque RECEPTOR contiene un nico proceso que se denomina RECEPTOR


igualmente. Como hemos dicho en el apartado anterior este nivel debe ser coherente con
los distintos niveles, por lo que el bloque deber tener la misma interfaz (canales de
entrada y de salida) que el que aparece en el nivel de sistema. Tampoco declararemos
ninguna seal porque ya lo hicimos en el nivel de sistema.

Pg. 17 de 18

BORRADOR

DAVID ESTEBAN SASTRE

La definicin del proceso RECEPTOR queda de la siguiente forma:

Podemos observar que hemos realizado la declaracin de tres variables enteras.


La primera de ellas se denomina rec y sirve para recoger el parmetro que contiene la
seal TRAMA_DATOS una vez recibida. La segunda es nesp, que servir para
almacenar el nmero de secuencia que tiene que tener la trama de datos para que sea
correcta. Por ltimo tenemos la variable aux, la cual es una variable auxiliar que
utilizaremos para devolver el valor de

Pg. 18 de 18

Vous aimerez peut-être aussi