Aggiunti comandi da tastiera. Gli elementi del menù ora sono ancore. Il menu è fixed in modalità desktop. Aggiunti log alla pausa e al riavvio. Aggiunto comando per eseguire una sola iterazione di loopProcessiPronti alla volta.

This commit is contained in:
Claudio Maggioni 2016-05-14 15:25:50 +02:00
parent 258d9c2cf0
commit 6977953f7a
2 changed files with 62 additions and 20 deletions

View file

@ -2,6 +2,7 @@
<html lang="it">
<head>
<meta charset="utf-8">
<title>Scheduler</title>
<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="jquery.min.js"></script>
@ -19,10 +20,7 @@
this.istanteAllocazione = 0;
this.numeroPagina = -1;
}
//avvio del programma
for(var i=0; i<100; i++){
risorse.mem[i]= new Memoria();
}
var pidNuovo = 1;
function Processo(){
processiPronti.push(this);
@ -105,7 +103,7 @@
return false;
}
else {
allocaSegmento(this);
if(allocaSegmento(this)==="DEALLOC") return true;
this.stato="pronto";
return false;
}
@ -113,7 +111,8 @@
var processiPronti = new Array();
var processiTerminati = new Array();
function allocaSegmento(proc){
//ricerca memoria libera tramite first-fit
var min=0;
//ricerca memoria libera tramite first-fit
for(var i=0; i<100; i++){
if(risorse.mem[i].pid==0) break;
}
@ -121,7 +120,7 @@
//allocazione fallita
proc.log("<span style=\"color: orange\">Allocazione fallita. Gestione della memoria piena...</span>");
//si applica least recently used
var min=0;
min=0;
for(i=1; i<100; i++){
if(risorse.mem[min].istanteAllocazione > risorse.mem[i].istanteAllocazione)
min = i;
@ -130,7 +129,8 @@
proc.log("<span style=\"color: red\">gestione della memoria piena fallita.</span>");
return false;
};
i=min;
aggiornaMemoria(min, "#FF6666");
return "DEALLOC";
}
risorse.mem[i].pid=proc.pid;
risorse.mem[i].numeroPagina=proc.percorsoAllocazione[proc.contatorePercorso];
@ -195,16 +195,29 @@
scriviLog("<span style=\"color: white\">Coda dei processi pronti vuota.<span>");
vuoto=true;
}
if(interrompi) return;
if(interrompi){
if(interrompi===true){
scriviLog("<span style=\"color: white\">In pausa.</span>");
interrompi=2;
}
return;
}
window.setTimeout(function(){
loopProcessiPronti();
},lunghezzaExec);
}
function toggleProcessiPronti(){
interrompi= !interrompi;
if(!interrompi) loopProcessiPronti();
if(!interrompi) {
scriviLog("<span style=\"color: white\">Continuo...</span>");
loopProcessiPronti();
}
}
function testaProcessiPronti(){
function avvio(){
document.getElementsByName("wiki")[0].href=wikiScheduler;
for(var i=0; i<100; i++){
risorse.mem[i]= new Memoria();
}
for(var j=0; j<10; j++){
new Processo();
}
@ -232,6 +245,31 @@
function trovaProcessoPronto(pid){
return $.grep(processiPronti, function(e){ return e.pid == pid; });
}
function comandiDaTastiera(e){
console.log(e.keyCode);
switch(e.keyCode){
case 84:
case 116:
//lettera T: nuovo processo
new Processo();
break;
case 69:
case 101:
//lettera E: pausa/riprendi processi
toggleProcessiPronti();
break;
case 67:
case 99:
//lettera C: avanza di un esecuzioneCicloSingolo se è in pausa
if(interrompi) loopProcessiPronti();
break;
case 82:
case 114:
//lettera R: apri wiki dello scheduler
window.open(window.wikiScheduler,"","width=600,height=450");
break;
};
}
</script>
<style type="text/css">
body{
@ -291,6 +329,7 @@
background: #cccccc;
float: left;
font-weight: lighter;
position: fixed;
}
.nav > p, .section.teoria > p{
margin: 0;
@ -420,6 +459,7 @@
width: calc(100vw - 3rem);
margin-bottom: .5rem;
float: none;
position: static;
}
.sections{
float: none;
@ -439,18 +479,19 @@
}
</style>
</head>
<body>
<body onkeypress="comandiDaTastiera(event)">
<div class="header">
<h1>Scheduler</h1>
</div>
<div class="nav card">
<p><a href="javascript:void(0)">HOME</a></p>
<p><a href="javascript:void(0)">GRAFICO</a></p>
<p><a href="javascript:void(0)">TEORIA</a></p>
<p><a href="#teoria">TEORIA</a></p>
<p><a href="#log">LOG</a></p>
<p><a href="#memoria">MEMORIA</a></p>
<p><a name="wiki">WIKI</a></p>
</div>
<div class="sections">
<div class="section card teoria">
<h2>Teoria</h2>
<a name="teoria"><h2>Teoria</h2></a>
<p>In informatica lo scheduler (da to schedule letteralmente "mettere in lista", ovvero "pianificare") è un componente
di un sistema operativo ovvero un programma che implementa un algoritmo di scheduling il quale, dato un insieme di richieste
di accesso ad una risorsa (tipicamente l'accesso al processore da parte di un processo da eseguire), stabilisce un ordinamento
@ -458,7 +499,7 @@
di scheduling, in modo da ottimizzare l'accesso a tale risorsa e consentire così l'espletamento del servizio/istruzione o processo desiderato.</p>
</div>
<div class="section card loggerSection">
<h2>Log dello scheduler</h2>
<a name="log"><h2>Log dello scheduler</h2></a>
<div class="logger">
</div>
<div class="controls">
@ -470,7 +511,7 @@
</div>
</div>
<div class="section card memory">
<h2>Memoria</h2>
<a name="memoria"><h2>Memoria</h2></a>
<table class="memTable">
<tbody>
<script>
@ -484,12 +525,13 @@
</script>
</tbody>
</table>
</div>
</div>
<div class="footer">
Creato da Claudio Maggioni, Federico Mainetti, Pamela Dardano, Fabio Brambilla
</div>
<script>
testaProcessiPronti()
avvio();
</script>
</body>
</html>

2
jquery.min.js vendored

File diff suppressed because one or more lines are too long