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:
parent
258d9c2cf0
commit
6977953f7a
2 changed files with 62 additions and 20 deletions
78
index.html
78
index.html
|
@ -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,6 +111,7 @@
|
|||
var processiPronti = new Array();
|
||||
var processiTerminati = new Array();
|
||||
function allocaSegmento(proc){
|
||||
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 avvio(){
|
||||
document.getElementsByName("wiki")[0].href=wikiScheduler;
|
||||
for(var i=0; i<100; i++){
|
||||
risorse.mem[i]= new Memoria();
|
||||
}
|
||||
function testaProcessiPronti(){
|
||||
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>
|
||||
|
@ -485,11 +526,12 @@
|
|||
</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
2
jquery.min.js
vendored
File diff suppressed because one or more lines are too long
Reference in a new issue