1 / 13

NOTAS SOBRE SIM-JAVA

NOTAS SOBRE SIM-JAVA. SimJava es una librería de simulación escrita en lenguaje Java. Permite incorporar simulaciones animadas en páginas web. DAVID ESCUDERO MANCEBO ESCUELA UNIVERSITARIA POLITÉCNICA. Introducción.

dillan
Télécharger la présentation

NOTAS SOBRE SIM-JAVA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. NOTAS SOBRE SIM-JAVA SimJava es una librería de simulación escrita en lenguaje Java. Permite incorporar simulaciones animadas en páginas web. DAVID ESCUDERO MANCEBO ESCUELA UNIVERSITARIA POLITÉCNICA

  2. Introducción • El principal objetivos es crear describir “diagramas vivos” para describir el comportamiento de sistemas. • Se puede ejecutar empleando la web. • La ventaja de java es que incluye objetos y threads y la desventaja es que es interpretado, lo que implica lentitud. • SimJava proviene de HASE++, librería en C++ standard. HASE++ ya incluía animaciones.

  3. Overview de HASE++ • Colección de objetos en C++ (sim_entities) que se ejecutan en paralelo empleando threads. • El objeto sim_system controla todos los threads, avanza la simulación y mantiene la cola de eventos. • Las entidades se comunican pasando objetos sym_events . • Las primitivas del lenguaje son: • Sim_schedule(sim_port port, double delay, int tag) que envía un mensaje a la entidad conectada al puerto tras un retardo de simulación con un tag dado. • Sim_wait(sim_event &ev) espera un evento enviado con sim_schedule. • Sim_hold(double t) bloquea por t instantes de tiempos. • Sim_trace(int level, char* ...) añade una línea al fichero de traza. • Primitivas suficientes para modelar componentes hardware.

  4. La versión en Java • Interfaz de clases claro. • Emplea una clase vector en lugar de aritmética de punteros. • Incorpora threads en el lenguaje. • Documentado con javadoc • No se pueden utilizar ficheros con stream. Para pequeñas simulaciones, con tracefile se hace un pipe a un applet de display. • Incluye opciones de estadísticas y generación de números aleatorio. • Incluye opciones para monitorizar el estado de la simulación

  5. La versión en Java • Gráficos: es el principal objetivo de simjava. • Rendimiento: Mucho menor que C++ • Threads: cada objeto de simulación se ejecuta en su propio thread, por lo que la implementación concreta de los threads es muy importante. El óptimo en Solaris es de 128 threads. • Conclusión: Java aporta portabilidad y realismo en la visualización, perdiendo rendimiento.

  6. El paquete simjavaIntroducción • Una simulación simjava es una colección de entidades (Sim_entitiy class) cada una de las cuales se ejecuta en su propio thread. • Estas entidades se conectan entre sí con puertos (sim_port class). • Se comunican enviándose y recibiendo objetos evento (sim_event class) a través de los puertos. • Una clase estática (sim_system class) controla todos los threads, avanza el tiempo de simulación, y mantiene los eventos de la cola. • El proceso de simulación se monitoriza con el envío de mensajes de traza que se graban en un fichero.

  7. El paquete simjavaUn ejemplo simple • Para construir una simulación: • Codificar el comportamiento de las entidad. Esto se hace extendiendo la clase sim_entity y sobreescribiendo el método body( ) • Añadiendo instancias de estas entidades al objeto estático sim_system, empleando sim_system.add(entity) • Enlazar los puertos de las entidades, con Sim_system.link_ports( ) • Arrancar la simulación con Sim_system.run( ) • El fichero principal import eduni.simjava.*; class Example { public static void main(String args[]) { Sim_system.initialise(); Sim_system.add(new Source("Sender", 1, Source.SRC_OK)); Sim_system.add(new Sink("Receiver", 2, Sink.SINK_OK)); Sim_system.link_ports("Sender", "out", "Receiver", "in"); Sim_system.run(); } }

  8. class Source extends Sim_entity { private Sim_port out; private int index; private int state; public static final int SRC_OK = 0; public static final int SRC_BLOCKED = 1; public Source(String name, int index, int state) { super(name); this.index = index; this.state = state; out = new Sim_port("out"); add_port(out); } public void body() { Sim_event ev = null; int i; System.out.println("About to do body S"); for (i=index; i<100; i++) { sim_schedule(out,0.0,0); sim_wait(ev); state = SRC_BLOCKED; sim_hold(10.0); state = SRC_OK; sim_trace(1,"C Src loop index is "+i); } System.out.println("Exiting body S"); } } Extiende Sim_entity • El fichero de una de las entidades: Constructor de sim_Entity Añade a la lista de puertos Incluye la funcionalidad

  9. El paquete simjavaUn ejemplo simple • Sim_schedule(sim_port port, double delay, int tag) envia un mensaje a la unidad conectada en port en delay unidades de tiempo, con la información tag. • Sim_wait(Sim_event ev) espera un evento que le envíen empleando Sim_schedule( ). • Sim_hold(double t) bloquea la entidad durante t instantes de tiempo. • Sim_trace(int level, String msg ) añade un mensaje al fichero de traza. • El código completo está enhttp://www.dcs.ed.ac.uk/home/hase/simjava/simjava-1.2/examples/example1/Example1.java • Export CLASSPATH=......

  10. El paquete simjavaEnvío y recepción de datos • El envío y recepción de información se hace con eventos. Aunque se inicialice a null, contiene información extra. • Mediante el argumento tab sólo se puede enviar información típicamente relativa al tipo de evento. Get_tag( ) • Para enviar más información, se puede añadir un argumento a sim_schedule. • Y para extraerla Sim_event ev = new Sim_event(); sim_wait(ev); double time = ev.event_time(); int tag = ev.get_tag(); sim_schedule(dest, 0.1, tag, new Double(3.14)); Sim_event ev = new Sim_event(); Double d; sim_wait(ev); Double d = (Double)ev.get_data();

  11. El paquete simjavaLa cola de eventos • El métodos sim_wait( ) espera hasta la llegada de un evento. Sin embargo si una entidad está ocupada cuando llega un evento (sim_hold( ) ), el evento pasa a la lista de espera. Sim_wait( ) no devuelve dicho evento, sino que espera por uno nuevo. • Los eventos pueden ser extraídos de la cola de espera con el comando sim_select(Sim_predicate pred, Sim_event ev). Los predicados se usan para extraer eventos específicos de la cola. • El método sim_waiting( ) devuelve la cuenta de el número de eventos en la cola. // sender sim_schedule(out, 0.5, 0); // receiver Sim_event ev = new Sim_event(); sim_hold(2.0); // sim_wait() here would block indefinitely as event arrived // whilst we were holding System.out.println("Sim_waiting() returns: "+sim_waiting()); if(sim_waiting() > 0) sim_select(Sim_system.SIM_ANY, ev);

  12. El paquete simjavaLa cola de eventos • Si es necesario tomar el siguiente evento que ha llegado o el que va a llegar: • Sim_get_next(ev) que es implementa como: • Sim_system.SIM_ANY es un metacaracter para tomar cualquier evento. Para seleccionar se emplean los predicados: • Sim_select (new Sim_type_p(tag), ev) para elegir sólo los que confronten con un tag • Sim_select (new Sim_from_p(id), ev) para elegir sólo los que tengan un identificador id. • Pueden programarse más predicados if(sim_waiting() > 0) sim_select(Sim_system.SIM_ANY, ev); else sim_wait(ev);

  13. El paquete simjavaEstadísticos y moritorización • Se incluyen classes para generar números aleatorios. • Sim_normal_obj, Sim_uniform_obj, Sim_negexp_obj • Valores acumulados de variables a lo largo de un periodo de tiempo pueden usarse con la clase Sim_accum. • Update(double interval, double value) indica que la variable tuvo el valor value en el intervalo de tiempo interval. • Max( ) min( ) interval_sum ( ) son algunas de las funciones incluidas para hacer estadísticas. • La clase Sim_system tiene métodos para monitorizar la simulación • Set_auto_trace(boolean on) monitoriza todo lo que ocurre. • Get_entity_id(String name) devuelve el número de identificador de la entidad. • Clock( ) devuelve el tiempo de simulación.

More Related