Il progetto consiste nell’implementare un
simulatore a sequenziamento di eventi e guidato da distribuzioni che
permetta di stimare la variabile di uscita U = tempo di risposta
L’implementazione è stata realizzata utilizzando il linguaggio Java. L’utilizzo delle interfacce grafiche Swing ha reso il software intuitivo e versatile.
Dal pannello Sistema Simulato
è possibile scegliere il sistema ad 1
CPU o a 2 CPU.
Dal pannello Configurazione
, è possibile specificare i tempi
-
Simula
per eseguire il simulatore nella configurazione standard ($T_a = 30, T_{CPU} = T_{IO} = 2$ , disciplina arrivi esponenziale, disciplina centri 3-erlangiana, coda CPU di tipo SPTF, coda I/O di tipo LIFO); -
Convalida
per eseguire il simulatore nella configurazione di convalida, ossia portandolo nelle condizioni della figura 6.36 del libro di PQIS ($T_a = 30, T_{CPU} = T_{IO} = 2$ , disciplina arrivi poissoniana, disciplina centri esponenziale, coda CPU e coda I/O di tipo FIFO)
Il pannello Grafici
contiene i grafici di media e varianza
campionarie. Questi vengono popolati interattivamente durante
l’esecuzione della simulazione.
Il pannello in basso contiene le informazioni sui tipi di generatore impostati (Poissoniano, Uniforme, ecc) e i tipi di coda (SPTF, FIFO, ecc.). Inoltre, è presente il box informativo sui valori calcolati dell’intervallo di confidenza.
La progettazione delle classi è stata effettuata nell’ottica di una
possibile e facile estensione per l’utilizzo di code e generatori di
diverso tipo. Per raggiungere tale obiettivo è stato utilizzato il
design pattern Abstract Factory
. Lo schema delle classi è illustrato
in figura.
Il processo di simulazione ha inizio con l’inizializzazione del modello, ossia delle variabili di stato, delle variabili di carico, del clock e del calendario.
L’esecuzione procede nel sequenziatore, il quale effettua iterazioni eseguendo i job provenienti dal calendario. L’iterazione termina quando si è raggiunto il numero di run desiderati e viene eseguito il processo di Fine Simulazione.
Il processo arrivo
imposta il tempo di arrivo del job ed il tempo di
processamento prelevandolo dal corrispondente generatore. Il job passa
alla CPU, se questa è libera, altrimenti viene immesso nella coda CPU.
Il processo fineIO
elimina il job dall’esecuzione dell’I/O. Il job
passa alla CPU, se questa è libera, altrimenti viene immesso nella coda
CPU. Infine, viene prelevato un nuovo job dalla coda IO, se quest’ultima
non è vuota.
Il processo fineCPU
elimina il job dall’esecuzione della CPU. Il job
può passare alla I/O se la variabile aleatoria di routing è minore di
0.9, altrimenti il job esce dal sistema e viene calcolato il tempo di
uscita.
Infine, viene prelevato un nuovo job dalla coda CPU, se quest’ultima non è vuota.
Il modello di simulazione necessita dei seguenti generatori di sequenze pseudocasuali:
-
Generatore esponenziale per la stima dei tempi di arrivo, e per la stima dei tempi di servizio CPU e IO del sistema di convalida
-
Generatore 3-Erlangiano per la stima dei tempi di servizio CPU e IO
-
Generatore uniforme per la scelta di routing
-
Generatore poissoniano per la stima dei tempi di arrivo del sistema di convalida
L’esecuzione normale del simulatore viene effettuata portando il simulatore nelle condizioni di distribuzioni di arrivi e servizi, e discipline di servizio, del caso della configurazione standard. In particolare, vengono impostati i generatori esponenziale per gli arrivi e 3-erlangiano per i centri, e le code sono di tipo SPTF per il centro CPU e LIFO per il centro I/O.
Le curve della media e della varianza, utili alla rimozione iniziale (initial bias) sono illustrate graficamente nel software, e vengono riportate in figura.
La tecnica utilizzata è quella dei run replicati.
Durante l’esecuzione dei run replicati si calcola la media campionaria della variabile osservata U: $$\overline{U}j(n) = n^{-1} \sum{i=1}^n U_{ij}$$
e, da questa, si calcolano gli stimatori di media e varianza di Gordon:
Osservando gli stimatori di Gordon, si noterà che la media
Nel caso in esame possiamo osservare che a 1000 run si ha un buon grado di stabilità del sistema, in quanto la media campionaria è abbastanza stabile e la varianza campionaria linearmente decrescente.
Nella fase statistica, per la stima di
I parametri
Per il calcolo della media al 90% del livello di confidenza, si ha:
Confrontando il valore 0.95 con la tavola della distribuzione normale
cumulativa, si ha che
I risultati della media dei tempi di risposta e dell’intervallo di confidenza sono i seguenti:
-
Tempo di risposta:
$113.28$ -
Intervallo di confidenza:
$(110.01, 116.55)$
La convalida del simulatore viene effettuata portando il simulatore nelle condizioni di distribuzioni di arrivi e servizi, e discipline di servizio, del caso della Figura 6.36 del libro di PQIS.
Il simulatore viene quindi convalidato cliccando sul bottone
Convalida
. Vengono impostati i generatori Poissoniano per gli arrivi
ed Esponenziale per i centri, e le code sono di tipo FIFO sia per CPU
che per I/O.
Le curve della media e della varianza del simulatore nelle condizioni di convalida sono riportate in figura.
Nel caso della convalida, i risultati della media dei tempi di risposta e dell’intervallo di confidenza sono i seguenti:
-
Tempo di risposta:
$103.83$ -
Intervallo di confidenza:
$(99.76, 107.9)$
Il tempo di risposta globale che ne scaturisce dall’analisi teorica è:
Pertanto, è possibile affermare che il risultato ottenuto dalla simulazione è molto vicino a quello dell’analisi teorica.
La variante del simulatore consiste nel portare il simulatore nelle
condizioni di avere due centri CPU, ciascuno di velocità operativa
Dal corso di Prestazioni e Qualità di Impianti e Sistemi, confrontando i due casi è noto che:
-
il tempo di attesa
$E(t_w)$ migliora con il centro a capacità distribuita, ossia $ T_w(m, \lambda, C) \leq T_w(1, \lambda, C)$; -
il tempo di risposta
$E(t_q)$ ha un comportamento opposto a quello di attesa, in quanto peggiora aumentando$m$ . In altre parole, il centro a capacità concentrata genera tempi di risposta migliori rispetto a quello a capacità distribuita, ossia $ T_q(1, \lambda, C) \leq T_q(m, \lambda, C)$.
Per verificare il comportamento del simulatore è sufficiente cliccare
sul radio-button 2 CPU
dello schema simulato del software.
Quindi, si osserva facilmente che i tempi di risposta sono superiori al centro a capacità concentrata.
I valori di media dei tempi di risposta e intervallo di confidenza sono confrontati nella seguente tabella.
1 CPU | 2 CPU | |
---|---|---|
E(T_q) | 113.28 | 135.73 |
Limite inf. | 110.01 | 130.4 |
Limite sup. | 116.55 | 141.06 |