From Agentgroup
Jump to: navigation, search
(New page: <!-- <div style="float:right;"> {{/box-testata|News|}} {{/Evidenza}} {{/box-fondo|Leggi la voce...}} </div> --> <!-- {{Userboxtop | align = right | backgroundcolor = lightyellow...)
 
Line 16: Line 16:
 
<!-- All of the parameters are optional. -->
 
<!-- All of the parameters are optional. -->
 
<!--}}
 
<!--}}
La prima esercitazione si terrà mercoledì 8 ottobre; quindi mercoledì 1 ottobre non ci sarà lezione
+
La prima esercitazione si terrà mercoledì 8 ottobre; quindi mercoledì 1  
 +
 
 +
ottobre non ci sarà lezione
 
Le lezione dell'AA 2008/09 inizieranno lunedì 29 settembre 2008
 
Le lezione dell'AA 2008/09 inizieranno lunedì 29 settembre 2008
 
([[Wikipedia:Userboxes|Userboxes]] inserted here)
 
([[Wikipedia:Userboxes|Userboxes]] inserted here)
 
{{userboxbottom}}
 
{{userboxbottom}}
 
-->
 
-->
Questa pagina fornisce il materiale didattico e le informazioni relative all'insegnamento di '''Principi di Sistemi Operativi (9 CFU)''' per il Corso di Laurea Magistrale in '''Ingegneria Informatica'''.
+
WORKING IN PROGRESS...
  
<!--
+
Questa pagina fornisce il materiale didattico e le informazioni  
Si veda [http://{{SERVERNAME}}/didattica/lpo/ questa pagina] per informazioni su:
+
*Programmazione ad Oggetti (6 CFU - 2007/08)
+
*Linguaggi per la Programmazione ad Oggetti (6 CFU - fino al 2006/2007)
+
-->
+
  
 +
relative all'insegnamento di '''Principi di Sistemi Operativi (9
  
= News =
+
CFU)''' per il Corso di Laurea Magistrale in '''Ingegneria
==Ultime news==
+
  L'appello scritto del 15 luglio 2009 non si terr&agrave; in quanto non c'&egrave; nessun iscritto
+
  
==Vecchie news==
+
Informatica''', secondo il D.M. 270/04, attivo dall'A.A. 2009-10.
  Venerd&igrave; 12 e sabato 13 giugno 2009 il sistema ESSE3 non sar&agrave; disponibile per iscriversi agli esami e neanche per compilare il questionario di valutazione
+
Questo materiale didattico per la maggior parte deriva da quello
  Sono stati pubblicati i risultati del pre-appello scritto del 15/12/08
+
 
  Sono state pubblicate le date degli appelli della sessione straordinaria 2008/2009
+
dell'omonimo insegnamento (per&ograve; di 6 CFU) che fino all'A.A.
  Sono disponibili alcuni esercizi per l'appello scritto
+
 
  Luned&igrave; 15 dicembre 2008 si terr&agrave; un pre-appello scritto alle ore 11 in aula V a Matematica; per iscriversi contattare il docente
+
2008-09 era attivo al I anno della Laurea Specialistica, secondo il  
  I giorni 18 e 19 novembre 2008 non si svolgeranno le lezioni
+
 
  La prima esercitazione si terrà mercoledì 8 ottobre; quindi mercoledì 1 ottobre non ci sarà lezione
+
D.M. 509/99. In particolare, l'aumento di CFU da 6 a 9 deriva da aver
  Le lezione dell'AA 2008/09 inizieranno lunedì 29 settembre 2008
+
 
 +
voluto dare piena dignit&agrave; alle esercitazioni di laboratorio che
 +
 
 +
in passato erano facoltative, che ora diventano obbligatorie e parte
 +
 
 +
integrante dell'insegnamento, almeno per la parte di preparazione alla
 +
 
 +
prova scritta, che sar&agrave; appunto svolta in laboratorio.
 +
Si pu&ograve; consultare anche la
 +
 
 +
[http://{{SERVERNAME}}/didattica/psoNOD/ pagina]
 +
 
 +
dell'omonimo insegnamento non pi&ugrave; attivo, in particolare per i
 +
 
 +
testi degli esami passati e per alcune soluzioni.
 +
 
 +
= News =
 +
Le news relative a questo nuovo insegnamento si trovano al link
  
 
=Informazioni sul docente=
 
=Informazioni sul docente=
[[Image:docente.png|left|100px]]
+
<!--[[Image:docente.png|left|100px]]-->
'''[[User:Giacomo Cabri | Prof. Giacomo Cabri]]'''
+
'''[[User:Letizia Leonardi | Prof. Letizia Leonardi]]'''
  
 
Dipartimento di Ingegneria dell'Infomazione
 
Dipartimento di Ingegneria dell'Infomazione
Line 52: Line 66:
 
Università di Modena e Reggio Emilia, Via Vignolese 905 - 41100 Modena
 
Università di Modena e Reggio Emilia, Via Vignolese 905 - 41100 Modena
  
Telefono 0592056190 - Fax 0592056129
+
Telefono 0592056135 - Fax 0592056129
  
[mailto:giacomo.cabri@unimo.it giacomo.cabri@unimore.it]
+
[mailto:letizia.leonardi@unimo.it letizia.leonardi@unimore.it]
  
  
 
=Orario delle Lezioni=
 
=Orario delle Lezioni=
Le lezioni si tengono dal 29 settembre al 19 dicembre 2008 con il seguente orario:
+
Le lezioni inizieranno lunedi' 21 Settembre 2009, durante il I
*Luned&igrave; dalle 11 alle 13 in aula VI presso il dipartimento di Matematica
+
*Marted&igrave; dalle 11 alle 13 in aula VI presso il dipartimento di Matematica
+
*Mercoled&igrave; dalle 14 alle 17 nel Laboratorio Zironi presso il dipartimento di Matematica
+
  
 +
semestre.
 +
L'orario delle lezioni sar&agrave; disponibile da Settembre nella
  
=Finalità Del Corso E Consigli Utili=
+
sezione Orari e Appelli del sito della Facolt&agrave; di Ingegneria.
  
L'informatica odierna non consiste solo nel definire algoritmi e programmi che realizzano tali algoritmi, ma anche nel comporre architetture software e hardware sulla base di componenti software o hardware. Partendo da questo motivo dominante, il corso affronta i seguenti argomenti:
+
=Oviettivi del Corso E Consigli Utili=
  
* '''Programmazione ad Oggetti''': verranno illustrati i concetti generali, quali incapsulamento, ereditarietà e polimorfismo; verranno accennati i concetti di riusabilità e di composizione dei componenti software, illustrando il passaggio dalla programmazione modulare alla programmazione ad oggetti.
+
L'obiettivo del corso è di raggiungere una buona conoscenza e capacità
* '''Il linguaggio Java''': verrà utilizzato come esempio di linguaggio ad oggetti, spiegando come i concetti generali sono implementati in Java; verrà inoltre spiegato come Java può essere sfruttato per lo sviluppo di interfacce grafiche.
+
  
 +
di comprensione di ogni livello/gestore di cui si compone un Sistema
  
Per superare agevolmente l'esame si consiglia agli studenti di seguire con continuità le lezioni e le esercitazioni del corso. Inoltre, si consiglia di non focalizzare la preparazione dell'esame esclusivamente sullo studio dei libri e degli appunti, ma piuttosto di preparare l'esame sperimentando direttamente i concetti presentati a lezione sul calcolatore. Può risultare estremamente difficile superare con successo l'esame senza una conoscenza di tipo sperimentale, ottenuta con esercitazioni in laboratorio.
+
Operativo, analizzandone sia i meccanismi di funzionamento che le
  
''Ambienti di Programmazione Utilizzati'': Compilatore C, Java 1.5 di pubblico dominio (disponibili in laboratorio).
+
relative politiche. L’applicazione di queste conoscenze riguarda gli
  
 +
aspetti di programmazione di sistema per svolgere progetti concorrenti
 +
 +
in ambiente globale di complessità crescente, utilizzando il linguaggio
 +
 +
di programmazione Java. Questo corso quindi rappresenta il
 +
 +
completamento rispetto al corso di Sistemi Operativi della Laurea
 +
 +
triennale.
 +
Per tale ragione agli studenti non laureati in Ingegneria Informatica
 +
 +
presso la nostra sede si consiglia di accertarsi di avere come
 +
 +
conoscenza pregressa quella derivante dagli esami di Sistemi Operativi
 +
 +
e Laboratorio di Sistemi Operativi (della Laurea D.M. 509) o di Sistemi
 +
 +
Operativi e Lab. (della Laurea D.M. 270).
 +
 +
Per superare agevolmente l'esame scritto, che si svolger&agrave; in
 +
 +
laboratorio, si consiglia agli studenti di seguire con continuità le
 +
 +
lezioni ed, in particolare, le esercitazioni in laboratorio del corso.
 +
 +
Inoltre, si consiglia di preparare l'esame scritto sperimentando
 +
 +
direttamente i concetti presentati a lezione sul calcolatore. Può
 +
 +
risultare estremamente difficile superare con successo l'esame senza
 +
 +
una conoscenza di tipo sperimentale, ottenuta con esercitazioni in
 +
 +
laboratorio.
 +
 +
''Ambienti di Programmazione Utilizzati'': Java 1.5 di pubblico dominio
 +
 +
(disponibili in laboratorio).
  
 
=Programma Del Corso=
 
=Programma Del Corso=
'''Programmazione ad Oggetti'''
+
Gli argomenti teorici che verranno affrontati saranno:
*Concetti generali
+
*Il Linguaggio Java
+
*Classi ed ereditarietà in Java
+
*I/O in Java
+
*Interfacce grafiche in Java
+
*Programmazione basata sugli eventi
+
  
 +
1) Generalità sui Sistemi Operativi
 +
Evoluzione storica: dai primi sistemi ai moderni sistemi operativi.
 +
Classificazione dei Sistemi Operativi: sistemi mono- e multi-utente,
 +
 +
sistemi batch e interattivi, sistemi in time-sharing e real-time.
 +
Elementi di base di un Sistema Operativo: punto di vista esterno
 +
 +
(utente o programmatore di sistema) e punto di vista interno.
 +
2) Sistema Operativo come insieme di gestori delle risorse. In
 +
 +
particolare:
 +
a) Gestione della CPU
 +
Punto di vista esterno - tecniche di programmazione concorrente:
 +
 +
modelli dei processi ad ambiente globale e ad ambiente locale;
 +
 +
strumenti per la sincronizzazione di processi in ambiente globale
 +
 +
(semafori, monitor, etc.) e locale (scambio di messaggi, RPC, etc.).
 +
Punto di vista interno - implementazione del nucleo: strutture dati e
 +
 +
primitive; algoritmi di scheduling; il problema del blocco dei processi
 +
 +
(deadlock).
 +
b) Gestione della memoria
 +
Punto di vista esterno - programmi: assoluti, rilocabili staticamente,
 +
 +
rilocabili dinamicamente.
 +
Punto di vista interno - metodi di allocazione: contigua
 +
 +
(partizionamento statico e dinamico); swapping; segmentazione; non
 +
 +
contigua (paginazione); gestione della memoria virtuale.
 +
c) Gestione del File System
 +
Punto di vista esterno - organizzazione logica dei direttori e
 +
 +
proprietà dei file; livello di programmazione.
 +
Punto di vista interno - allocazione fisica in memoria secondaria:
 +
 +
metodo contiguo; metodi non contigui (concatenamento e indicizzazione).
 +
 +
Gli argomenti pratici che verranno affrontati relativamente a progetti
 +
 +
concorrenti in ambiente globale faranno riferimento al linguaggio di
 +
 +
programmazione Java e saranno in particolare:
 +
- programmazione concorrente tramite thread;
 +
- sincronizzazione mediante l'uso di monitor.
  
 
=Modalità D'Esame=
 
=Modalità D'Esame=
L'esame si compone di uno scritto e di una discussione di un programma in Java che lo studente deve presentare all'esame (e la cui proposta di progetto deve essere stata preventivamente approvata dal docente). Per maggiori dettagli, vedere il seguito di questa pagina.
+
L'esame si compone di uno scritto, in laboratorio, e di un orale. Per  
 +
 
 +
maggiori dettagli, vedere il seguito di questa pagina.
  
 
==Esame scritto==
 
==Esame scritto==
L'esame scritto serve a verificare che lo studente abbia acquisito le nozioni di astrazione, classificazione, ereditarietà e polimorfismo.
+
L'esame scritto serve a verificare che lo studente abbia acquisito le  
  
L'esame consiste nella modellazione di alcune entità e la relativa implementazione in Java.
+
seguenti capacit&agrave;:
 +
* Capacit&agrave; di scrivere soluzioni per la sincronizzazione di
  
&Egrave; possibile vedere il testo di [[Media:EserJava1.pdf|alcuni esercizi]].
+
processi in ambiente globale usando lo strumento di monitor.
 +
* Capacit&agrave; di scrivere e verificare software in linguaggio di
  
'''NOTE:'''
+
programmazione Java per la sincronizzazione di processi usando lo
#l'esame scritto &egrave; '''solo''' per l'insegnamento da 9 CFU;
+
#per l'iscrizione all'esame scritto è necessario inviare una email al docente entro 2 giorni prima dell'appello scritto stesso;
+
#&egrave; necessario aver superato lo scritto per presentare il progetto;
+
#la presentazione del progetto pu&ograve; avvenire anche in un appello diverso da quello dello scritto;
+
#la consegna di uno scritto cancella il voto precedente; la partecipazione ad uno scritto ''senza'' consegnare non cancella il voto precedente.
+
  
==Modalità di Sviluppo del Progetto Java==
+
strumento di monitor.
All'esame si deve presentare e discutere un programma realizzato in Java e che presenti le seguenti caratteristiche:
+
  
* Sia dotato di '''interfaccia grafica''' tramite cui interagire con il programma stesso.
+
Quindi, l'esame consiste nello sviluppare un progetto concorrente in
* Sfrutti i meccanismi della programmazione ad oggetti:
+
**'''incapsulamento''';
+
**'''ereditarietà''' e, se necessario, le classi astratte e le interfacce (si considerano escluse le relazioni di ereditarietà diretta da classi di libreria Java);
+
**'''polimorfismo'''.
+
* Sfrutti le classi di sistema Java per la gestione dell''''input/output''' (<tt>Reader</tt>, <tt>Writer</tt>, <tt>InputStream</tt>, <tt>OutputStream</tt>).
+
  
Il programma deve essere una applicazione Java e '''NON''' una applet.
+
ambiente globale, composto di processi e di un monitor come strumento
Il programma deve essere eseguito da '''linea di comando'''; non devono essere usate librerie proprietarie (ad es. quelle degli ambienti integrati) a meno di averlo concordato con il docente.
+
È opportuno '''provare''' il proprio programma in laboratorio prima di presentarlo in sede d'esame.
+
  
Il software deve essere accompagnato da pagine di '''documentazione''' HTML (tipicamente le pagine generate tramite Javadoc) che descrivano le scelte di progetto effettuate e la struttura del sistema software.
+
di sincronizzazione, utilizzando a livello implementativo il linguaggio
  
A progetto realizzato, si valuterà il progetto (e il voto conseguente), ferma restando la possibilità del docente (e dello studente) di richiedere l'integrazione nel progetto di ulteriori funzionalità/caratteristiche.
+
di programmazione Java.  
  
È possibile presentare progetti di gruppo (2 persone), posto che l'ampiezza del progetto sia tale da giustificare il suo sviluppo cooperativo. In tale caso, comunque, la discussione sarà esplicitamente volta a valutare, per ciascuno dei componenti del gruppo, l'effettiva padronanza d'uso dei concetti di base della programmazione ad oggetti, del linguaggio Java e delle sue librerie Java, oltre naturalmente all'apporto individuale dato al progetto globale da ogni singolo membro del gruppo.
+
&Egrave; possibile vedere il testo di tutti gli esami svolti negli anni
  
 +
passati accedendo alle pagine dell'insegnamento non pi&ugrave; attivo.
  
Problemi '''DA EVITARE''' in sede di esame:
+
==Esame orale==
*Il programma non funziona
+
L'esame orale serve a verificare che lo studente abbia acquisito le
*Manca qualcosa (di solito, la documentazione)
+
*Il progetto è diviso su più programmi (eventualmente da concordare con il docente)
+
*L’ereditarietà è usata male
+
*"Non mi ricordo perché ho fatto il programma tempo fa"
+
  
 +
seguenti conoscenze e capacit&agrave; di comprensione:
 +
* Conoscenza e capacità di comprensione della classificazione dei
 +
 +
Sistemi Operativi.
 +
* Conoscenza e capacità di comprensione dell'organizzazione interna di
 +
 +
un Sistema Operativo come insieme di livelli o gestori delle risorse.
 +
* Conoscenza e capacità di comprensione del concetto di processo, degli
 +
 +
algoritmi di scheduling e del problema del deadlock.
 +
* Conoscenza e capacità di comprensione degli strumenti di
 +
 +
sincronizzazione nel caso di modello di processi ad ambiente globale,
 +
 +
come semafori e monitor.
 +
* Conoscenza e capacità di comprensione degli strumenti di
 +
 +
sincronizzazione nel caso di modello di processi ad ambiente locale.
 +
* Conoscenza e capacità di comprensione della gestione della memoria
 +
 +
sia con politiche contigue e non contigue e sia con memoria virtuale.
 +
Conoscenza e capacità di comprensione dell'organizzazione logica dei
 +
 +
File System e delle politiche di allocazione fisica.
 +
 +
Quindi, l'esame orale spazia su tutto il programma che verr&agrave;
 +
 +
volto: si consideri, in particolare, che come case-study verr&agrave;
 +
 +
normalmente fatto riferimento al Sistema Operativo UNIX o Linux.
 +
 +
'''NOTE:'''
 +
#per l'iscrizione ad esame scritto di '''deve''' usare il form
 +
 +
specifico che sar&agrave; presente in questa pagina;
 +
#la consegna di uno scritto cancella il voto precedente; la
 +
 +
partecipazione ad uno scritto ''senza'' consegnare non cancella il voto
 +
 +
precedente;
 +
#per l'iscrizione all'esame orale è necessario invece inviare una email
 +
 +
al docente per fissare un appuntamento.
  
 
=Appelli=
 
=Appelli=
 +
<!--
 
[[Image:iscrizione.png|90px|right]]
 
[[Image:iscrizione.png|90px|right]]
La sessione è aperta. Le date degli appelli sono disponibili sul sito del corso di laurea
+
La sessione è aperta. Le date degli appelli sono disponibili sul sito  
 +
 
 +
del corso di laurea
 
all'indirizzo
 
all'indirizzo
  
 
http://informatica.scienze.unimore.it/calendario_esami.shtml
 
http://informatica.scienze.unimore.it/calendario_esami.shtml
  
Dall'AA 2006/07 viene usata la verbalizzazione elettronica; chi vuole sostenere l'esame DEVE quindi iscriversi tramite il [http://www.esse3.unimore.it sito di ESSE3].
+
Dall'AA 2006/07 viene usata la verbalizzazione elettronica; chi vuole  
  
NOTA: sul sito di ESSE3 sono presenti le date degli appelli '''orali''', per la presentazione dei progetto.
+
sostenere l'esame DEVE quindi iscriversi tramite il
Per l'iscrizione agli appelli '''scritti''' &egrave; necessario inviare una email al docente entro 2 giorni prima dell'appello scritto stesso, usando l'indirizzo email '''universitario''' e specificando '''nome''', '''cognome''' e '''matricola'''.
+
 
 +
[http://www.esse3.unimore.it sito di ESSE3].
 +
 
 +
NOTA: sul sito di ESSE3 sono presenti le date degli appelli  
 +
 
 +
'''orali''', per la presentazione dei progetto.
 +
Per l'iscrizione agli appelli '''scritti''' &egrave; necessario inviare  
 +
 
 +
una email al docente entro 2 giorni prima dell'appello scritto stesso,  
 +
 
 +
usando l'indirizzo email '''universitario''' e specificando '''nome''',  
 +
 
 +
'''cognome''' e '''matricola'''.
  
 
<br><br>
 
<br><br>
 +
-->
  
 
=Risultati=
 
=Risultati=
  
[[RisultatiPO|Risultati]] degli appelli scritti:
+
I risultati dei compiti scritti svolti in laboratorio sono pubblicati
*15 dicembre 2008
+
 
*14 gennaio 2009
+
nelle news (in forma anonima, indicando o il numero di tessera
*19 febbraio 2009
+
 
*10 giugno 2009
+
universitaria e/o la postazione assegnata durante la prova) e
*22 giugno 2009
+
 
 +
normalmente anche affissi nella bacheca di fianco alla porta del mio
 +
 
 +
ufficio.
  
 
=Testi Consigliati=
 
=Testi Consigliati=
  
'''Testo Del Corso'''
+
Materiale come lucidi, esercizi e testi di esame (e alcune soluzioni)
[[Image:textbook.png|100px|right]]
+
*G. Cabri, F. Zambonelli, "Programmazione a oggetti in Java: dai fondamenti a Internet", Pitagora editrice, 2003.
+
  
'''Altri Testi'''
+
sono disponibili in questa pagina e nella pagina del vecchio
  
* B. Eckel, "Thinking in Java", 4 edizione italiana, Pearson, (scaricabile gratuitamente da Internet la versione inglese http://www.BruceEckel.com).
+
insegnamento.
* Arnold, Gosling, Holmes, "Il linguaggio Java. Manuale ufficiale", Pearson.
+
* C.S. Horstmann, G. Cornell, "Java 2: i Fondamenti", Mc Graw Hill, The Sun Microsystems Press.
+
  
'''Per chi vuole approfondire:'''
+
Comunque, testi di riferimento possono essere:
  
* Mazzanti, Milanese, "Programmazione di applicazioni grafiche in Java", Apogeo.
+
J. Peterson, A. Silberschatz: "Operating System Concepts", Addison
* Gamma, Helm, Johnson, Vlissides, "Design Patterns", Addison-Wesley.
+
 
* J.R. Hubbard, "Strutture dati in Java", McGraw-Hill.
+
Wesley, 1990 (anche versione italiana: SILBERSCHATZ A., GALVIN P., G.
* M.A. Weiss, "Data Structures And Problem Solving Using Java", 2nd Edition, Addison Wesley.
+
 
 +
GAGNE: "Sistemi Operativi: concetti ed esempi - sesta edizione", Casa
 +
 
 +
Editrice Addison-Wesley, 2002).  
 +
 
 +
M. Milenkovic: "Sistemi Operativi", McGraw-Hill, 1990.  
 +
 
 +
P. Ancilotti, M. Boari: "Principi e Tecniche di Programmazione
 +
 
 +
Concorrente", UTET, 1988.
 +
 
 +
Inoltre, per la parte relativa a Java (ripasso e approfondimento) si
 +
 
 +
segnala:
 +
 
 +
G. Cabri, F. Zambonelli, "Programmazione a oggetti in Java: dai
 +
 
 +
fondamenti a Internet", Pitagora editrice, 2003.
  
 
<br><br>
 
<br><br>
 
=Lucidi del Corso=
 
=Lucidi del Corso=
  
[[Image:lucidi.png|100px|right]]
+
WORKING IN PROGRESS ...
Il materiale dei corsi di Programmazione ad Oggetti e Introduzione alla Programmazione ad Oggetti &egrave; contenuto nel libro "Programmazione a oggetti in Java: dai fondamenti a Internet", Pitagora editrice, 2003.
+
<!--[[Image:lucidi.png|100px|right]]
 +
Il materiale dei corsi di Programmazione ad Oggetti e Introduzione alla  
 +
 
 +
Programmazione ad Oggetti &egrave; contenuto nel libro "Programmazione  
 +
 
 +
a oggetti in Java: dai fondamenti a Internet", Pitagora editrice, 2003.
  
 
In questa pagina sono riportati alcuni lucidi non presenti nel libro.
 
In questa pagina sono riportati alcuni lucidi non presenti nel libro.
 
# [[Media:PresentazioneCorsoPO0809.pdf|Presentazione del corso]]
 
# [[Media:PresentazioneCorsoPO0809.pdf|Presentazione del corso]]
 
# [[Media:Classi.pdf|Classi di memorizzazione in C]]
 
# [[Media:Classi.pdf|Classi di memorizzazione in C]]
# [[Media:JavaClassAsInterfacce.pdf| Classi Astratte e Interfacce in Java]]
+
# [[Media:JavaClassAsInterfacce.pdf| Classi Astratte e Interfacce in  
 +
 
 +
Java]]
 
# [[Media:TabelleJTable.pdf|Tabelle con JTable]]
 
# [[Media:TabelleJTable.pdf|Tabelle con JTable]]
 
# [[Media:SeminarioJ2SE5.pdf|Novit&agrave; di Java 2 SE 5]]
 
# [[Media:SeminarioJ2SE5.pdf|Novit&agrave; di Java 2 SE 5]]
  
 
<br><br>
 
<br><br>
 +
-->
  
= Esercizi presentati a lezione =
+
= Esercizi presentati ad esercitazione =
[[Image:eserciziLezione.png|right]]
+
<!--[[Image:eserciziLezione.png|right]]
Gli esercizi sono forniti alcuni in formato pdf, visualizzabili e stampabili con il programma [http://www.adobe.com/it/ Adobe Acrobat], di pubblico domino, altri in semplice formato testo.
+
Gli esercizi sono forniti alcuni in formato pdf, visualizzabili e  
Tutti gli esercizi sono stati realizzati in collaborazione con la Prof. Letizia Leonardi.
+
 
 +
stampabili con il programma [http://www.adobe.com/it/ Adobe Acrobat],  
 +
 
 +
di pubblico domino, altri in semplice formato testo.
 +
Tutti gli esercizi sono stati realizzati in collaborazione con la Prof.  
 +
 
 +
Letizia Leonardi.
  
 
*[[Media:ContoCorrente.pdf|Conto corrente in C]]
 
*[[Media:ContoCorrente.pdf|Conto corrente in C]]
Line 202: Line 372:
  
 
===Programmazione ad Oggetti e Java===
 
===Programmazione ad Oggetti e Java===
Gli esercizi sono gli stessi contenuti nei lucidi della parte teorica, ma da qui e' possibile salvare su un file (facendo "salva link con nome") il sorgente della gran parte degli esercizi.
+
Gli esercizi sono gli stessi contenuti nei lucidi della parte teorica,  
 +
 
 +
ma da qui e' possibile salvare su un file (facendo "salva link con  
 +
 
 +
nome") il sorgente della gran parte degli esercizi.
  
 
====Java: Le Classi====
 
====Java: Le Classi====
Line 211: Line 385:
 
|rowspan=13|[[Image:download.png]]
 
|rowspan=13|[[Image:download.png]]
 
|-
 
|-
|[[Media:Counter.java|Counter.java]], [[Media:Esempio0.java|Esempio0.java]], [[Media:Esempio1.java|Esempio1.java]], [[Media:Esempio2.java|Esempio2.java]], [[Media:Esempio2bis.java|Esempio2bis.java]], [[Media:Esempio3.java|Esempio3.java]], [[Media:Esempio4.java|Esempio4.java]], [[Media:Esempio5.java|Esempio5.java]], [[Media:Esempio5bis.java|Esempio5bis.java]], [[Media:Esempio6.java|Esempio6.java]], [[Media:Esempio7.java|Esempio7.java]], [[Media:Point.java|Point.java]]
+
|[[Media:Counter.java|Counter.java]],  
 +
 
 +
[[Media:Esempio0.java|Esempio0.java]],  
 +
 
 +
[[Media:Esempio1.java|Esempio1.java]],  
 +
 
 +
[[Media:Esempio2.java|Esempio2.java]],  
 +
 
 +
[[Media:Esempio2bis.java|Esempio2bis.java]],  
 +
 
 +
[[Media:Esempio3.java|Esempio3.java]],  
 +
 
 +
[[Media:Esempio4.java|Esempio4.java]],  
 +
 
 +
[[Media:Esempio5.java|Esempio5.java]],  
 +
 
 +
[[Media:Esempio5bis.java|Esempio5bis.java]],  
 +
 
 +
[[Media:Esempio6.java|Esempio6.java]],  
 +
 
 +
[[Media:Esempio7.java|Esempio7.java]], [[Media:Point.java|Point.java]]
 
|}
 
|}
  
Line 225: Line 419:
 
|rowspan=36|[[Image:download.png]]
 
|rowspan=36|[[Image:download.png]]
 
|-
 
|-
|[[Media:CalcButton.java|CalcButton.java]], [[Media:CalcPanel.java|CalcPanel.java]], [[Media:Calculator.java|Calculator.java]], [[Media:Es10Panel.java|Es10Panel.java]], [[Media:Es11Panel.java|Es11Panel.java]], [[Media:Es12Panel.java|Es12Panel.java]], [[Media:Es13Panel.java|Es13Panel.java]], [[Media:Es14Panel.java|Es14Panel.java]], [[Media:Es15Panel.java|Es15Panel.java]], [[Media:Es16Panel.java|Es16Panel.java]], [[Media:Es7Panel.java|Es7Panel.java]], [[Media:Es8Panel.java|Es8Panel.java]], [[Media:Es9Panel.java|Es9Panel.java]], [[Media:EsSwing1.java|EsSwing1.java]], [[Media:EsSwing10.java|EsSwing10.java]], [[Media:EsSwing11.java|EsSwing11.java]], [[Media:EsSwing12.java|EsSwing12.java]], [[Media:EsSwing13.java|EsSwing13.java]], [[Media:EsSwing14.java|EsSwing14.java]], [[Media:EsSwing15.java|EsSwing15.java]], [[Media:EsSwing16.java|EsSwing16.java]], [[Media:EsSwing2.java|EsSwing2.java]], [[Media:EsSwing3.java|EsSwing3.java]], [[Media:EsSwing4.java|EsSwing4.java]], [[Media:EsSwing5.java|EsSwing5.java]], [[Media:EsSwing6.java|EsSwing6.java]], [[Media:EsSwing7.java|EsSwing7.java]], [[Media:EsSwing8.java|EsSwing8.java]], [[Media:EsSwing9.java|EsSwing9.java]], [[Media:EsSwingCalculator.java|EsSwingCalculator.java]], [[Media:FunctionPanel.java|FunctionPanel.java]], [[Media:ImgPanel.java|ImgPanel.java]], [[Media:MyFrame.java|MyFrame.java]], [[Media:MyPanel.java|MyPanel.java]], [[Media:Terminator.java|Terminator.java]]
+
|[[Media:CalcButton.java|CalcButton.java]],  
 +
 
 +
[[Media:CalcPanel.java|CalcPanel.java]],  
 +
 
 +
[[Media:Calculator.java|Calculator.java]],  
 +
 
 +
[[Media:Es10Panel.java|Es10Panel.java]],  
 +
 
 +
[[Media:Es11Panel.java|Es11Panel.java]],  
 +
 
 +
[[Media:Es12Panel.java|Es12Panel.java]],  
 +
 
 +
[[Media:Es13Panel.java|Es13Panel.java]],  
 +
 
 +
[[Media:Es14Panel.java|Es14Panel.java]],  
 +
 
 +
[[Media:Es15Panel.java|Es15Panel.java]],  
 +
 
 +
[[Media:Es16Panel.java|Es16Panel.java]],  
 +
 
 +
[[Media:Es7Panel.java|Es7Panel.java]],  
 +
 
 +
[[Media:Es8Panel.java|Es8Panel.java]],  
 +
 
 +
[[Media:Es9Panel.java|Es9Panel.java]],  
 +
 
 +
[[Media:EsSwing1.java|EsSwing1.java]],  
 +
 
 +
[[Media:EsSwing10.java|EsSwing10.java]],  
 +
 
 +
[[Media:EsSwing11.java|EsSwing11.java]],  
 +
 
 +
[[Media:EsSwing12.java|EsSwing12.java]],  
 +
 
 +
[[Media:EsSwing13.java|EsSwing13.java]],  
 +
 
 +
[[Media:EsSwing14.java|EsSwing14.java]],  
 +
 
 +
[[Media:EsSwing15.java|EsSwing15.java]],  
 +
 
 +
[[Media:EsSwing16.java|EsSwing16.java]],  
 +
 
 +
[[Media:EsSwing2.java|EsSwing2.java]],  
 +
 
 +
[[Media:EsSwing3.java|EsSwing3.java]],  
 +
 
 +
[[Media:EsSwing4.java|EsSwing4.java]],  
 +
 
 +
[[Media:EsSwing5.java|EsSwing5.java]],  
 +
 
 +
[[Media:EsSwing6.java|EsSwing6.java]],  
 +
 
 +
[[Media:EsSwing7.java|EsSwing7.java]],  
 +
 
 +
[[Media:EsSwing8.java|EsSwing8.java]],  
 +
 
 +
[[Media:EsSwing9.java|EsSwing9.java]],  
 +
 
 +
[[Media:EsSwingCalculator.java|EsSwingCalculator.java]],  
 +
 
 +
[[Media:FunctionPanel.java|FunctionPanel.java]],  
 +
 
 +
[[Media:ImgPanel.java|ImgPanel.java]],  
 +
 
 +
[[Media:MyFrame.java|MyFrame.java]],  
 +
 
 +
[[Media:MyPanel.java|MyPanel.java]],  
 +
 
 +
[[Media:Terminator.java|Terminator.java]]
 
|}
 
|}
  
Line 236: Line 498:
 
|rowspan=9|[[Image:download.png]]
 
|rowspan=9|[[Image:download.png]]
 
|-
 
|-
|[[Media:Applet1.java|Applet1.java]], [[Media:Applet2.java|Applet2.java]], [[Media:Applet2Listener.java|Applet2Listener.java]], [[Media:Applet3.java|Applet3.java]], [[Media:Applet3Listener.java|Applet3Listener.java]],  
+
|[[Media:Applet1.java|Applet1.java]],  
[[Media:Applet4.java|Applet4.java]], [[Media:Applet5.java|Applet5.java]], [[Media:Application2.java|Application2.java]]
+
 
 +
[[Media:Applet2.java|Applet2.java]],  
 +
 
 +
[[Media:Applet2Listener.java|Applet2Listener.java]],  
 +
 
 +
[[Media:Applet3.java|Applet3.java]],  
 +
 
 +
[[Media:Applet3Listener.java|Applet3Listener.java]],  
 +
[[Media:Applet4.java|Applet4.java]],  
 +
 
 +
[[Media:Applet5.java|Applet5.java]],  
 +
 
 +
[[Media:Application2.java|Application2.java]]
 
|}
 
|}
  
 
<br><br>
 
<br><br>
 +
-->
 
=Strumenti Software=
 
=Strumenti Software=
 
[[Image:strumenti.png|right]]
 
[[Image:strumenti.png|right]]
Si indicano di seguito gli strumenti software che si utilizzano durante il corso e si indica dove e' possibile reperirli.
+
Si indicano di seguito gli strumenti software che si utilizzano durante  
  
* Per sviluppare programmi in Java si utilizza il JDK (Java Development Kit). È di pubblico domino e si puo' scaricare dal sito [http://java.sun.com/ The Java Sun Site].
+
il corso e si indica dove e' possibile reperirli.
* '''NOTA:''' Si consiglia di usare la versione 1.5 o la 1.6. È comunque necessario utilizzare Java2, che corrisponde alle versioni del jdk dalla 1.2 alla 1.6.
+
* Molte riviste di informatica e libri su Java allegano il CD con Java in omaggio
+
* Come ambiente integrato (IDE) è possibile utilizzare quello che si preferisce. Quello consigliato è [http://www.eclipse.org/ Eclipse].
+
  
*È possibile, per la parte C soltanto, usare un ambiente di programmazione integrato per il C disponibile qui: [http://www.delorie.com/djgpp/ Il compilatore DJGPP]
+
* Per sviluppare programmi in Java si utilizza il JDK (Java Development
  
<br><br>
+
Kit). È di pubblico domino e si puo' scaricare dal sito
=Esercitazioni di laboratorio=
+
 
Gli esercizi di laboratorio si possono trovare nella seguente pagina: [[EserciziPO|Esercizi di Programmazione ad Oggetti]].
+
[http://java.sun.com/ The Java Sun Site].
 +
* '''NOTA:''' Si consiglia di usare la versione 1.5 o la 1.6. È
 +
 
 +
comunque necessario utilizzare Java2, che corrisponde alle versioni del
 +
 
 +
jdk dalla 1.2 alla 1.6.
 +
* Molte riviste di informatica e libri su Java allegano il CD con Java
 +
 
 +
in omaggio.
 +
* Come ambiente integrato (IDE) è possibile utilizzare quello che si  
 +
 
 +
preferisce. Quello consigliato è [http://www.eclipse.org/ Eclipse].

Revision as of 16:45, 25 July 2009

WORKING IN PROGRESS...

Questa pagina fornisce il materiale didattico e le informazioni

relative all'insegnamento di Principi di Sistemi Operativi (9

CFU) per il Corso di Laurea Magistrale in Ingegneria

Informatica, secondo il D.M. 270/04, attivo dall'A.A. 2009-10. Questo materiale didattico per la maggior parte deriva da quello

dell'omonimo insegnamento (però di 6 CFU) che fino all'A.A.

2008-09 era attivo al I anno della Laurea Specialistica, secondo il

D.M. 509/99. In particolare, l'aumento di CFU da 6 a 9 deriva da aver

voluto dare piena dignità alle esercitazioni di laboratorio che

in passato erano facoltative, che ora diventano obbligatorie e parte

integrante dell'insegnamento, almeno per la parte di preparazione alla

prova scritta, che sarà appunto svolta in laboratorio. Si può consultare anche la

pagina

dell'omonimo insegnamento non più attivo, in particolare per i

testi degli esami passati e per alcune soluzioni.

News

Le news relative a questo nuovo insegnamento si trovano al link

Informazioni sul docente

Prof. Letizia Leonardi

Dipartimento di Ingegneria dell'Infomazione

Università di Modena e Reggio Emilia, Via Vignolese 905 - 41100 Modena

Telefono 0592056135 - Fax 0592056129

letizia.leonardi@unimore.it


Orario delle Lezioni

Le lezioni inizieranno lunedi' 21 Settembre 2009, durante il I

semestre. L'orario delle lezioni sarà disponibile da Settembre nella

sezione Orari e Appelli del sito della Facoltà di Ingegneria.

Oviettivi del Corso E Consigli Utili

L'obiettivo del corso è di raggiungere una buona conoscenza e capacità

di comprensione di ogni livello/gestore di cui si compone un Sistema

Operativo, analizzandone sia i meccanismi di funzionamento che le

relative politiche. L’applicazione di queste conoscenze riguarda gli

aspetti di programmazione di sistema per svolgere progetti concorrenti

in ambiente globale di complessità crescente, utilizzando il linguaggio

di programmazione Java. Questo corso quindi rappresenta il

completamento rispetto al corso di Sistemi Operativi della Laurea

triennale. Per tale ragione agli studenti non laureati in Ingegneria Informatica

presso la nostra sede si consiglia di accertarsi di avere come

conoscenza pregressa quella derivante dagli esami di Sistemi Operativi

e Laboratorio di Sistemi Operativi (della Laurea D.M. 509) o di Sistemi

Operativi e Lab. (della Laurea D.M. 270).

Per superare agevolmente l'esame scritto, che si svolgerà in

laboratorio, si consiglia agli studenti di seguire con continuità le

lezioni ed, in particolare, le esercitazioni in laboratorio del corso.

Inoltre, si consiglia di preparare l'esame scritto sperimentando

direttamente i concetti presentati a lezione sul calcolatore. Può

risultare estremamente difficile superare con successo l'esame senza

una conoscenza di tipo sperimentale, ottenuta con esercitazioni in

laboratorio.

Ambienti di Programmazione Utilizzati: Java 1.5 di pubblico dominio

(disponibili in laboratorio).

Programma Del Corso

Gli argomenti teorici che verranno affrontati saranno:

1) Generalità sui Sistemi Operativi Evoluzione storica: dai primi sistemi ai moderni sistemi operativi. Classificazione dei Sistemi Operativi: sistemi mono- e multi-utente,

sistemi batch e interattivi, sistemi in time-sharing e real-time. Elementi di base di un Sistema Operativo: punto di vista esterno

(utente o programmatore di sistema) e punto di vista interno. 2) Sistema Operativo come insieme di gestori delle risorse. In

particolare: a) Gestione della CPU Punto di vista esterno - tecniche di programmazione concorrente:

modelli dei processi ad ambiente globale e ad ambiente locale;

strumenti per la sincronizzazione di processi in ambiente globale

(semafori, monitor, etc.) e locale (scambio di messaggi, RPC, etc.). Punto di vista interno - implementazione del nucleo: strutture dati e

primitive; algoritmi di scheduling; il problema del blocco dei processi

(deadlock). b) Gestione della memoria Punto di vista esterno - programmi: assoluti, rilocabili staticamente,

rilocabili dinamicamente. Punto di vista interno - metodi di allocazione: contigua

(partizionamento statico e dinamico); swapping; segmentazione; non

contigua (paginazione); gestione della memoria virtuale. c) Gestione del File System Punto di vista esterno - organizzazione logica dei direttori e

proprietà dei file; livello di programmazione. Punto di vista interno - allocazione fisica in memoria secondaria:

metodo contiguo; metodi non contigui (concatenamento e indicizzazione).

Gli argomenti pratici che verranno affrontati relativamente a progetti

concorrenti in ambiente globale faranno riferimento al linguaggio di

programmazione Java e saranno in particolare: - programmazione concorrente tramite thread; - sincronizzazione mediante l'uso di monitor.

Modalità D'Esame

L'esame si compone di uno scritto, in laboratorio, e di un orale. Per

maggiori dettagli, vedere il seguito di questa pagina.

Esame scritto

L'esame scritto serve a verificare che lo studente abbia acquisito le

seguenti capacità:

  • Capacità di scrivere soluzioni per la sincronizzazione di

processi in ambiente globale usando lo strumento di monitor.

  • Capacità di scrivere e verificare software in linguaggio di

programmazione Java per la sincronizzazione di processi usando lo

strumento di monitor.

Quindi, l'esame consiste nello sviluppare un progetto concorrente in

ambiente globale, composto di processi e di un monitor come strumento

di sincronizzazione, utilizzando a livello implementativo il linguaggio

di programmazione Java.

È possibile vedere il testo di tutti gli esami svolti negli anni

passati accedendo alle pagine dell'insegnamento non più attivo.

Esame orale

L'esame orale serve a verificare che lo studente abbia acquisito le

seguenti conoscenze e capacità di comprensione:

  • Conoscenza e capacità di comprensione della classificazione dei

Sistemi Operativi.

  • Conoscenza e capacità di comprensione dell'organizzazione interna di

un Sistema Operativo come insieme di livelli o gestori delle risorse.

  • Conoscenza e capacità di comprensione del concetto di processo, degli

algoritmi di scheduling e del problema del deadlock.

  • Conoscenza e capacità di comprensione degli strumenti di

sincronizzazione nel caso di modello di processi ad ambiente globale,

come semafori e monitor.

  • Conoscenza e capacità di comprensione degli strumenti di

sincronizzazione nel caso di modello di processi ad ambiente locale.

  • Conoscenza e capacità di comprensione della gestione della memoria

sia con politiche contigue e non contigue e sia con memoria virtuale. Conoscenza e capacità di comprensione dell'organizzazione logica dei

File System e delle politiche di allocazione fisica.

Quindi, l'esame orale spazia su tutto il programma che verrà

volto: si consideri, in particolare, che come case-study verrà

normalmente fatto riferimento al Sistema Operativo UNIX o Linux.

NOTE:

  1. per l'iscrizione ad esame scritto di deve usare il form

specifico che sarà presente in questa pagina;

  1. la consegna di uno scritto cancella il voto precedente; la

partecipazione ad uno scritto senza consegnare non cancella il voto

precedente;

  1. per l'iscrizione all'esame orale è necessario invece inviare una email

al docente per fissare un appuntamento.

Appelli

Risultati

I risultati dei compiti scritti svolti in laboratorio sono pubblicati

nelle news (in forma anonima, indicando o il numero di tessera

universitaria e/o la postazione assegnata durante la prova) e

normalmente anche affissi nella bacheca di fianco alla porta del mio

ufficio.

Testi Consigliati

Materiale come lucidi, esercizi e testi di esame (e alcune soluzioni)

sono disponibili in questa pagina e nella pagina del vecchio

insegnamento.

Comunque, testi di riferimento possono essere:

J. Peterson, A. Silberschatz: "Operating System Concepts", Addison

Wesley, 1990 (anche versione italiana: SILBERSCHATZ A., GALVIN P., G.

GAGNE: "Sistemi Operativi: concetti ed esempi - sesta edizione", Casa

Editrice Addison-Wesley, 2002).

M. Milenkovic: "Sistemi Operativi", McGraw-Hill, 1990.

P. Ancilotti, M. Boari: "Principi e Tecniche di Programmazione

Concorrente", UTET, 1988.

Inoltre, per la parte relativa a Java (ripasso e approfondimento) si

segnala:

G. Cabri, F. Zambonelli, "Programmazione a oggetti in Java: dai

fondamenti a Internet", Pitagora editrice, 2003.



Lucidi del Corso

WORKING IN PROGRESS ...

Esercizi presentati ad esercitazione

Strumenti Software

Strumenti.png

Si indicano di seguito gli strumenti software che si utilizzano durante

il corso e si indica dove e' possibile reperirli.

  • Per sviluppare programmi in Java si utilizza il JDK (Java Development

Kit). È di pubblico domino e si puo' scaricare dal sito

The Java Sun Site.

  • NOTA: Si consiglia di usare la versione 1.5 o la 1.6. È

comunque necessario utilizzare Java2, che corrisponde alle versioni del

jdk dalla 1.2 alla 1.6.

  • Molte riviste di informatica e libri su Java allegano il CD con Java

in omaggio.

  • Come ambiente integrato (IDE) è possibile utilizzare quello che si

preferisce. Quello consigliato è Eclipse.