Il corso ha lo scopo di consentire agli studenti di conoscere il ruolo, l’obiettivo e le principali funzionalità e caratteristiche dei sistemi operativi, rendendoli capaci di comprendere e sviluppare elementari funzioni di software utilizzabili nell’ambito del sistema operativo. Al termine del corso, lo studente sarà in grado di: 1. Conoscere l’evoluzione storica dei sistemi operativi, avendo la capacità di capire quali motivazioni e necessità abbiano guidato tale evoluzione. 2. Conoscere le funzionalità principali dei sistemi operativi, avendo la capacità di riconoscere, tra le possibili realizzazioni di una data funzionalità, quale si adatti meglio ad un dato contesto applicativo di interesse. 3. Conoscere i principi dell’ambiente a processi e della concorrenza, avendo la capacità di capire in profondità e in dettaglio la loro realizzazione. 4. Conoscere le problematiche di sincronizzazione tra processi, avendo la capacità di sviluppare codice in cui tali problematiche devono essere affrontate. Tale capacità verrà affinata nel corso delle esercitazioni. 5. Comprendere i principi dell’organizzazione del programma in thread, avendo la capacità di sviluppare software organizzato in thread concorrenti. Tale capacità verrà affinata nel corso delle esercitazioni. Lo studente dovrà inoltre sviluppare una consapevole autonomia di giudizio con riferimento al riconoscimento delle problematiche tipiche dell’organizzazione del codice in processi o thread e alla scelta di tecniche da impiegare per ottenere dal sistema il comportamento corretto. Lo studente svilupperà infine la conoscenza della terminologia specifica (talvolta standard) usata nell'ambito dei sistemi operativi.
Prerequisiti
È richiesta la capacità di programmare in un linguaggio imperativo di alto livello: lo studente deve padroneggiare i principali costrutti dei linguaggi di programmazione di alto livello e avere perfettamente chiari i concetti di compilatore, interprete, errore statico ed errore a tempo di esecuzione. Inoltre, è richiesta la conoscenza dei principali elementi dell'hardware, in particolare il ruolo di CPU, RAM, Unità di Controllo e ALU; lo studente deve conoscere il concetto di instruction set ed essere in grado di scrivere semplici programmi in assembly, anche con impiego di procedure ricorsive. Le conoscenze e abilità necessarie per un proficuo apprendimento di questo insegnamento sono impartite nei corsi fondamentali del primo anno di Programmazione e Architettura degli Elaboratori, che dunque costituiscono propedeuticità obbligatoria.
Metodi didattici
48 ore su 72 saranno dedicate all'insegnamento e 24 agli esercizi. Le lezioni vengono tenute dal docente e svolte con l’ausilio di slide che vengono messe a disposizioni degli studenti sul sito e-learning. Gli esercizi saranno proposti dal docente, e risolti interattivamente mediante cooperazione tra studenti e tra studenti e docente.
Verifica Apprendimento
Esame finale. Si tratta di un prova scritta. Gli studenti dovranno risolvere esercizi, che richiedono una conoscenza profonda degli argomenti presentati durante le lezioni. In particolare, gli esercizi hanno l'obiettivo di testare che lo studente conosca le funzionalità dei sistemi operativi e sia in grado di realizzare semplici funzionalità. L'esame richiede di norma due ore. Gli esercizi devono essere risolti senza l'aiuto di slide o altro tipo di materiale.
Contenuti
- Ruolo ed obiettivi del sistema operativo - Funzionalità tipiche del sistema operativo - Evoluzione dell’hardware e dei sistemi operativi - Organizzazione della macchina - Interrupt ed implementazione - Modalità user/kernel e transizioni - Ruolo dell’interrupt - Processi - Scheduling con e senza preemption - Process Control Block - Context switch - Threads - MMU - Memory layout dei programmi - Paginazione e memoria virtuale - Esercizi su sincronizzazione