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
80
index.html
80
index.html
|
@ -2,6 +2,7 @@
|
||||||
<html lang="it">
|
<html lang="it">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
<title>Scheduler</title>
|
||||||
<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="jquery.min.js"></script>
|
<script src="jquery.min.js"></script>
|
||||||
|
@ -19,10 +20,7 @@
|
||||||
this.istanteAllocazione = 0;
|
this.istanteAllocazione = 0;
|
||||||
this.numeroPagina = -1;
|
this.numeroPagina = -1;
|
||||||
}
|
}
|
||||||
//avvio del programma
|
|
||||||
for(var i=0; i<100; i++){
|
|
||||||
risorse.mem[i]= new Memoria();
|
|
||||||
}
|
|
||||||
var pidNuovo = 1;
|
var pidNuovo = 1;
|
||||||
function Processo(){
|
function Processo(){
|
||||||
processiPronti.push(this);
|
processiPronti.push(this);
|
||||||
|
@ -105,7 +103,7 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
allocaSegmento(this);
|
if(allocaSegmento(this)==="DEALLOC") return true;
|
||||||
this.stato="pronto";
|
this.stato="pronto";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +111,8 @@
|
||||||
var processiPronti = new Array();
|
var processiPronti = new Array();
|
||||||
var processiTerminati = new Array();
|
var processiTerminati = new Array();
|
||||||
function allocaSegmento(proc){
|
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++){
|
for(var i=0; i<100; i++){
|
||||||
if(risorse.mem[i].pid==0) break;
|
if(risorse.mem[i].pid==0) break;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +120,7 @@
|
||||||
//allocazione fallita
|
//allocazione fallita
|
||||||
proc.log("<span style=\"color: orange\">Allocazione fallita. Gestione della memoria piena...</span>");
|
proc.log("<span style=\"color: orange\">Allocazione fallita. Gestione della memoria piena...</span>");
|
||||||
//si applica least recently used
|
//si applica least recently used
|
||||||
var min=0;
|
min=0;
|
||||||
for(i=1; i<100; i++){
|
for(i=1; i<100; i++){
|
||||||
if(risorse.mem[min].istanteAllocazione > risorse.mem[i].istanteAllocazione)
|
if(risorse.mem[min].istanteAllocazione > risorse.mem[i].istanteAllocazione)
|
||||||
min = i;
|
min = i;
|
||||||
|
@ -130,7 +129,8 @@
|
||||||
proc.log("<span style=\"color: red\">gestione della memoria piena fallita.</span>");
|
proc.log("<span style=\"color: red\">gestione della memoria piena fallita.</span>");
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
i=min;
|
aggiornaMemoria(min, "#FF6666");
|
||||||
|
return "DEALLOC";
|
||||||
}
|
}
|
||||||
risorse.mem[i].pid=proc.pid;
|
risorse.mem[i].pid=proc.pid;
|
||||||
risorse.mem[i].numeroPagina=proc.percorsoAllocazione[proc.contatorePercorso];
|
risorse.mem[i].numeroPagina=proc.percorsoAllocazione[proc.contatorePercorso];
|
||||||
|
@ -195,16 +195,29 @@
|
||||||
scriviLog("<span style=\"color: white\">Coda dei processi pronti vuota.<span>");
|
scriviLog("<span style=\"color: white\">Coda dei processi pronti vuota.<span>");
|
||||||
vuoto=true;
|
vuoto=true;
|
||||||
}
|
}
|
||||||
if(interrompi) return;
|
if(interrompi){
|
||||||
|
if(interrompi===true){
|
||||||
|
scriviLog("<span style=\"color: white\">In pausa.</span>");
|
||||||
|
interrompi=2;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
window.setTimeout(function(){
|
window.setTimeout(function(){
|
||||||
loopProcessiPronti();
|
loopProcessiPronti();
|
||||||
},lunghezzaExec);
|
},lunghezzaExec);
|
||||||
}
|
}
|
||||||
function toggleProcessiPronti(){
|
function toggleProcessiPronti(){
|
||||||
interrompi= !interrompi;
|
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++){
|
for(var j=0; j<10; j++){
|
||||||
new Processo();
|
new Processo();
|
||||||
}
|
}
|
||||||
|
@ -232,6 +245,31 @@
|
||||||
function trovaProcessoPronto(pid){
|
function trovaProcessoPronto(pid){
|
||||||
return $.grep(processiPronti, function(e){ return e.pid == 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>
|
</script>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
body{
|
body{
|
||||||
|
@ -291,6 +329,7 @@
|
||||||
background: #cccccc;
|
background: #cccccc;
|
||||||
float: left;
|
float: left;
|
||||||
font-weight: lighter;
|
font-weight: lighter;
|
||||||
|
position: fixed;
|
||||||
}
|
}
|
||||||
.nav > p, .section.teoria > p{
|
.nav > p, .section.teoria > p{
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -420,6 +459,7 @@
|
||||||
width: calc(100vw - 3rem);
|
width: calc(100vw - 3rem);
|
||||||
margin-bottom: .5rem;
|
margin-bottom: .5rem;
|
||||||
float: none;
|
float: none;
|
||||||
|
position: static;
|
||||||
}
|
}
|
||||||
.sections{
|
.sections{
|
||||||
float: none;
|
float: none;
|
||||||
|
@ -439,18 +479,19 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body onkeypress="comandiDaTastiera(event)">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<h1>Scheduler</h1>
|
<h1>Scheduler</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav card">
|
<div class="nav card">
|
||||||
<p><a href="javascript:void(0)">HOME</a></p>
|
<p><a href="#teoria">TEORIA</a></p>
|
||||||
<p><a href="javascript:void(0)">GRAFICO</a></p>
|
<p><a href="#log">LOG</a></p>
|
||||||
<p><a href="javascript:void(0)">TEORIA</a></p>
|
<p><a href="#memoria">MEMORIA</a></p>
|
||||||
|
<p><a name="wiki">WIKI</a></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="sections">
|
<div class="sections">
|
||||||
<div class="section card teoria">
|
<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
|
<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 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
|
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>
|
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>
|
||||||
<div class="section card loggerSection">
|
<div class="section card loggerSection">
|
||||||
<h2>Log dello scheduler</h2>
|
<a name="log"><h2>Log dello scheduler</h2></a>
|
||||||
<div class="logger">
|
<div class="logger">
|
||||||
</div>
|
</div>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
@ -470,7 +511,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section card memory">
|
<div class="section card memory">
|
||||||
<h2>Memoria</h2>
|
<a name="memoria"><h2>Memoria</h2></a>
|
||||||
<table class="memTable">
|
<table class="memTable">
|
||||||
<tbody>
|
<tbody>
|
||||||
<script>
|
<script>
|
||||||
|
@ -484,12 +525,13 @@
|
||||||
</script>
|
</script>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
Creato da Claudio Maggioni, Federico Mainetti, Pamela Dardano, Fabio Brambilla
|
Creato da Claudio Maggioni, Federico Mainetti, Pamela Dardano, Fabio Brambilla
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
testaProcessiPronti()
|
avvio();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</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