problema
Dato un insieme di applicazioni "A []" con costo di esecuzione "Ex", Ora di arrivo "t", Requisiti di risorse "R" e il sistema con risorse libere "Fr", calcolare il tempo di completamento di tutte le applicazioni .
Limitazioni importanti
- Ogni applicazione proverà ad eseguire in parallelo dato che le seguenti condizioni sono vere:
a). Ora di arrivo "t" > = Ora corrente
b). Requisiti di risorse "R" < = risorse di sistema libere "Fr"
-
Se una serie di applicazioni sono in esecuzione e la condizione "a" diventa vera per una nuova applicazione ma la condizione "b" non è ancora vera, la nuova applicazione deve attendere che alcune applicazioni finiscano finché non ne ha abbastanza risorse gratuite per iniziare.
-
Non appena un'applicazione è "programmata", le risorse di sistema libere devono essere aggiornate i.e Fr-R
-
Non appena un'applicazione è finita, le risorse di sistema libere devono essere restituite al sistema i.e Fr + R
La condizione "a" è abbastanza semplice da controllare, ma sono bloccato alla condizione "b". Il problema è che come trovare i tempi di attesa e di fine appropriati di un'applicazione, dato che l'esecuzione è istantanea, cioè non vogliamo aspettare due ore per l'algoritmo se il costo di esecuzione di un'applicazione è di 2 ore. Il tempo di completamento di un'applicazione è un'aggiunta semplice, ovvero startTime + ExecutionCost. startTime può essere diverso dall'ora di arrivo dato che un'applicazione deve attendere risorse gratuite.
Algoritmo incompleto
Questo è quello che ho finora. I tempi di rifinitura sono errati in quanto non tengono conto del tempo che una applicazione deve trascorrere in attesa di risorse gratuite. Inoltre, non sto aggiornando il tempo virtuale da nessuna parte perché non sono sicuro di quando aggiornarlo.
for(int i=0; i< A.size();i++){
if(A.arrivalTime>=virtualTime)
{
submit(A[i])
}
}
Submit(Application A){
if(A.requiredResources<=SystemResources){
A.startTime=virtualTime
Schedule(A)
}
}
Schedule(Application A){
A.finishingtime=A.startTime+A.ExecutionCost
}