A.A. 2019-20
Docente Teoria: Danilo Bruschi
Docenti Laboratorio: Mattia Monga
Risultati
della prova scritta di SISOP svolta in data 14 Settembre 2020
Il sito web relativo alla parte di teoria del corso è stato trasferito
QUI.
Gli studenti
che non riescono ad accedere al sito nuovo sono pregati di rivolgersi
alla segreteria didattica.
Programma del Corso A.A. 18/19
OBIETTIVI DEL CORSO
Il corso consentirà allo studente di comprendere i principali concetti
su cui è basata la realizzazione di un sistema operativo, le sue funzionalità
principali nonchè acquisire padronanza nell'uso delle
principali API del sistema operativo Linux.
Al fine di fornire agli studenti una migliore comprensione dei diversi temi
affrontati
verrà affrontato lo studio delle componenti principali di un sistema operativo didattico:
il sistema operativo JOS.
L'ispezione del codice sorgente di JOS permetterà
agli studenti di apprendere come sono implementate su architetture reali
le principali funzionalità di un sistema operativo e le
relazioni che intercorrono tra i vari componenti del sistema operativo.
In laboratorio gli studenti saranno messi in grado di modificare
il codice sorgente del kernel di JOS modificando o aggiungendo
alcune funzionalità. In tal modo potranno anche imparare le nozioni
di base della programmazione di sistema.
PROVE D'ESAME
Modalità d'esame e votazione
L'esame è costituito da tre prove: scritta, orale e pratica.
Le prove scritta e orale verteranno sul programma del corso svolto
durante le lezioni di teoria.
La prova scritta è costituita da:
- 20 domande a risposta multipla;
- svolgimento di un esercizio di programmazione con l'uso della libreria Pthread o
con l'uso delle API Unix viste a lezione;
- svolgimento di un esercizio di programmazione consistente nella modifica o stesura delle
procedure del sistema operativo JOS viste a lezione.
Il superamento della prova scritta è requisito necessario per l'accesso alla prova orale.
Durante la prova scritta lo studente potrà accumulare sino a 3 punti
che saranno poi sommati al voto finale della prova orale.
Le prove scritta e orale devono essere sostenute nello stesso appello
mentre la prova di laboratorio può essere sostenuta in appelli diversi purché
entro la fine dell'anno accademico in corso.
Il voto finale dell'esame sarà formato sommando ai 2/3 del voto ottenuto nelle
prove di teoria, 1/3 del voto ottenuto nelle prove di laboratorio.
Calendario annuale delle prove scritte A.A. 2017/2018
Si ricorda che per registrare il voto è necessario
iscriversi all'appello tramite SIFA,
La prova orale è solitamente svolta dopo
qualche giorno rispetto alla prova scritta. Si ricorda agli studenti che
per potersi iscrivere all'esame è necessario aver preventivamente
compilato
il questionario di valutazione del corso.
- 17/06/2019 (Prova Scritta)
- 10/07/2019 (Prova scritta)
- 16/09/2019 (Prova Scritta)
- 17/01/2020 (Prova Scritta)
- 12/2/2020 (Prova Scritta)
Le prove superate durante un anno accademico sono valide solo per
quell'anno accademico (giugno 20XX-febbraio 20XX+1).
Gli esami vanno verbalizzati entro l'appello in cui si completa il
superamento delle due prove, e comunque non oltre l'ultimo appello
dell'anno accademico, pena l'annullamento del voto con conseguente
ripetizione di entrambe le prove.
ORARI
Lezioni
- Teoria (edizione unica): martedì dalle 8:30 alle 11:30 in aula G209
e venerdì dalle 8:30 alle 11:30,
in aula Magna, Via Celoria 18
- Laboratorio (due turni):
mercoledì orario 8:30-12:30 .
Ricevimento docenti
- Danilo Bruschi: su appuntamento, via email (danilo.bruschi_at_unimi.it)
- Mattia Monga: su appuntamento, via email
(monga_at_di.unimi.it)
Email ricevute da indirizzi non istituzionali (di ateneo o del
SILAB) o non firmate saranno ignorate.
PARTE I: Concetti Generali
- Introduzione ai sistemi operativi: principi, struttura ed evoluzione storica
- CPU Virtualization
- Processi: concetti e implementazione
- API per la gestione dei processi
- Tecniche per lo scheduling dei processi
- Memory Virtualization
- Address Space
- La trasformazione defli indirizzi
- API per la gestione della memoria
- Il memory manager
- Segmentazione
- Paginazione, Segmentazione Paginata
- Gestione dello swap space
- Introduzione alla programmazione concorrente
- I thread: concetti e implementazione
- API per la gestione dei thread
- Soluzioni al problema della mutua esclusione
- Lock
- Variabili condizione
- Semafori
- Deadlock: il problema e le soluzioni
- I/O
- Dispositivi di I/O: principi di funzionamento
- Hard Disk
- RAID
- Il File system
- Files & Directory
- FSCK e Journaling
- SSD
PARTE II: Aspetti implementativi
- Introduzione all'architettura IA-32
- GNU ASSEMBLER LANGUAGE
- Eccezioni e Interrupt in IA-32
- Analisi e implementazione di un programma elementare di bootstrap e di un bootloader
- Analisi e implementazione di un gestore delle Eccezioni
- Analisi e implementazione di un gestore degli Interrupt
- Analisi e implementazione di un gestore della Memoria
- Analisi e implementazione di un gestore dei processi
- Analisi e implementazione di un gestore di syscall
MATERIALE DIDATTICO
L'esposizione degli argomenti durante le lezioni frontali seguirà
fedelmente l'impostazione del libro di testo che gli studenti sono invitati ad usare
in modo intensivo. Riportiamo qui sotto i diversi argomenti che sono via via trattati
a lezione e che potranno essere oggetto delle prove d'esame.
Il materiale del laboratorio è sul Wiki.
A.A. 2018/2019
- 26-02: Lezione 1: Introduzione ai
sistemi operativi. Cap. 1 e 2 del libro di testo
- 01-03: Lezione 2: evoluzione storica dei sistemi operativi,
la nozione di processo e sua implementazione
Cap. 4 del libro di testo
- 05-03: Lezione 3: CPU virtualization, context switch and syscall,
Cap. 6 del libro di testo
- 08-03: Vacanza per il Carnevale Ambrosiano
- 12-03: Lezione 4: API per la gestione dei processi
Cap. 5 del libro di testo
- 15-03 Lezione 5: CPU Virtualization: Scheduling policies -
Cap. 6, 7, 8 del libro di testo
- 19-03: Lezione 6: Syscall and Context switch measurements -
Address Spaces,
Cap. 8 Esercizio di pag 62, Cap. 13 del libro di testo
- 22-03: Lezione 7: Memory Virtualization: Address spaces, Address translation -
Cap. 12, 13, 15 del libro di testo
- 26-03: Lezione 8: Memory Virtualization: Segmentation, Paging, TLB
Cap. 16, 18, 19 del libro di testo
- 29-03: Lezione 9: Memory Virtualization: Advanced Page Tables Cap. 20 del libro di testo
- 02-04: Lezione 10: Memory Virtualization: Swapping mechanisms
Cap. 21 del libro di testo
- 05-04: Lezione 11: Memory Virtualization: Swapping Policies & Memoery API Cap. 22, 14
del libro di testo
- 09-04 Lezione 12: Concurrency: Introduction, Pthreads API, Locks -
Cap. 25, 26, 27, 28
del libro di testo
- 12-04 Lezione 13: Algoritmo di Peterson, lock implementations,
Condition Variables, Semafori - Cap. 30,
31 del libro di testo
- 16-04 Lezione 14: Mutua esclusione e Sincronizzazione con i semafori, il
Problema Produttore/Consumatore - Il problema dei 5 filosofi - deadlock Cap. 31, 32 del libro di testo
- 19-04 Vacanze Pasquali
- 23-04 Vacanze Pasquali
- 26-04 Vacanze Pasquali
- 30-04 Lezione 15: Persistence: I/O Devices - Cap. 36 del libro di testo
- 03-05 Lezione 16: Persistence: Hard disk drives - Cap. 37 del libro di testo
- 07-05 Lezione 17: Persistence: RAID & File and directories - Cap. 38, 39 del libro di testo
- 10-05 Lezione 18: Persistence: File system implementation - Cap. 40 del libro di testo
- 14-05 Lezione 19: Persistence: Crash Consistency Cap. 42 del libro di testo
- 17-05 Lezione 20:
Introduzione all'architettura IA-32
- 21-05 Lezione 21:
Il Bootloader di JOS (I parte)
- 24-05 Lezione 22: Il Bootloader di JOS (II parte)
- 04-06 Lezione 23: La memoria virtuale in JOS (I parte)
- 07-06 Lezione 24: La memoria virtuale in JOS (II parte)
- 11-06 Lezione 25: Eccezioni, Interrupt, Processi e Syscall
27-02: Lezione 1: introduzione ai
sistemi operativi. Cap. 1 e 2 del libro di testo
02-03: Lezione 2: evoluzione storica dei sistemi operativi,
la nozione di processo
Cap. 2
06-03: Lezione 3:
la nozione di processo e relative API-linux di riferimento.
Cap. 3, 4 del libro di testo
09-03: Lezione 4: CPU virtualization: context switch e syscall.
Cap. 5 del libro di testo
13-03: Lezione 5: CPU Virtualization: Scheduling policies -
Cap. 6, 7 del libro di testo
16-03: Lezione 6: CPU Virtualization: Multilevel Feedback scheduler -
Cap. 8, Esercizio di pag 62 del libro di testo
20-03: Lezione 7: Memory Virtualization: Address spaces, API, Address translation -
Cap. 12, 13, 14, 15 del libro di testo
23-03: Lezione 8: Memory Virtualization: Segementation -
Cap. 16 del libro di testo
27-03: Lezione 9: Memory Virtualization: paging / TLB - Cap. 18 & 19 del libro di testo
30-03: Vacanze Pasquali
03-04: Vacanze Pasquali
06-04: Lezione 10 Memory Virtualization: Advanced Page Tables
Cap. 20 del libro di testo
10-04: Lezione 11: Memory Virtualization: Swapping Mechanisms and Policies Cap. 21 & 22
del libro di testo
13-04 Lezione 12: Concurrency: Introduction, Pthreads API, Locks -
Cap. 25, 26, 27, 28
del libro di testo
17-04 Lezione 13: Algoritmo di Peterson, lock implementations,
Condition Variables, Semafori - Cap. 30,
31 del libro di testo
20-04 Lezione 14: Mutua esclusione e Sincronizzazione con i semafori, il
Problema Produttore/Consumatore - Cap. 31 del libro di testo
24-04 Lezione 15: Il problema dei cinque filosofi, gli errori della programmazione concorrente,
L'algoritmo del banchiere - Cap. 32 del libro di testo
27-04 Lezione 16: Persistence: I/O Devices - Cap. 36 del libro di testo
04-05 Lezione 17: COMPITINO
08-05 Lezione 18: Peristence: Hard disks, RAID - Cap. 37, 38 del libro di testo
11-05 Lezione 19: Persistence: File and directories - Cap. 39 del libro di testo
15-05 Lezione 20: Persistence: File system implementation - Cap. 40 del libro di testo
18-05 Lezione 21: Persistence: Crash Consistency Cap. 42 del libro di testo,
Introduzione all'architettura IA-32
22-05 Lezione 22: Il Bootloader di JOS (I parte)
25-05 Lezione 23: Il Bootloader di JOS (II parte)
29-05 Lezione 24: La memoria virtuale in JOS (I parte)
01-06 Lezione 25: La memoria virtuale in JOS (II parte)
05-06 Lezione 26: Eccezioni, Interrupt, Processi
e Syscall
08-06 Lezione 27: Eccezioni, interrupt, processi e syscall (II parte)
Lo studente dovrà inoltre essere in grado di spiegare, durante la prova
orale e previa lettura,
il codice del sistema operativo JOS contenuto nei seguenti file sorgente:
HOMEWORKS
Durante lo svolgimento delle lezioni per facilitare l'apprendimento di
alcuni argomenti sarà introdotto l'uso dei
simulatori reperibili a questo indirizzo .
Gli esercizi proposti da questi simulatori
potranno anche essere oggetto di domande durante le prove d'esame.
- scheduler.py
- relocation.py
- segmentation.py
- paging-linear-translate.py
- paging-multilevel-translate.py
- disk.py
- vsfs.py
- Testo Esame e binario
LIBRO DI TESTO
Operating Systems: Three Easy Pieces
di Remzi H. Arpaci-Dusseau e Andrea C. Arpaci-Dusseau
Dispensa sul sistema operativo JOS
È disponibile, in versione beta, una dispensa inerente alcune
componenti del sistema operativo JOS: bootstrap, bootloader, memory manager e virtual memory.
Si tratta di materiale in versione preliminare, che quindi potrebbe ancora contenere errori.
In questo caso si invitano gli studenti a riportare gli stessi al docente.
Materiale da Consultare per la seconda parte del corso
Programmer's Reference Manual Intel 386
xv6: a simple Unix-like teaching
operating system
xv6 source code
Le seguenti dispense relative ai Lab. 1,2,3.
Materiale Integrativo
Il presente materiale può essere utilizzato ad integrazione
del materiale presentato a lezione
Materiale di laboratorio
Il materiale del laboratorio è sul Wiki.
Stima del materiale da studiare in preparazione dell'esame
Riportiamo qui di seguito il materiale che
lo studente deve studiare per prepararsi alla prova d'esame del corso di SISTEMI OPERATIVI I e II .
Argomenti non trattati durante le
lezioni ma contenuti nel materiale sottoindicato
potranno comunque essere oggetto
di verifiche durante le prove d'esame (Scritto e/o orale).
Le numerazioni di capitoli e paragrafi fanno
riferimento al libro di testo adottato.
- Slide presentate a lezione
- Capitolo 1 del libro di testo : tutto
- Capitolo 2 del libro di testo: paragrafi 2.1, 2.2, 2.3.1-2.3.4, 2.4
- Capitolo 3 del libro di testo: tutto
- Capitolo 4 del libro di testo: paragrafi 4.1, 4.2, 4.3, 4.4
- Capitolo 5 del libro di testo: paragrafi 5.1, 5.2, 5.3, 5.4
- Capitolo 6 del libro di testo: tutto
- Capitoli: 2, 4, 5, 7.1, 7.2, 7.3, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 10
del seguente testo (Manuale Intel 386)
- Dispensa sul sistema operativo JOS
- Le seguenti dispense relative ai Lab. 1,2,3
di JOS
Inoltre lo studente dovrà essere in grado di spiegare, durante la prova orale e previa lettura,
il codice del sistema operativo JOS contenuto nei seguenti file sorgente:
hhmts start
Last modified:
hhmts end