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