Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilNikolas Pravec
1
C-Sim verze 5.0
2
Charakteristika Softwarový nástroj pro simulaci v diskrétním čase Použitá metodou paralelních procesů Navržen podle vzoru jazyka SIMULA
3
Typy systémů Dynamické versus statické Spojité vs. diskrétní Otevřené vs. uzavřené Deterministické vs. stochastické
4
Metody diskrétní simulace Metoda interpretace událostí Metoda pseudo-paralelních procesů
6
Simulační krok (csim_step()) Spustí se proces na prvním místě kalendáře (vytvoří se nový proces nebo se předá se řízení existujícímu procesu) a zvýší se hodnota simulačního času. Proces vykonávající hlavní smyčku se zastaví. Provede se část kódu po kterou je konstantní simulační čas Spustí se proces s hlavní smyčkou a zastaví se proces z kalendáře
7
Stavy procesu
8
Implementace založená na dlouhých skocích funkce setjmp() uloží obsah registrů procesoru do struktury v paměti funkce longjmp() obnoví obsah registrů z paměti, výpočet pokračuje na místě volání setjmp(), zda jde o prvotní uložení nebo o návrat se rozliší podle návratové hodnoty setjmp().
9
Makro pro přepnutí procesů #define csim_switch_processes(from, to) if (setjmp(from->rollback) == 0) { longjmp(to->rollback, 1); }
10
Implementace založená na vláknech pro každý proces je vytvořeno jedno vlákno, hlavní smyčka simulace běží ve vlákně které vytváří a ukončuje všechnu ostatní vlákno má proměnnou thread_run, podmínkovou proměnnou (cond_var typu pthread_cond_t) a mutex (pthread_mutex_t).
11
Makro pro přepnutí procesů pthread_mutex_lock(&(_p_from->mutex)); _p_from->thread_run = FALSE; pthread_mutex_lock(&(_p_to->mutex)); _p_to->thread_run = TRUE; pthread_mutex_unlock(&(_p_to->mutex)); pthread_cond_signal(&(_p_to->cond_var)); while (_p_from->thread_run != TRUE) pthread_cond_wait (&(_p_from->cond_var), &(_p_from->mutex)); pthread_mutex_unlock(&(_p_from->mutex));
12
Porovnání implementace Dlouhé skoky Lepší přenositelnost Vyšší rychlost Nelze používat automatické proměnné Nelze vnořovat volání funkcí
13
Porovnání implementace POSIX vlákna Platforma musí podporovat POSIX vlákna Nižší rychlost Vlastní zásobník
14
Datové typy Jako v SIMULE: CSIM_LINK, CSIM_HEAD, CSIM_PROCESS Všechny odvozené od CSIM_DYN_MEM
15
Hierarchie datových typů
16
Mechanizmus odvozování datových typů Náhrada za dědičnost v objektovém jazyce pomocí maker typedef struct my_process { csim_d_process; int my_data; } MY_PROCESS;
17
Další vlastnosti Detekce chyb za běhu Statistika
18
Struktura a moduly
19
Použití Vložit hlavičkové soubory Definovat typy pro procesy (pokud je třeba) Napsat programy procesů Napsat hlavní smyčku
20
Typ procesu typedef struct { csim_d_process; float mi; float lambda; } WORKER;
21
Program procesu csim_program(WORKER, WORKER_PROG) for (;;) { csim_hold (csim_negexp(rng, my.lambda)); csim_lock_sem(p_sem); csim_hold (csim_negexp(rng, my.mi)); csim_unlock_sem(p_sem); } csim_end_program
22
Inicializace csim_init_mem(); p_sem = csim_new_semaphore(1); rng = csim_new_rng(1234); for (i=0; i<N; i++) { p_wrks[i] = csim_new_process(WORKER, WORKER_PROG); p_wrks[i]->mi = 1; p_wrks[i]->lambda = 0.5; csim_activate_at((CSIM_PROCESS *) p_wrks[i], 0); }
23
Hlavní smyčka while(csim_time() < 1000000.0) { if (csim_step() == FAILURE) { CSIM_ERROR er; csim_error(&er); printf("%s\n", csim_error_msg(er.error_code)); break; } csim_clear_mem();
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.