Università degli Studi Guglielmo Marconi

Insegnamento
Calcolatori e sistemi operativi
Docente
Prof. Simonetta Alessandro
Settore Scientifico Disciplinare
ING-INF/05
CFU
12
Descrizione dell'insegnamento
L’insegnamento ha l’obiettivo di far comprendere in modo approfondito l’organizzazione ed il funzionamento delle architetture di calcolatori ponendo una particolare enfasi riguardo al livello del sistema operativo. Inizialmente viene introdotta l’evoluzione delle architetture di calcolatori, anche dal punto di vista degli ambienti operativi, per poi entrare all’interno della struttura dei moderni calcolatori elettronici. Il modello di riferimento adottato propone l’organizzazione a strati sovrapposti partendo dal livello fisico fino a giungere ai livelli più astratti dei linguaggi orientati alle applicazioni. Saranno quindi argomenti del corso il livello logico-digitale con l’introduzione dell’algebra di Boole, i livelli di micro e macro architettura (Instruction Set Architecture), il livello del linguaggio assemblativo, il sistema operativo e le architetture per il calcolo parallelo. Verranno, inoltre, proposti alcuni casi di studio con particolare riferimento alle architetture emergenti (intel core i7, ARM, ...). Durante l’analisi del livello del sistema operativo saranno fornite competenze specifiche sulla struttura interna di un sistema operativo moderno, con particolare riferimento al sistema Unix e MS Windows. Verranno trattate le principali forme di astrazione fornite dai sistemi operativi, la gestione dei processi e dei thread, la gestione della memoria, la gestione del file system, la gestione dell’input/output, il trattamento del deadlock e i sistemi operativi per ambienti a più processori. Questo ultimo argomento verrà trattato in stretta correlazione con le architetture parallele studiate nella parte relativa ai calcolatori elettronici. A livello pratico, il corso offrirà nozioni di programmazione concorrente congiuntamente a nozioni di base sull'utilizzo del sistema Unix e MS Windows.
Obiettivi formativi (espressi come risultati di apprendimento attesi)
Al termine di questo corso, gli studenti saranno in grado:
  • comprendere la struttura e le funzioni chiave delle architetture di calcolatori;
  • comprendere i principi di funzionamento e le tecniche di progettazione dei moderni sistemi operativi;
  • risolvere problemi di logica con l’utilizzo dell’algebra di Boole;
  • risolvere esercizi di elettronica digitale: circuiti combinatori e sequenziali;
  • risolvere esercizi sul funzionamento interno del sistema operativo (processi e thread, memoria, file system, I/O e deadlock);
  • sviluppare sistemi elettronici di interfacciamento interno al calcolatore;
  • sviluppare algoritmi di risoluzione di problematiche inerenti il sistema operativo;
  • sviluppare programmi in linguaggio C per la gestione delle risorse in Unix utilizzando le primitive offerte dal sistema operativo;
  • acquisire un linguaggio appropriato sui sistemi operativi e sulle architetture di calcolatore;
  • valutare in autonomia i vantaggi e gli svantaggi dei vari sistemi operativi presenti sul mercato.
Prerequisiti

Non sono richiesti requisiti specifici.

Contenuti dell'insegnamento
L01 - INTRODUZIONE SULLE ARCHITETTURE (Cap 1 – Architettura dei calcolatori)
o Dominio digitale e analogico
o Linguaggi, livelli e macchine virtuali
o Evoluzione delle architetture di computer
o Approccio strutturale
o Pietre miliari nell’architettura dei computer
o Tipologie di computer
o Unità metriche

L02 - PROCESSORI E MEMORIA PRINCIPALE (Cap 2 – Architettura dei calcolatori)
o PROCESSORI
o MEMORIA PRINCIPALE
 
L03 - MEMORIA SECONDARIA e DISPOSITIVI DI INPUT/OUTPUT (Cap 2 – Architettura dei calcolatori)
o MEMORIA SECONDARIA
o DISPOSITIVI DI INPUT/OUTPUT

• L04 - LIVELLO LOGICO DIGITALE 1/3 (Cap 3 – Architettura dei calcolatori)
o Algebra di Boole
o Trasformazioni nel dominio di Boole
o Circuiti logici digitali elementari
o circuiti Integrati
o circuiti combinatori
o Clock

L05 - LIVELLO LOGICO DIGITALE 2/3 (Cap 3 – Architettura dei calcolatori)
o MEMORIA
o Chip di CPU
o BUS

L06 - LIVELLO LOGICO DIGITALE 3/3 (Cap 3 – Architettura dei calcolatori)
o ESEMPI DI CPU
o ESEMPI DI BUS
o INTERFACCE

• L07 - IL LIVELLO DI MICROARCHITETTURA e MACROARCHITETTURA 1/2 (Cap 4 e 5 – Architettura dei calcolatori)
o IL LIVELLO DI MICROARCHITETTURA
- Un esempio di microarchitettura
- Esempio di ISA: IJVM
o IL LIVELLO DI MACROARCHITETTURA
- Overview del livello ISA
- Tipi di dati

• L08 - IL LIVELLO DI MACROARCHITETTURA 2/2 e IL LIVELLO DEL LINGUAGGIO ASSEMBLATIVO (Cap 5 e 7 – Architettura dei calcolatori)
o IL LIVELLO DI MICROARCHITETTURA
- Formati di istruzioni
- Modalità di indirizzamento
- Tipi di istruzioni
- Controllo del flusso
- Architetture Intel IA-32 e IA64
o IL LIVELLO DEL LINGUAGGIO ASSEMBLATIVO
- Introduzione al linguaggio assemblativo
- Le macroistruzioni
- Il processo di assemblaggio
- Linker e loader

• L09 - INTRODUZIONE AI SISTEMI OPERATIVI (Cap 1 – I moderni sistemi operativi)
o Che cos’è un sistema operativo?
o Storia dei sistemi operativi
o Panoramica dei SO
o Concetti di base dei SO
o Le chiamate di sistema
o Struttura di un sistema operativo
o Introduzione al linguaggio C

• L10 - PROCESSI E THREAD 1/2 (Cap 2 – I moderni sistemi operativi)
o PROCESSI
o THREAD
o COMUNICAZIONI TRA PROCESSI
 
• L11 - PROCESSI E THREAD 2/2 (Cap 2 – I moderni sistemi operativi)
o COMUNICAZIONI TRA PROCESSI
o SCHEDULING
o Classici problemi di IPC

L12 – GESTIONE DELLA MEMORIA 1/3 (Cap 3 – I moderni sistemi operativi)
o NESSUNA ASTRAZIONE DI MEMORIA.
o LO SPAZIO DI INDIRIZAMENTO
o MEMORIA VIRTUALE

• L13 – GESTIONE DELLA MEMORIA 2/3 (Cap 3 – I moderni sistemi operativi)
o ALGORITMI DI SOSTITUZIONE DELLE PAGINE
o PROBLEMATICHE DI PROGETTAZIONE DEI SISTEMI DI PAGING

L14 – GESTIONE DELLA MEMORIA 3/3 (Cap 3 – I moderni sistemi operativi)
o PROBLEMATICHE DI PROGETTAZIONE DEI SISTEMI DI PAGING
o ASPETTI REALIZZATIVI
o SEGMENTAZIONE

L15 – FILE SYSTEM 1/2 (Cap 4 – I moderni sistemi operativi)
o FILE
o DIRECTORY
o REALIZZAZIONE DEL FILE SYSTEM

L16 – FILE SYSTEM 2/2 e INPUT/OUTPUT 1/2 (Cap 4 e 5 – I moderni sistemi operativi)
o REALIZZAZIONE DEL FILE SYSTEM
o INPUT/OUTPUT
- PRINCIPI HARDWARE
- PRINCIPI DEL SOFTWARE
 
L17 – INPUT/OUTPUT 2/2 (Cap 5 – I moderni sistemi operativi)
o PRINCIPI DEL SOFTWARE
o LIVELLI SOFTWARE
o DISCHI
o CLOCK
 
L18 – DEADLOCK (Cap 6 – I moderni sistemi operativi)
o Risorse
o Introduzione ai deadlock
o L’algoritmo dello struzzo
o Rilevamento e risoluzione
o Evitare i deadlock
o Prevenire i deadlock
o Altri aspetti correlati

L19 – ARCHITETTURE PER IL CALCOLO PARALLELO 1/2 (Cap 8 – I moderni sistemi operativi e Cap 8 – I moderni sistemi operativi)
o INTRODUZIONE
o PARALLELISMO NEL CHIP
o COPROCESSORI
o MULTIPROCESSORI
 
L20 – ARCHITETTURE PER IL CALCOLO PARALLELO 2/2 (Cap 8 – I moderni sistemi operativi e Cap 8 – I moderni sistemi operativi)
o MULTIPROCESSORI
o MULTICOMPUTER
o VIRTUALIZZAZIONE

• L21 –  CIRCUITI COMBINATORI – PARTE I
o L’algebra di Boole
o Le trasformazioni nel dominio di Boole
o Gli operatori universali
o L’uso del multiplexer come circuito risolutore
o Gli esercizi su questi temi

• L22 – CIRCUITI COMBINATORI – PARTE II
o Trasformazione dalla tavola di verità ad equazione logica
o Minimizzazione di un circuito digitale
o Circuito equivalente
o Semplificazione di espressioni logiche e relativa verifica
o Verifica di validità di uguaglianze logiche

• L23 – CIRCUITI COMBINATORI – PARTE III
o L’utilizzo di alcuni circuiti combinatori

• L24 – CODICI DI CORREZIONE E ASSEMBLY
o Codice di correzione di Hamming
o Metodi di calcolo dei bit di correzione
o Notazione polacca inversa
o Come accelerare le moltiplicazioni della CPU

• L25 – SISTEMI DI NUMERAZIONE
o Introduzione sui sistemi di numerazione posizionali
o Metodi di conversione tra basi
o Metodi semplificati con il sistema di numerazione binario
o Metodi semplificati per basi potenze l’una dell’altra

• L26 – ESERCITAZIONE SULLA GESTIONE DELLA MEMORIA LIBERA E ALGORITMI DI SOSTITUZIONE DELLE PAGINE
o Gestione della memoria libera
o Algoritmi di sostituzione delle pagine

• L27 –  ESERCITAZIONE SU ALGORITMI DI SOSTITUZIONE DELLE PAGINE, ALGORITMI DELLE RICHIESTE AL DISCO E TECNICHE DI INDIRIZZAMENTO IN ASSEMBLY
o Gestione della memoria attraverso il paging
o Gestione dei dispositivi di input/output
o Tecniche di indirizzamento in assembly per l’accesso agli array

• L28  – ESERCITAZIONE SU PROCESSI E THREAD
o Un modello statistico per la multiprogrammazione
o Algoritmi di scheduling per Sistemi batch e Sistemi interattivi
o Fattibilità di sistemi real-time

• L29  –  SIMULAZIONE DI UN ESAME
o Architetture di calcolatori
o Sistemi Operativi

• L30 – SCENARI ATTUALI E A TENDERE PER LE ARCHITETTURE DEI CALCOLATORI
o Panoramica degli attuali sistemi operativi
o Architetture che permettono il Cloud computing
o Container e orchestratori
o Nuovi modelli di sviluppo del software: DevOps e Microservizi
 
Attività didattiche
Didattica erogativa
L'insegnamento prevede, per ciascun CFU, 5 ore di Didattica Erogativa, costituite da circa 2,5 videolezioni (tenendo conto delle necessità di riascolto da parte degli studenti). Ogni videolezione esplicita i propri obiettivi e argomenti, ed è corredata da materiale testuale in pdf.
L’insegnamento prevede videolezioni (in ognuna sono specificati gli argomenti e gli obiettivi) organizzate in moduli. Alcune videolezioni sono a carattere prevalentemente teorico e generale sulle architetture dei calcolatori e sui sistemi operativi. Altre videolezioni sono focalizzate su aspetti pratici e riguardano esercitazioni pratiche con aspetti di progettazione. Le videolezioni teoriche consentiranno di fornire agli studenti le conoscenze relative a concetti fondamentali, nuovi paradigmi, temi innovativi ad alto livello. Le videolezioni pratiche, contenenti esempi di circuiti o algoritmi risolutivi, permetteranno di arricchire le competenze degli studenti al fine di fornirgli un bagaglio tecnologico adeguato. A tal riguardo, si presenteranno confronti di tecnologie, strategie e strumenti introdotti nelle architetture e nei sistemi operativi, al fine di rendere lo studente autonomo nella selezione della tecnologia più adatta . In entrambi i casi si farà uso di una terminologia adeguata agli argomenti trattati.
 
Didattica interattiva
L'insegnamento segue quanto previsto dalle Linee Guida di Ateneo sulla Didattica Interattiva e l'interazione didattica, e propone, per ciascun CFU, 1 ora di Didattica Interattiva dedicata alle seguenti attività: lettura area FAQ, partecipazione ad e-tivity strutturata costituita da attività finalizzate alla restituzione di un feedback formativo e interazioni sincrone dedicate a tale restituzione.
Tra le interazioni sincrone, sono utilizzate le aule virtuali in genere così strutturate:
  • il docente rende disponibile un testo di esercitazione agli studenti con domande prettamente a risposta aperta;
  • lo studente svolge in autonomia gli esercizi;
  • durante l’aula virtuale, il docente dà un “feedback formativo” ovvero valuta il livello di apprendimento degli argomenti del corso, raccoglie i dubbi e fornisce chiarimenti ed eventuali approfondimenti in base alle risposte date dagli studenti e alle difficoltà riscontrate. Il docente favorirà la discussione e il confronto al fine di sviluppare competenze critiche.
Modalità di verifica dell'apprendimento
Tutte le prove di verifica e autoverifica intermedie previste dai Corsi ed erogate in modalità distance learning sono da considerarsi altamente consigliate e utili ai fini della preparazione e dello studio individuali. Le prove di verifica e autoverifica intermedie non sono obbligatorie ai fini del sostenimento della prova d´esame, la quale deve essere svolta in presenza dello studente davanti ad apposita Commissione ai sensi dell´art. 11 c.7 lett.e) del DM 270/2004.

L´esame si svolge in forma scritta.
La prova scritta consiste in 8 domande, 2 pratiche e 6 teoriche. Per ogni modulo (Architetture e Sistemi Operativi) troviamo una domanda pratica e 3 quesiti teorici.
La parte teorica vale 10 punti su 30 (5 per il quesito su architetture di calcolatori e 5 su quello di sistemi operativi), mentre le due parti teoriche 20 su 30 (rispettivamente 10 su architetture dei calcolatori e 10 su quello di sistemi operativi).
A titolo esemplificativo per la parte pratica possono essere esercizi di algebra di Boole, conversioni numeriche tra differenti basi, strategie risolutive del sistema operativo nella gestione delle risorse (memoria, file system, processi/thread, input/output), misure di performance dei calcolatori elettronici, problematiche di arbitraggio di dispositivi elettronici, modalità di interfacciamento, schemi elettronici per calcolatori elettronici, circuiti per il calcolo aritmetico e logico, ecc.
Le domande teoriche vertono su tutto il programma.

L’esame finale è volto a verificare la comprensione degli argomenti trattati, la capacità di applicare correttamente le nozioni a casi studio e la comprensione delle problematiche proposte nel corso. L’ esame si svolge in forma scritta e/o orale. La prova scritta ha una durata massima di 120 minuti.
Il punteggio della prova è espresso in trentesimi.
La prova scritta consiste in domande a risposta aperta sugli argomenti specifici del corso. Le domande sono formulate con questa tipologia sia per argomenti più teorici sia per argomenti più pratici. Viene richiesto agli studenti di dimostrare la comprensione dei concetti fondamentali relativi alle architetture di calcolatori e ai sistemi operativi e la capacità dello studente di applicare tali conoscenze tramite la descrizione di funzionalità e strumenti implementati in scenari di applicazioni reali. La prova scritta ha una durata massima di 90 minuti durante la quale gli studenti devono illustrare in modo adeguato gli argomenti richiesti dimostrando di aver raggiunto gli obiettivi formativi prefissati.
L’esame è finalizzato anche a valutare l’autonomia di giudizio, l’ abilità comunicativa e la capacità di apprendere degli studenti.
Al fine di valutare il conseguimento degli obiettivi formativi del corso, il docente terrà conto nella valutazione finale dell’esame:
-    della capacità di apprendere e quindi di esporre l’argomento richiesto; mostrando un’attitudine a risolvere nuove sfide;
-    della padronanza di linguaggio dello studente;
-    della capacità di applicare architetture, funzionalità o strumenti alla risoluzione di problemi reali e di valutare in modo appropriato le scelte tecnologiche in base a situazioni reali.
Per superare l’esame, lo studente deve dimostrare di aver acquisito conoscenze per l’analisi dei problemi complessi, una conoscenza di base sulle funzionalità e sui principali elementi degli strumenti introdotti in tale processo. Verrà valutata anche la capacità di ipotizzare soluzioni innovative per migliorare i processi di innovazione. Per conseguire un punteggio pari a 30/30 e lode, lo studente deve inoltre dimostrare di aver acquisito una conoscenza eccellente di tutti gli argomenti trattati durante il corso.
Libri di testo

Oltre alle lezioni realizzate dal Docente ed ai materiali didattici pubblicati in piattaforma, è obbligatorio lo studio dei seguenti testi:

  • Tanenbaum Andrew S., Architettura dei calcolatori: Un approccio strutturale, 6a Ed., Pearson Education, 2013
  • Tanenbaum Andrew S, Bos  I moderni sistemi operativi. Ediz. MyLab. 4a Edizione settembre 2019
Ricevimento studenti

Previo appuntamento (a.simonetta@unimarconi.it)