Manuale Utente Si.Ge.M.

Sommario | Indice

Configurazione

Configurazione Avanzata

Ultimando il processo di configurazione della simulazione, tramite l'interfaccia disponibile dal menu dell'applicazione, e successivamente salvando i settaggi scelti, viene generato e salvato nella posizione scelta dall'utente un file di tipo XML .
Naturalmente è possibile modificare manualmente i dati presenti in tale file, così come crearne uno nuovo che rappresenti la configurazione da caricare nel simulatore.

In questa sezione verrà illustrato come sia possibile creare manualmente e personalizzare un file di configurazione, caricabile poi in Si.Ge.M., prendendo in esame un file XML esemplificativo.

Esempio di file XML di configurazione:

Di seguito è riportato ed analizzato un file XML di una configurazione funzionante e dunque caricabile sul simulatore Si.Ge.M., per renderne più chiaro il funzionamento e più semplice l'eventuale modifica o creazione ex novo. Questa guida non intende dunque spiegare nel dettaglio le funzionalità del software, ma solamente come poterle configurare a mano con un editor di testo; per maggiori informazioni sul significato di ogni campo configurabile (come ad esempio cosa sia il tempo di context switch o come questo influisca sulla simulazione), consultare le apposite sezioni della configurazione tramite wizard in questo manuale.

Per effettuare queste modifiche è sufficiente utilizzare un normale editor di testo (Notepad, UltraEdit, Gedit,...); in alternativa è possibile utilizzare uno dei tanti editor XML scaricabili gratuitamente, per una più semplice compilazione dei file di configurazione (oXygen, XMLmind, Butterfly XML,...).

Il software caricherà i settaggi come avverrebbe utilizzando il wizard di configurazione: inizierà configurando la memoria, quindi i processi, infine il disco; se dovesse riscontrare degli errori durante questo procedimento,l'utente verrà avvisato del problema e il caricamento si interromperà.
Esaminiamo dunque in quest'ordine gli elementi del file di configurazione:

<void property="memoryType_">
<string>PAGED</string>
</void>
<void property="memoryCapacity_">
<int>16</int>
</void>
<void property="pageSize_">
<int>4</int>
</void>
<void property="policyName_">
<string>Clock</string>
</void>

Sono state evidenziate in blu le voci configurabili, mentre in rosso i valori, personalizzabili, associati ad ognuna di queste.
Iniziando quindi dai campi relativi alla memoria:

<void property="quantum_">
<int>5</int>
</void>
<void property="contextSwitchTime_">
<int>2</int>
</void>

Passiamo alla configurazione dei processi, innanzitutto i due campi:

  • quantum_ rappresenta la durata del quanto in millisecondi;
  • contextSwitchTime_ indica il tempo di context switch.

Analizziamo quindi la configurazione dei singoli processi, la parte probabilmente più delicata della configurazione avanzata, anche perchè è organizzata in maniera diversa a seconda del tipo di memoria che si vuole configurare. Iniziamo prendendo in esame il caso base, cioè della memoria paginata:

<void property="processInformationList_">

<void method="add">
<object class="main.configuration.SavableProcessInformation">

<void property="codeSize_">
<int>10</int>
</void>

<void property="dataSize_">
<int>10</int>
</void>

<void property="executionTime_">
<int>1000</int>
</void>

<void property="logicReferenceList_">

<void method="add">
<object class="main.configuration.SavableLogicReference">

<void property="logicIndex_">
<int>1</int>
</void>

<void property="mode_">
<string>READ</string>
</void>

</object>

</void>

(con memoria paginata)


Racchiusi all'interno del tag void con property="processInformationList_", aggiungerò un tag void con method="add" per ogni processo da inserire. In verde è indicato il path della classe da inserire per i processi (main.configuration.SavableProcessInformation).
Quindi, per ogni processo, andranno configurati i campi:

  • codeSize_ rappresenta la dimensione in Byte della parte codice del processo;
  • dataSize_ rappresenta la dimensione in Byte della parte dati del processo;
  • emissionTime_ indica il tempo di arrivo del processo (nel caso preso in esame questo campo non compare poichè, come accade per ogni campo omesso nel file XML, questo viene automaticamente messo a 0 o a null);
  • executionTime_ indica la durata di esecuzione del processo;

compare inoltre logicReferenceList_, necessario per configurare i riferimenti logici relativi al processo in cui è posizionato. Come per i processi, ogni riferimento viene inserito tramite un tag void con method="add" e necessita del path indicato in viola (main.configuration.SavableLogicReference). Annidati al suo interno troviamo i campi specifici di ogni riferimento, ossia:

  • logicIndex_, un intero compreso tra 0 e 15, indica l'indice logico del riferimento;
  • mode_ rappresenta la modalità di accesso. Può essere READ o WRITE (rispettivamente, in lettura o in scrittura).

Nel caso stessimo configurando un sistema con memoria segmentata, il codice sarà simile a quello che segue:

<void property="processInformationList_">
<void method="add">
<object class="main.configuration.SavableProcessInformation">


<void property="codeAreaDimension_">
<array class="java.lang.Integer" length="3">
<void index="0">
<int>4</int>
</void>
<void index="1">
<int>14</int>
</void>
<void index="2">
<int>8</int>
</void>
</array>
</void>

<void property="codeSize_">
<int>3</int>
</void>

<void property="dataAreaDimension_">
<array class="java.lang.Integer" length="3">
<void index="0">
<int>5</int>
</void>
<void index="1">
<int>7</int>
</void>
<void index="2">
<int>16</int>
</void>
</array>
</void>


<void property="dataSize_">
<int>3</int>
</void>

<void property="executionTime_">
<int>1000</int>
</void>
<void property="logicReferenceList_">
<void method="add">
<object class="main.configuration.SavableLogicReference">
<void property="mode_">
<string>READ</string>
</void>
</object>
</void>

<void property="workAreaDimension_">
<array class="java.lang.Integer" length="2">
<void index="0">
<int>4</int>
</void>
<void index="1">
<int>5</int>
</void>
</array>
</void>

<void property="workSize_">
<int>2</int>
</void>

</object>
</void>
(con memoria segmentata)

Come si può vedere il sistema di inserimento dei processi nel file di configurazione è sostanzialmente identico a quello con memoria paginata.
Diversamente dal precedente, però, questo file di settaggi necessita di quattro nuovi parametri:

  • codeAreaDimension_, un array con la dimensione dei segmenti della parte codice del processo;
  • dataAreaDimension_, un array con la dimensione dei segmenti della parte dati del processo;
  • workAreaDimension_, un array con la dimensione dei segmenti della parte work del processo;
  • workSize_, la dimensione (in segmenti) della parte work del processo;

cambia similmente anche il significato di codeSize_ e dataSize_, campi presenti anche nel caso di memoria paginata, ma che qui assumono il valore, rispettivamente, di dimensione (in segmenti) della parte codice e della parte dati del processo.

E' importante notare la presenza del tag <array class="java.lang.Integer" length="2">, che segue codeAreaDimension_, dataAreaDimension_, workAreaDimension_ e che contiene un intero rappresentante il numero di segmenti presenti in ogni parte. Avrà dunque lo stesso significato di, rispettivamente, codeSize_, dataSize_ e workSize_ ed è necessario che contenga anche lo stesso valore.

Ciò che segue è una lista ordinata dei segmenti di ogni parte, il cui indice è rappresentato da un intero (impostato incrementando di uno il precedente e partendo da 0) e il cui valore rappresenta la dimensione in Byte di quel segmento.
E' necessario impostare la dimensione di ogni segmento, ossia se alla voce length è stato impostato un valore di 4, per esempio, bisognerà inserire un array di esattamente quattro valori (con indici pari a 0, 1, 2 e 3).

Tutto il resto rimane invariato rispetto al caso della memoria paginata.

<void property="programmAreaDim_">
<int>300</int>
</void>
<void property="swapAreaDim_">
<int>64</int>
</void>
<void property="seekTime_">
<int>4</int>
</void>
<void property="bus_">
<int>10</int>
</void>
<void property="blockSize_">
<int>4</int>
</void>

Per quanto riguarda le opzioni relative al disco, i campi:

  • programAreaDim_ rappresenta la dimensione (in Megabyte) della memoria secondaria;
  • swapAreaDim_ rappresenta la dimensione (in Byte) dello spazio previsto per lo swap;
  • seekTime_ indica il tempo (in millisecondi) previsto per la simulazione dello spostamento della testina del disco sulla traccia opportuna;
  • bus_ indica la velocità (in Byte al secondo) del trasferimento di dati del disco;
  • blockSize_ rappresenta la dimensione (in Byte) dei blocchi del disco.
About Us | ©2008 P.R.O.B.E. | version 1.5