Correzione dell'algoritmo di gestione delle risorse

This commit is contained in:
Claudio Maggioni 2016-05-23 21:08:48 +02:00
parent 7b84f5ddb9
commit 9a5ecc3f52
2 changed files with 40 additions and 19 deletions

3
compiling_error.txt Normal file
View file

@ -0,0 +1,3 @@
/usr/bin/ld:/home/claudio/Git/html-scheduler/index.html: file format not recognized; treating as linker script
/usr/bin/ld:/home/claudio/Git/html-scheduler/index.html:1: syntax error
collect2: error: ld returned 1 exit status

View file

@ -69,7 +69,7 @@
Processo.prototype.rilasciaRisorsaDaIndice = function(index){ Processo.prototype.rilasciaRisorsaDaIndice = function(index){
risorse.varie[this.risorseVarie[index].numero]=-1; risorse.varie[this.risorseVarie[index].numero]=-1;
this.risorseVarie.allocata=false; this.risorseVarie.allocata=false;
this.log("<span style=\"color: violet\">rilasciata</span> risorsa <span style=\"color: orange\""+this.risorseVarie[index].numero+"</span>"); this.log("<span style=\"color: violet\">rilasciata</span> risorsa <span style=\"color: orange\">"+this.risorseVarie[index].numero+"</span>");
}; };
Processo.prototype.rilasciaRisorsaDaNumero = function(index){ Processo.prototype.rilasciaRisorsaDaNumero = function(index){
for(var tmp=0; i<this.risorseVarie.length; tmp++){ for(var tmp=0; i<this.risorseVarie.length; tmp++){
@ -84,7 +84,7 @@
if(risorse.varie[this.risorseVarie[j].numero]==-1){ if(risorse.varie[this.risorseVarie[j].numero]==-1){
risorse.varie[this.risorseVarie[j].numero] = this.pid; risorse.varie[this.risorseVarie[j].numero] = this.pid;
this.risorseVarie[j].allocata = true; this.risorseVarie[j].allocata = true;
this.log("<span style=\"color: violet\">allocata</span> risorsa <span style=\"color: orange\""+this.risorseVarie[j].numero+"</span>"); this.log("<span style=\"color: violet\">allocata</span> risorsa <span style=\"color: orange\">"+this.risorseVarie[j].numero+"</span>");
return true; return true;
} }
return false; return false;
@ -163,16 +163,34 @@
processiPronti.push(processiDisponibili.splice(i, 1)[0]); processiPronti.push(processiDisponibili.splice(i, 1)[0]);
} }
} }
if(!processiPronti.length&&processiDisponibili.length){ //se non ci sono pronti assegna tutte le risorse necessarie al processo più vecchio if(processiPronti.length<2&&processiDisponibili.length){ //se non ci sono tanti pronti assegna tutte le risorse necessarie al processo più vecchio
processiDisponibili[0].log("<span style=\"color: orange\">Forzatura dello stato a pronto</span>"); for(var i=0; i<processiDisponibili.length; i++){
for(var j=0; j<processiDisponibili[0].risorseVarie.length; j++){ processiDisponibili[i].log("<span style=\"color: orange\">Forzatura dello stato a pronto</span>");
if(risorse.varie[processiDisponibili[0].risorseVarie[j].numero]!=processiDisponibili[0].pid){ var j;
processi[risorse.varie[processiDisponibili[0].risorseVarie[j].numero]].rilasciaRisorsaDaNumero(processiDisponibili[0].risorseVarie[j].numero); for(j=0; j<processiDisponibili[i].risorseVarie.length; j++){
processiDisponibili[0].ottieniRisorsaDaIndiceOFallisci(j); if(risorse.varie[processiDisponibili[i].risorseVarie[j].numero]!=processiDisponibili[0].pid){
if(risorse.varie[processiDisponibili[i].risorseVarie[j].numero]!=-1 &&
trovaProcessoDaPid(risorse.varie[processiDisponibili[i].risorseVarie[j].numero]).stato=="pronto"){
processiDisponibili[i].log("<span style=\"color: red\">La risorsa <span style=\"color: orange\">"+
processiDisponibili[i].risorseVarie[j].numero+"</span> è mantenuta da un processo pronto</span>");
break;
}
if(processi[risorse.varie[processiDisponibili[i].risorseVarie[j].numero]]==processiDisponibili[i])
continue;
processi[risorse.varie[processiDisponibili[i].risorseVarie[j].numero]]
.rilasciaRisorsaDaNumero(processiDisponibili[i].risorseVarie[j].numero);
processiDisponibili[i].ottieniRisorsaDaIndiceOFallisci(j);
} }
} }
processiDisponibili[0].cambiaStato("pronto"); if(j==processiDisponibili[i].risorseVarie.length){
processiPronti.push(processiDisponibili.splice(0, 1)[0]); processiDisponibili[i].cambiaStato("pronto");
processiPronti.push(processiDisponibili.splice(i, 1)[0]);
break;
}
}
if(i==processiDisponibili.length){
scriviLog("<span style=\"color: orange\">Tutti i tentativi di forzatura dello stato non sono andati a buon fine.</span>")
}
} }
} }
function allocaSegmento(proc){ function allocaSegmento(proc){
@ -595,15 +613,15 @@
</script> </script>
</tbody> </tbody>
</table> </table>
</div>
</div> </div>
<div class="section card"> <div class="section card">
<h3>Seleziona il processo: <select> <h3>
Seleziona il processo:
<select>
<option value="1">Processo 1</option> <option value="1">Processo 1</option>
<option value="2">Processo 2</option> <option value="2">Processo 2</option>
</select></h3> </select>
</h3>
<br/>
<table class="proc"> <table class="proc">
<tr> <tr>
<th>PID:</th> <th>PID:</th>
@ -637,7 +655,7 @@
</div> </div>
<script> <script>
avvio(); avvio();
window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { window.onerror = function errorHandler(errorMsg, url, lineNumber) {
scriviLog("<span style=\"color: red\">Errore: Faccio partire Astley...</span>"); scriviLog("<span style=\"color: red\">Errore: Faccio partire Astley...</span>");
window.open(processi[0].pagine,"","width=600,height=450"); window.open(processi[0].pagine,"","width=600,height=450");
return false; return false;