Lavoro sulla tab. della memoria
This commit is contained in:
parent
c623b1061c
commit
258d9c2cf0
2 changed files with 70 additions and 18 deletions
84
index.html
84
index.html
|
@ -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
4
jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in a new issue