3.2.1 Politica di ordinamento
3.2.2 Politica di assegnazione
Prerequisiti per scrivere una nuova politica sono le conoscenze della
documentazione del package scheduler e del package parametri di questo
software e del linguaggio di programmazione Java. Si consiglia inoltre
di studiare il codice delle politiche già disponibili per comprendere
adeguatamente le funzionalità che una politica di ordinamento deve richiamare
affinché l'intero software funzioni correttamente.
3.2.1 Politica di ordinamento
Per scrivere una politica di ordinamento, occorre creare una classe che implementi un'interfaccia
tra Batch,
Interattivo o
RealTime, a seconda che la
politica da creare sia utilizzata per sistemi batch,
interattivi o
real time.
Esempio di una politica di ordinamento per sistemi batch:
public class SJF implements Batch {
...
}
Se la nuova politica di ordinamento è con prerilascio, allora occorre anche
implementare l'interfaccia ConPrerilascio.
Questa fornisce un metodo astratto PCB
minore(PCB pronto, PCB inEsecuzione)
che deve essere
implementato per ritornare il minore tra pronto ed inEsecuzione
secondo il criterio per il quale la
politica effettua il prerilascio del processo in esecuzione (inEsecuzione).
Esempio della politica di ordinamento con prerilascio SRTF:
public class SRTF extends SJF implements ConPrerilascio {
...
public PCB minore(PCB pronto, PCB inEsecuzione) {
if (pronto.getIstantiDaEseguire() ) inEsecuzione.getIstantiDaEseguire()) {
return pronto;
}
return inEsecuzione;
}
...
}
Se la nuova politica di ordinamento e'
con priorità, allora occorre anche implementare l'interfaccia ConPriorita.
Esempio della politica di ordinamento con priorità Priorita:
public class Priorita implements Interattivo, ConPriorita {
...
}
Se la nuova politica di ordinamento è con quanti di tempo, allora occorre
anche estendere la classe astratta ConQuanti. Questa classe fornisce i
metodi e i campi dati per la gestione
del time slice.
Esempio della politica di ordinamento Round Robin:
public class RR extends ConQuanti implements Interattivo {
...
}
Come si può osservare, è possibile inoltre definire politiche con caratteristiche miste, ossia che implementino più interfacce.
Le funzioni fondamentali per la correttezza di una politica di ordinamento, ereditate dalle interfacce Politica e PoliticaOrdinamento sono:
- L'inserimento.
(public abstract void inserisci(PCB pcb))
Tale metodo deve inserire pcb nella struttura adottata per implementare la coda dei processi pronti, secondo il criterio della politica che si vuole realizzare.
Per esempio, una politica FCFS esegue l'inserimento in coda. Si noti che se la politica è con prerilascio,
si deve valutare la necessità di prerilasciare il processo in esecuzione,
se questo fosse presente. Il processo in esecuzione è ottenibile mediante
l'invocazione scheduler.getPCBCorrente(), dove l'oggetto scheduler di tipo
Scheduler è il riferimento allo scheduler utilizzato.
- L'estrazione.
(public abstract PCB estrai())
Tale metodo si occupa di estrarre un pcb dalla struttura che implementa la
coda dei processi pronti. Per esempio, nella politica FCFS, l'estrazione avviene in testa, per la politica HRRN, l'estrazione avviene in un modo più complesso.
- L'esecuzione.
(public abstract Istante esegui(int istantiSicuri))
Tale metodo deve eseguire il processo in esecuzione per un tempo pari a istantiSicuri. Per fare ciò occorre semplicemente invocare il metodo
scheduler.incrementaTempoScheduler(istantiSicuri). Nel caso di politiche di ordinamento più complesse, come per esempio Round Robin, occorre anche la gestione di altre variabili. Si presti attenzione che la politica di ordinamento può anche richiamare il metodo sopra citato con un parametro inferiore di istantiSicuri . Sempre in riferimento alla politica di
ordinamento Round Robin, infatti, è possibile infatti che il processo in esecuzione finisca il suo quanto di tempo prima di istantiSicuri.
3.2.2 Politica di assegnazione
Per scrivere una politica di assegnazione, occorre creare una classe che implementi l'interfaccia PoliticaAssegnazione.
Esempio di una politica di assegnazione FCFSAss:
public class FCFSAss implements PoliticaAssegnazione {
...
}
Le funzioni fondamentali per la correttezza di una politica di assegnazione, ereditate dalle interfacce Politica e PoliticaAssegnazione sono:
pagina precedente