diff --git a/index.html b/index.html
index 41333db..95e9b63 100644
--- a/index.html
+++ b/index.html
@@ -18,39 +18,67 @@
istanteAllocazione: -1,
numeroPagina: -1
}
- var processo = {
- pid: 1,
- tempoDiCompletamento: 0,
- nPagine: 0,
- pagine: 0, //vettore contenente gli indirizzi di tutte le pagine in ordine
- paginaDaAllocare: 0
- }
var processi = new Array();
- function generaProcesso(){
- var nuovo=clone(processo);
- processi.push(nuovo);
- nuovo.tempoDiCompletamento=Math.floor(Math.random()*10)+3;
- nuovo.nPagine=Math.floor(Math.random()*10)+3;
- nuovo.pagine=new Array(nuovo.nPagine);
- for(var i=0; i=this.percorsoAllocazione.length){
+ this.termina();
return false;
}
+ scriviLog("Processo "+this.pid+": esecuzione pagina " + this.percorsoAllocazione[this.contatorePercorso]);
+ if(paginaDaCaricareGiaAllocata(this)){
+ this.contatorePercorso++;
+ return true;
+ }
+ else {
+ return allocaSegmento(this);
+ }
+ };
+
+ function allocaSegmento(proc){
+ //ricerca memoria libera tramite first-fit
for(var i=0; i<100; i++){
if(risorse.mem[i].pid==0) break;
}
+
if(i==100){
//allocazione fallita
- scriviLog("Allocazione fallita. Gestione del page fault...");
+ scriviLog("Allocazione fallita. Gestione della memoria piena...");
//si applica least recently used
var min=0;
@@ -59,19 +87,24 @@
min = i;
}
if(!resettaPagina(min)){
- scriviLog("Gestione del page fault fallita.");
+ scriviLog("Gestione della memoria piena fallita.");
return false;
};
i=min;
}
risorse.mem[i].pid=proc.pid;
- risorse.mem[i].numeroPagina=proc.paginaDaAllocare;
+ risorse.mem[i].numeroPagina=proc.percorsoAllocazione[proc.contatorePercorso];
risorse.mem[i].istanteAllocazione=Date.now();
- proc.pagine[proc.paginaDaAllocare]=i;
- scriviLog("Allocata pagina "+proc.paginaDaAllocare+" in locazione di memoria "+i);
- proc.paginaDaAllocare++;
+ proc.pagine[proc.percorsoAllocazione[proc.contatorePercorso]]=i;
+ scriviLog("Allocata pagina "+proc.percorsoAllocazione[proc.contatorePercorso]+" in locazione di memoria "+i);
+ proc.contatorePercorso++;
return true;
}
+ function paginaDaCaricareGiaAllocata(proc){
+ if(proc.contatorePercorso>=proc.percorsoAllocazione.length) return false;
+ if(proc.pagine[proc.percorsoAllocazione[proc.contatorePercorso]]!=-1) return true;
+ return false;
+ }
function resettaPagina(pagina){
scriviLog("Libero locazione di memoria "+pagina);
for(var i=0; i