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 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."/>
<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'>
<script>
var lunghezzaExec=300 //in millis
@ -57,30 +57,58 @@
this.log("<span style=\"color: violet\">"+this.stato+"</span>");
};
Processo.prototype.termina = function (){
this.cambiaStato("terminazione");
(this.pagine).forEach(function(item, index){
if(item>=0) resettaPagina(item);
});
this.cambiaStato("terminato");
var i = processiPronti.indexOf(this);
processiTerminati.push(processiPronti.splice(i, 1)[0]);
if(this.terminazioneCont===undefined){
this.terminazioneCont=0;
this.cambiaStato("terminazione");
}
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.terminazioneCont=undefined;
var i = processiPronti.indexOf(this);
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){
this.termina();
return false;
return this.termina();
}
this.stato="esecuzione";
this.log("<span style=\"color: violet\">esecuzione</span> pagina <span style=\"color: orange\">" +
this.percorsoAllocazione[this.contatorePercorso]+"</span>");
if(paginaDaCaricareGiaAllocata(this)){
this.contatorePercorso++;
return true;
this.stato="pronto";
return false;
}
else {
return allocaSegmento(this);
allocaSegmento(this);
this.stato="pronto";
return false;
}
this.stato="pronto";
};
var processiPronti = new Array();
var processiTerminati = new Array();
@ -151,7 +179,15 @@
function loopProcessiPronti(){
if(processiPronti.length>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++;
vuoto=false;
}
@ -169,7 +205,7 @@
if(!interrompi) loopProcessiPronti();
}
function testaProcessiPronti(){
for(var j=0; j<100; j++){
for(var j=0; j<10; j++){
new Processo();
}
loopProcessiPronti();
@ -183,6 +219,19 @@
}
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>
<style type="text/css">
body{
@ -355,7 +404,6 @@
td.memCell{
width: 3em;
height: 3em;
color: grey;
background: white;
text-align: center;
vertical-align: middle;
@ -429,7 +477,7 @@
for(var i=0; i<10; i++){
document.write("<tr>")
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>")
}

4
jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long