Lavoro sulla tab. della memoria

This commit is contained in:
Claudio Maggioni 2016-05-13 16:43:15 +02:00
parent c623b1061c
commit 258d9c2cf0
2 changed files with 70 additions and 18 deletions

View file

@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="author" content="Claudio Maggioni, Fabio Brambilla, Pamela Dardano, Federico Mainetti"/> <meta name="author" content="Claudio Maggioni, Fabio Brambilla, Pamela Dardano, Federico Mainetti"/>
<meta name="description" content="Simulazione di uno scheduler in HTML, Javascript e (purtroppo) CSS."/> <meta name="description" content="Simulazione di uno scheduler in HTML, Javascript e (purtroppo) CSS."/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <script src="jquery.min.js"></script>
<link href='https://fonts.googleapis.com/css?family=Hammersmith+One' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Hammersmith+One' rel='stylesheet' type='text/css'>
<script> <script>
var lunghezzaExec=300 //in millis var lunghezzaExec=300 //in millis
@ -57,30 +57,58 @@
this.log("<span style=\"color: violet\">"+this.stato+"</span>"); this.log("<span style=\"color: violet\">"+this.stato+"</span>");
}; };
Processo.prototype.termina = function (){ Processo.prototype.termina = function (){
if(this.terminazioneCont===undefined){
this.terminazioneCont=0;
this.cambiaStato("terminazione"); this.cambiaStato("terminazione");
(this.pagine).forEach(function(item, index){ }
if(item>=0) resettaPagina(item); if(this.pagine[this.terminazioneCont+1]===undefined){
}); if(this.pagine[this.terminazioneCont]!=-1){
aggiornaMemoria(this.pagine[this.terminazioneCont],"#FF6666");
resettaPagina(this.pagine[this.terminazioneCont]);
this.pagine[this.terminazioneCont]=-1;
}
this.cambiaStato("terminato"); this.cambiaStato("terminato");
this.terminazioneCont=undefined;
var i = processiPronti.indexOf(this); var i = processiPronti.indexOf(this);
processiTerminati.push(processiPronti.splice(i, 1)[0]); processiTerminati.push(processiPronti.splice(i, 1)[0]);
return "TERM";
}
else if(this.pagine[this.terminazioneCont]==-1){
this.terminazioneCont++;
return this.termina();
}
else{
aggiornaMemoria(this.pagine[this.terminazioneCont],"#FF6666");
resettaPagina(this.pagine[this.terminazioneCont]);
this.pagine[this.terminazioneCont]=-1;
this.terminazioneCont++;
return true;
}
}; };
Processo.prototype.esecuzioneCicloSingolo = function(){ Processo.prototype.numeroPagineAllocate = function(){
var tmp=0;
for(var i=0; i<this.pagine.length; i++){
if(this.pagine[i]>=0) tmp++;
}
return tmp;
}
Processo.prototype.esecuzioneCicloSingolo = function(){ //false: non terminato, true: terminato
if(this.contatorePercorso>=this.percorsoAllocazione.length){ if(this.contatorePercorso>=this.percorsoAllocazione.length){
this.termina(); return this.termina();
return false;
} }
this.stato="esecuzione"; this.stato="esecuzione";
this.log("<span style=\"color: violet\">esecuzione</span> pagina <span style=\"color: orange\">" + this.log("<span style=\"color: violet\">esecuzione</span> pagina <span style=\"color: orange\">" +
this.percorsoAllocazione[this.contatorePercorso]+"</span>"); this.percorsoAllocazione[this.contatorePercorso]+"</span>");
if(paginaDaCaricareGiaAllocata(this)){ if(paginaDaCaricareGiaAllocata(this)){
this.contatorePercorso++; this.contatorePercorso++;
return true; this.stato="pronto";
return false;
} }
else { else {
return allocaSegmento(this); allocaSegmento(this);
}
this.stato="pronto"; this.stato="pronto";
return false;
}
}; };
var processiPronti = new Array(); var processiPronti = new Array();
var processiTerminati = new Array(); var processiTerminati = new Array();
@ -151,7 +179,15 @@
function loopProcessiPronti(){ function loopProcessiPronti(){
if(processiPronti.length>0){ if(processiPronti.length>0){
if(pidAttuale >= processiPronti.length) pidAttuale=0; if(pidAttuale >= processiPronti.length) pidAttuale=0;
processiPronti[pidAttuale].esecuzioneCicloSingolo(); var tmp;
if((tmp = processiPronti[pidAttuale].esecuzioneCicloSingolo())===true) pidAttuale--;
else if(tmp==="TERM"){
window.setTimeout(aggiornaMemoria, lunghezzaExec);
}
else{
aggiornaMemoria(processiPronti[pidAttuale].pagine[processiPronti[pidAttuale]
.percorsoAllocazione[processiPronti[pidAttuale].contatorePercorso-1]],"#CCFF66");
}
pidAttuale++; pidAttuale++;
vuoto=false; vuoto=false;
} }
@ -169,7 +205,7 @@
if(!interrompi) loopProcessiPronti(); if(!interrompi) loopProcessiPronti();
} }
function testaProcessiPronti(){ function testaProcessiPronti(){
for(var j=0; j<100; j++){ for(var j=0; j<10; j++){
new Processo(); new Processo();
} }
loopProcessiPronti(); loopProcessiPronti();
@ -183,6 +219,19 @@
} }
lunghezzaExec=tmp; lunghezzaExec=tmp;
} }
function aggiornaMemoria(eseguita, colore){
for(var i=0; i<100; i++){
var cella = document.getElementById("memoria"+Math.floor(i/10)+i%10);
if(eseguita==i) cella.style.background=colore;
else if(processiPronti[pidAttuale]!==undefined&&risorse.mem[i].pid==(processiPronti[pidAttuale].pid)) cella.style.background="lightblue";
else if(risorse.mem[i].pid!=0) cella.style.background="orange";
else cella.style.background="white";
cella.innerHTML= risorse.mem[i].pid!=0 ? risorse.mem[i].pid : "";
}
}
function trovaProcessoPronto(pid){
return $.grep(processiPronti, function(e){ return e.pid == pid; });
}
</script> </script>
<style type="text/css"> <style type="text/css">
body{ body{
@ -355,7 +404,6 @@
td.memCell{ td.memCell{
width: 3em; width: 3em;
height: 3em; height: 3em;
color: grey;
background: white; background: white;
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
@ -429,7 +477,7 @@
for(var i=0; i<10; i++){ for(var i=0; i<10; i++){
document.write("<tr>") document.write("<tr>")
for(var j=0; j<10; j++){ for(var j=0; j<10; j++){
document.write("<td class=\"card memCell\" style=\"display: table-cell\" id=\""+i+j+"\">"+(10*i+j)+"</td>"); document.write("<td class=\"card memCell\" style=\"display: table-cell\" id=\"memoria"+i+j+"\"></td>");
} }
document.write("</tr>") document.write("</tr>")
} }

4
jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long