SDL (Specification and Description Language)

Anuncio
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
Tutorial sobre SDL
Por José Juan Sánchez Manzanares
ÍNDICE
PARTE 1 (Iniciación a SDL)
1.
Introducción a SDL
1.1. Sistema
1.2. Bloque
1.3. Proceso
1.4. Canal
1.5. Señal
1.6. Temporizadores
2. Símbolos en SDL
3. Tutorial “DemonGame”
4. Caso práctico
PARTE 2 (SDL Avanzado)
5.
Mapeado de C a SDL
5.1. Tipos en C que tienen una Correspondencia Directa
5.2. Tipos en C que no tienen una Correspondencia Directa
5.3. Funciones en C
5.4. Constantes
6. Estructuras y arrays
7. Instancias de procesos
8. El validador
9. El simulador
10. Los sinónimos externos
1
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
PARTE 1: INICIACIÓN A SDL
1. Introducción a SDL
El lenguaje SDL es propuesto por el CITT (Comité Consultivo Internacional Telegráfico y
Telefónico) en las recomendaciones Z.100 a Z.104. Es un lenguaje orientado a la
especificación y descripción del comportamiento de sistemas de telecomunicaciones. El
área de aplicación de SDL es la especificación del comportamiento de sistemas que
funcionan en tiempo real. Por ejemplo:
a) procesamiento de llamadas en sistemas de conmutación
b) mantenimiento y tratamiento de fallos en sistemas de telecomunicaciones
c) control de sistemas
d) funciones de operación y mantenimiento, gestión de redes
e) protocolos de comunicación de datos
SDL permite elegir entre dos formas sintácticas diferentes para la representación de
sistemas:
- SDL/GR (Graphical Representation)
- SDL/PR (Phrase Representation)
SDL/GR es un lenguaje gráfico que permite visualizar la estructura y flujos de control de
un sistema y SDL/PR es un lenguaje de programación, mas apropiado para la utilización
de herramientas automatizadas. Ambas sintaxis tienen el mismo modelo semántico.
La entidad principal en SDL es el sistema (SYSTEM) que se compone de bloques
(BLOCKS). Los bloques se conectan entre si y con el entorno (ENVIRONMENT) por
medio de canales (CHANNELS). Los canales sirven como medio de transporte de las
señales (SIGNALS) entre bloques y con el entorno. Un bloque puede contener varias
especificaciones de procesos; un proceso interactúa con otros procesos y con el entorno
por medio de las señales. Un proceso es modelado como una máquina de estados finita
extendida, lo cual le agrega el uso de variables, parámetros, acciones y temporizadores.
1.1 Sistema
Una definición de sistema en SDL es una especificación o descripción de un sistema. Un
sistema está separado de su entorno por la frontera del sistema y contiene un conjunto de
bloques. La comunicación entre el sistema y el entorno o entre los bloque dentro del
sistema sólo puede efectuarse mediante señales. Dentro de un sistema, estas señales
son transportadas por canales. Los canales conectan bloques entre sí o con la frontera
del sistema. Debe haber por lo menos un bloque dentro del sistema.
2
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
En la siguiente imagen vemos los principales elementos de un sistema.
1.2 Bloque
Una definición de bloque es un contenedor para una o más definiciones de proceso de un
sistema. La definición de bloque tiene por finalidad agrupar procesos que realizan cierta
función. Una definición de bloque proporciona una interfaz de comunicación estática por la
cual sus procesos pueden comunicar con otros procesos. Además establece un ámbito
para definiciones de proceso. Debe haber al menos un proceso dentro de cada bloque.
3
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
1.3 Proceso
Una instancia de un proceso es una máquina de estados finita extendida. En el modelo se
da una transición de un estado a otro siempre que se recibe una señal válida de otro
proceso o del entorno. Al recibir la señal, se pueden realizar acciones de manipulación de
datos locales al proceso, o enviar señales a otros procesos o al entorno. Después de
efectuada la transición la máquina se encontrará en espera en otro estado. Varias
instancias del mismo tipo de proceso pueden existir al mismo tiempo y actuar
asincrónicamente y en paralelo, entre sí y con otras instancias de un tipo de proceso
diferente del sistema. Las señales recibidas por instancias de proceso se denominan
señales de entrada, y las señales enviadas a instancias de proceso se denominan
señales de salida. Las señales solo pueden ser consumidas por una instancia de proceso
cuando ésta se encuentra en un estado. El conjunto de señales de entrada válidas es la
unión del conjunto de señales en todos los canales que conducen al proceso y las señales
del temporizador. Todos los procesos tienen acceso al tiempo absoluto (NOW) y pueden
realizar mediciones de tiempo y temporizador.
Cada proceso tiene asociado una única cola de señales de entrada, la cual no se
comparte con otros. Además para cada estado hay un conjunto de señales de
conservación. Cuando el proceso se encuentra en espera en un estado, la primera señal
de entrada cuyo identificador forme parte del conjunto de señales de conservación es
extraída de la cola y consumida por el proceso.
La manipulación de datos se hace por medio de variables locales a cada proceso. SDL
permite la definición de cualquier tipo de datos que se necesite, incluidos tipos de datos
compuestos (STRUCT).
1.4 Canal
Un canal representa una ruta unidireccional de transporte de señales entre dos bloques o
entre un bloque y su entorno. Las señales transportadas por canales se entregan al punto
extremo de destino. Las señales llegan al punto extremo de destino de un canal en el
mismo orden en que fueron enviadas en el punto origen. Pueden existir varios canales
entre los dos mismos puntos extremos. Canales diferentes pueden transportar señales del
mismo tipo.
Para cada canal tiene que haber una lista de señales que transporta el canal. Por lo
menos uno de los puntos extremos del canal tiene que ser un bloque. Si los dos puntos
extremos son bloques, estos tienen que ser diferentes.
4
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
La siguiente figura muestra la arquitectura de un sistema SDL.
1.5 Señal
Una instancia de señal es un flujo de información entre procesos, siendo también una
instanciación de un tipo de señal definido. Por lo menos uno de los puntos extremos de la
ruta de señal tiene que ser un proceso. Si los dos puntos extremos son procesos, estos
tienen que ser diferentes.
La declaración de señales en SDL/GR se representa dentro de un cuadro, encabezado
con la etiqueta SIGNAL y junto a ella los nombres de las señales declaradas, de la
siguiente forma:
5
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
La siguiente figura muestra la comunicación entre dos procesos mediante el envío de
señales.
1.6 Temporizadores
Todos los procesos pueden utilizar temporizadores y tienen acceso al tiempo absoluto
(NOW), que es común a todos los procesos. Una instancia de temporizador es un objeto,
en una instancia de proceso, que puede estar activo o inactivo. Cuando un temporizador
inactivo es inicializado (SET), se le asocia un valor de tiempo. Si este temporizador no es
reinicializado (RESET), o si no es inicializado de nuevo, antes de que el tiempo de
sistema llegue a este valor de tiempo, se aplica a la cola de señales de entrada del
proceso una señal con el mismo nombre que el temporizador. La misma acción se efectúa
si el temporizador es inicializado con un valor de tiempo menor que NOW. Un
temporizador está activo desde el momento de la inicialización hasta el momento del
consumo de la señal de temporizador. Cuando un temporizador inactivo es reinicializado,
sigue estando inactivo. Cuando un temporizador activo es reinicializado, la asociación con
el valor de tiempo se pierde, si hay una señal de temporización correspondiente retenida
en la cola de entrada, se suprime y el temporizador pasa a inactivo. La inicialización de un
temporizador activo equivale a reinicializarlo e inicializarlo inmediatamente después.
6
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
Sentencias de definición de temporizadores.
I. Definición de temporizador: TIMER <nombre_temporizador>
ƒ Ejemplo: TIMER T.
II. Inicialización de temporizador SET (<tiempo_futuro>, <nombre_temporizador>)
ƒ Ejemplo: Set(now+1, T).
III. Reinicializacion de temporizador: RESET (<nombre_temporizador>)
ƒ Ejemplo: Reset(T);
2. Símbolos en SDL
INCLUDE. En el sistema se pueden incluir librerías de SDL.
TEXT. Para declaración de variables (DCL) y constantes.
ARRANQUE PROCESO: Símbolo inicial con el que comienza el proceso.
PARADA PROCESO: La parada causa la detención inmediata de la instancia de
proceso que la emite. Esto significa que las señales retenidas en la cola de
entrada se descartan y que las variables y temporizadores creados para el proceso
y la cola dejaran de existir. Se pondrá para indicar donde termina un proceso (si
termina).
ESTADO: Un estado representa una condición particular en la cual una instancia
de proceso puede consumir una instancia de señal, lo que causa una transición. Si
no hay instancias de señal retenidas, el proceso espera en el estado hasta que se
reciba una instancia de señal. Cada símbolo de estado debe tener un identificador
del estado.
CONSERVACION: El símbolo de conservación está asociado a los estados del
proceso. Cada símbolo de conservación debe especificar el tipo de señal que
conserva o el símbolo * para conservar todas las señales. Las señales
conservadas se retienen en la cola de señales en el orden de su llegada. El efecto
7
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
de la conservación es válido solamente para el estado al cual está asociada la
conservación. En el estado siguiente, las instancias de señal que han sido
conservadas se tratan como instancias de señal normales.
ENTRADA: Una entrada permite el consumo de la instancia de señal de entrada
especificada. El consumo de la instancia de la señal de entrada pone a la
disposición del proceso la información transportada por la señal. A las variables
asociadas con la entrada se asignan valores transportados por la señal
consumida. Si no hay variable asociada con la entrada para una señal, se descarta
el valor.
PROCEDIMIENTO: conjunto de instrucciones que son llamadas desde un proceso
o procedimiento mediante. Último objeto en el que se puede descomponer un
proceso.
LLAMADA A UN PROCEDIMIENTO: Permite la ejecución de un procedimiento
previamente declaro en un proceso o procedimiento.
SALIDA: Los valores transportados por la instancia de señal son los valores de los
parámetros efectivos en la salida. Si no hay ningún parámetro en la salida en la
definición de señal, la señal transporta el valor indefinido.
TAREA: Una tarea puede contener varia sentencias de asignación o especificación
de procesos descriptos en algún leguaje de programación.
DECISION: Una decisión transfiere el control al trayecto cuya condición contiene el
valor dado por la interpretación de la pregunta. Se define un conjunto de
respuestas posibles a la pregunta, cada una de las cuales especifica el conjunto
de acciones a interpretar para esa elección de trayecto. Si Condicion = true hacer
una cosa; si Condicion = false hacer otra cosa.
8
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
CONECTOR: Un conector representa la continuación de un trayecto desde otro
conector correspondiente con el mismo número de conecto en la misma área de
gráfico de proceso.
INICIO PROCEDIMIENTO. Símbolo inicial con el que comienza el procedimiento.
FIN PROCEDIMIENTO. Símbolo final con el que termina el procedimiento.
3. Tutorial DEMONGAME
Este ejemplo se usa en los ejemplos de la recomendación Z100. Consiste en un
juego sencillo, donde el usuario puede generar las señales Newgame, Endgame,
Probe y Result. Las 2 primeras señales son para iniciar (ignorada si ya se juega) y
terminar (ignorada si no se juega) un juego.
Las reglas del juego son sencillas:
1. Un demon, representado por el proceso Demon, cambia el estado del
sistema (winning, losing) de vez en cuando.
2. El usuario debe adivinar cuando el estado es winning.
3. Si el usuario prueba (señal Probe) cuando el estado es winning, gana un
punto.
4. Si el usuario prueba cuando el estado es losing, pierde un punto.
5. Para ver el marcador el usuario produce la señal Result, contestada por la
señal Score, que contiene un parámetro de tipo entero con el resultado
actual.
La estructura del sistema es la siguiente:
i. El sistema DemonGame, compuesto por los bloques
i.A. Game Block, que está compuesto de los procesos
i.A.1. Main
i.A.2. Game
i.B. Demon Block, compuesto por el proceso
i.B.1. Demon
9
TUTORIAL SOBRE SDL
SDT
INGENIERÍA DE PROTOCOLOS
r-
C:\Telelogic\SDL_TTCN_Suite4.3\sdt\examples\demongame\demongame.sdt
rw
C:\Telelogic\SDL_TTCN_Suite4.3\sdt\examples\demongame\
My first SDL system
DemonGame
DemonGame
GameBlock
Main
Game
DemonBlock
Demon
r-
DemonGame.ssy
rrrrr-
GameBlock.sbk
Main.spr
Game.spr
DemonBlock.sbk
Demon.spr
r-
DemonGame.msc
Other Documents
DemonGame
i.- SISTEMA
10
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
i.A.- Bloque GameBlock
i.A.1.- Proceso Main
11
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
i.A.2.- Proceso Game
i.B.- Bloque DemonBlock
12
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
i.B.1.- Proceso Demon
ii. Simulación
*** FIN TUTORIAL DEMONGAME ***
13
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
4. Caso Práctico
Implemente en SDL los siguientes procesos:
- Emisor: Recibe mensajes de largo variable y envía caracteres. Al principio de
cada mensaje, envía un STX, y a final un ETX.
- Receptor: Recibe caracteres y envía mensajes. Los mensajes recibidos están
delimitados por los caracteres STX y ETX.
Solución (parcial) al Caso Práctico
14
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
PARTE 2: SDL AVANZADO
5. Mapeado de C a SDL
Describimos como representar en SDL los tipos de datos y funciones de C. Se explica por
medio de tablas que representan la equivalencia entre ambos tipos.
5.1. Tipos en C con una Correspondencia Directa en SDL
La tabla siguiente muestra una lista de tipos en C para los que existe una equivalencia
directa en SDL.
Tipo C
Tipo SDL
Definido en el paquete
char
Carácter
Predefined
unsigned char
Octet
Predefined
int
Integer
Predefined
short int
ShortInt
ctypes
long int
LongInt
ctypes
unsigned int
UnsignedInt
ctypes
unsigned short int
UnsignedShortInt
ctypes
unsigned long int
UnsignedLongInt
ctypes
float
Flota
ctypes
double
Real
Predefined
void *
Voidstar
Ctypes
void **
Voidstarstar
Ctypes
char *
Charstar
Ctypes
5.2. Tipos en C que no tienen una Correspondencia Directa en SDL
Para otros tipos de C no existe una correspondencia directa con SDL, y debemos
construir un nuevo tipo con syntype o newtype. Ref y Carray son generadores que se
definen en el paquete ctypes.
15
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
La siguiente tabla muestra la definición en C de un tipo de datos y su equivalente en SDL.
Tipo en C
Tipo en SDL
typedef x y;
syntype y = x endsyntype;
typedef x *y;
newtype y Ref(x) endnewtype;
typedef x y[20];
newtype y Carray(20, x)
endnewtype;
typedef enum
{ a, b } x;
o alternativamente
typedef int x;
#define a 0
#define b 1
newtype x literals a, b
endnewtype;
o alternativamente
syntype x = Integer endsyntype;
synonym a x = 0;
synonym b x = 1;
typedef struct
{ int a; } x;
newtype x struct
a Integer;
endnewtype;
typedef struct
{ int a:2;
int b:6; } x;
newtype x struct
a Integer:2;
b Integer:6;
endnewtype;
typedef union
{ int a;
char b; } x;
newtype x /*#UNIONC*/ struct
a Integer; b Character;
endnewtype;
5.3. Funciones en C
Las funciones prototipo en C son mapeadas como procedimientos extenos en SDL. Un
procedimiento externo es llamado de la misma forma que un procedimiento normal.
Funciones en C
Funciones en SDL
void func (par1 type1,
par2 type2, ..);
procedure func;
fpar par1 type1,
par2 type2, ...;
external;
type1 func (par1 type1, ..);
procedure func;
fpar par1 type1, ...;
returns type1;
external;
void func (par1 *type1);
procedure func;
fpar in/out par1 type1;
external;
Los parámetros del tipo puntero pueden ser manejados de dos maneras diferentes. Como
ejemplo, tomemos el parámetro par1, puntero (*) a un carácter del tipo en la declaración
de la función fn:
16
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
En C, esta función se declara como void fn (char *par1); Las dos maneras de traducir
esto a SDL son:
1. Uso de un parámetro IN/OUT
procedure fn; fpar in/out par1 Character; external;
Esta función es llamada por un parámetro que no es puntero.
call fn (c); /* c variable of type Character */
2. Uso de un parámetro IN correspondiente a un puntero:
procedure fn; fpar par1 Charstar; external;
La función es llamada por un parámetro que es un puntero.
call fn (&c); /* c variable of type Character */
call fn (cst); /* cst variable of type Charstar */
En el ejemplo de arriba, &c denota la dirección de la variable c. Con parámetros IN/OUT,
solo se permiten variables como parámetros. De esta forma, la segunda forma es menos
general.
5.4. Constantes
Las constantes en C se expresan usando macros. Pueden ser mapeadas como sinónimos
"normales" o como sinónimos externos (external). Consideremos el siguiente ejemplo:
#define MAX 1000
En un caso normal, puede ser mapeado como un sinónimo:
synonym MAX Integer = 1000;
Pero también podemos definirlo como un sinónimo externo:
synonym MAX Integer = external;
17
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
6. Estructuras y Arrays
6.1. Definición y Referenciado de Variables Tipo Array
Un array en SDL se define como
SYNTYPE Syn = integer
CONSTANTS 0:10
ENDSYNTYPE;
NEWTYPE Arr ARRAY(Syn, real)
ENDNEWTYPE;
Donde Syn es el índice del array. Un indice puede ser un tipo de dato discreto, definido
en un intervalo cerrado. Los posibles tipos son:
ƒ Character
ƒ Boolean
ƒ Octet
ƒ Bit
ƒ Enumeration
ƒ Syntypes del tipo Integer, carácter, boolean, octect, bit y enumeration.
Si A es un array del tipo Arr (DCL Arr A;)
Para referenciar un elemento del array A usamos la sintaxis siguiente:
A[i], donde i es el índice del tipo definido.
6.2. Definición y Referenciado de Estructuras
Para referenciar cada uno de los atributos de una variable del tipo struct (estructura)
usamos la siguiente sintaxis.
DCL CeldaType x; donde CeldaType es una estructura definida como
NEWTYPE CeldaType
STRUCT
Ocupada Boolean;
Peticion Boolean;
Datos DatosType;
ENDNEWTYPE;
Para referenciar a cada uno de los atributos de la variable x del tipo CeldaType usamos la
sintaxis siguiente:
x!Ocupada
x!Peticion
x!datos
18
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
7. Instancias de Procesos
Describiremos como obtener el PID de una instancia de un proceso. Los PId simplifican la
fase de inicio (arranque) de un sistema SDL, al permitir la comunicación directa entre
instancias de procesos (OUTPUT TO).
En SDL, la única manera de obtener el PID es usando las funciones básicas Self, Parent,
Offspring, o Sender. Tales valores pueden ser pasados como parámetros en señales, in
llamadas a procedimientos y en operaciones. Cada instancia de un proceso contiene las
siguientes variables implícitas:
ƒ
ƒ
ƒ
ƒ
Self: contiene el PID de la instancia actual
Sender: Contiene el PID de la instancia que le ha enviado la ultima señal
consumida.
Parent: Contiene el PID de la instancia padre (la que crea la instancia actual).
Offspring: Contiene el PID de la ultima instancia creada.
Para crear una instancia de un proceso usaremos la llamada a create request, que
corresponde al símbolo SDL:
Después de crearse un proceso, la función del sistema offspring contiene su PID.
Debemos almacenar su valor en una variable del tipo PID si queremos después
referenciar dicho proceso.
DCL pid_proceso PID; // Declaramos la variable del tipo PID
pid_proceso:=offspring; // y almacenamos su PID (offspring)
Para enviar una señal a un proceso concreto usaremos la sentencia TO:
Donde pid_proceso contiene el PID del proceso creado.
Un proceso puede enviarle señales a quien lo creo (su padre) con TO parent, donde
parent contiene el PID del proceso que lo creo:
19
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
El siguiente ejemplo muestra como el proceso Canal crea N Emisores y como el Canal
almacena sus PID en un array de pid (Emisor_ID), para después poder referenciarlos y
enviarles señales a cada uno de ellos.
process Canal
1(1)
NEWTYPE PidArray Array (Integer, Pid)
ENDNEWTYPE;
TIMER T;
DCL
Emisor_ID PidArray,
i integer := 1,
tx_sim integer := 0,
G integer := 0,
S integer := 0;
Creacion de instancias de proceso emisor.
El proceso Canal crea 'N_nodos' instancias
del proceso Emisor y guarda el PID de
cada proceso Emisoren Emisor_ID,
que es un array de PID.
i:=0;
i<N_nodos
false
true
Cuando el proceso Canal emita una señal,
debe indicar a que proceso va dirigida.
La sintaxis es "señal TO PID".
En nuestro caso sera "señal TO Emisor_ID(i)"
offspring es una variable de
sistema y contiene el valor
del ultimo PID creado.
El array Emisor_ID recoge
ese valor, para que no se pierda
Instanciamos la señal T,
del tipo TIMER, para que ocurra
dentro de un tiempo (now+Ranura).
Now es una variable de sistema
que recoge el valor del tiempo
actual en nuestro sistema.
Emisor
set(now + RANURA, T)
Nueva_Ranura
Emisor_ID(i) := offspring
T
i := i + 1
Emitir_TICs
Llamada a procedimientos
Leer_Intencion
Emitir_Colision
Emitir_TICs
set(now + RANURA, T)
Leer_Intencion
Declaracion de los procedientos
usados en el proceso Canal
Nueva_Ranura
Emitir_Colision
20
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
8. El Validador
El validador comprueba que nuestro sistema es consistente, es decir, que no se producen
bloqueos y que todas las señales se consumen. Para ello, mediante distintos métodos de
evaluación, escanea todos los posibles estados de nuestro sistema, buscando bloqueos,
señales no consumidas, …y cualquier otro tipo de inconsistencia.
Al igual que en el simulador, debemos establecer el compilador adecuado ‘Microsoft
Validation’ antes de compilar la validación. Lo hacemos desde la opción ‘Make’del menú
‘Generate’ del ‘Organizer’.
Otro aspecto a tener en cuenta en la validación es la longitud de la cola de señales. Por
defecto, su valor es 3. Al ejecutar la validación, si nuestro sistema emite más de 3 señales
sin consumirlas, la cola se llenará y el validador mostrará un error. Por eso debemos
definir el tamaño de la cola (desde el menú Opcion1) al valor que nosotros consideremos
oportuno (número máximo de señales que nuestro sistema puede encolar).
9. El Simulador
Para realizar una simulación, lo primero que debemos hacer es seleccionar el compilador
que vamos a usar. Para ello debemos seleccionar la opción ‘Make’ del menú ‘Generate’
del ‘Organizer’ y establecer (Set) el compilador ‘Microsoft Simulation’.
El compilador “Microsoft Simulation” genera un ejecutable (<sistema>_smc.exe), que
como tal, puede ser invocado desde el shell de MS-DOS. También podemos invocar a
21
TUTORIAL SOBRE SDL
INGENIERÍA DE PROTOCOLOS
este ejecutable (.exe) desde la herramienta gráfica que proporciona Telelogic y realizar
trazas (con MSC). Esta última opción es más sencilla, pues proporciona de manera
interactiva los comandos a ejecutar. Sin embargo, es menos práctica, sobre todo si
queremos ejecutar simulaciones de manera programada (automática).
La forma más practica de realizar simulaciones de manera automática es escribiendo los
comandos a ejecutar en el fichero de texto siminit.com. Este fichero contendrá los
comandos a ejecutar en nuestra simulación, de forma secuencial.
siminit.com
====================================
Proceed-Until 10
Examine-Variable(Canal G)
Quit
10. Los Sinónimos Externos
SDL permite la declaración de variables y sinónimos externos. Esto nos ayudará ejecutar
varias simulaciones sin necesidad de modificar los valores de nuestras constantes (o
inicialización de variables) en el código fuente, y por lo tanto, tener que recompilar para
realizar una simulación con los nuevos valores. Los pasos a realizar son los siguientes:
1. Definir en nuestro sistema los sinónimos de forma externa. Por ejemplo, si
queremos definir la probabilidad de carga (PG) del protocolo Aloha de forma
externa, deberemos declarar el sinónimo (constante) como sigue:
SYNONYM PG Real = External;
DCL N integer:=External;
// Sinónimo externo
// Variable externa
2. Proporcionar esos valores por teclado o fichero. Al ejecutar la simulación, el
sistema indicará que proporcionemos el valor de los sinónimos de forma externa,
bien desde teclado, o bien desde fichero. Si elegimos introducir el valor por fichero,
deberemos tener un fichero con extensión .syn, que contenga una lista de
sinónimos y sus valores. Un ejemplo de fichero de sinónimos sería pg.syn:
pg.syn
====================================
PG 0.10
Para que nuestro ejecutable (<sistema>_smc.exe) sepa que nuestro fichero de
sinónimos se llama ‘pg.syn’, debemos crear la variable de entorno
SDTEXTSYNFILE y asignarle como valor el nombre del fichero donde están
contenidos los sinónimos (pg.syn, en nuestro ejemplo). En nuestro caso, desde la
línea de comandos (desde el command.com) teclearíamos:
C:\> set SDTEXTSYNFILE=pg.syn
Para el caso de variables externas, debemos asignarles valores mediante la
sentencia Assign-Value <variable>:=<valor>, en el fichero siminit.com.
22
Descargar