Esame di Calcolatori Elettronici
(per gli studenti di Ing.
Informatica della Scuola di Ing. di Pisa)
Questo sito è stato realizzato
per permettere l'autocorrezione degli elaborati consegnati dagli studenti
durante la prova pratica al calcolatore. La prova pratica,
che fa parte delle prove di esame, consiste nella traduzione di alcune
funzioni da C++ ad assembler per architetture Intel x86 e nella
scrittura di estensioni per un nucleo multiprogrammato didattico.
Agli studenti è richiesto di correggere
autonomamente il proprio elaborato e di comunicare successivamente le
correzioni all'esaminatore, prima di sostenere la prova orale. In questo modo, l'esaminatore può valutare,
in un tempo ragionevole, gli
errori commessi dallo studente durante la prova pratica.
Prima di procedere, si consiglia di leggere le
istruzioni sull'utilizzo del sito.
Premere qui per
accedere alla propria home page.
Verranno richiesti il numero di matricola e la password scelta il
giorno della prova pratica.
Avvisi
Col tempo, è mia intenzione far diventare questo sito un punto
di raccolta per informazioni di varia natura sull'esame stesso.
Sono graditi contributi da parte degli studenti.
Materiale per l'esame
- Orario di ricevimento: ogni lunedì dalle 14.30 alle 17.30. Per il ricevimento da remoto, scrivere un messaggio sulla chat di MS Teams e attendere di essere invitati
sul canale.
Dispense
Non più usate:
Esercizi
Software
- Macchina virtuale contentente una distribuzione Debian e tutto il software necessario per il corso (login: studenti, password: studenti, password di root: admin):
- VMware, per Windows/Linux/Mac non Silicon (v2.1)
- VMware per Mac Silicon (v2.1)
In alcuni casi le VM non si connettono alla rete. Provare con le seguenti istruzioni.
Per chi vuole installare il software autonomamente sulla propria distribuzione Linux:
- libce: libreria di supporto per gli Esempi I/O e il nucleo (v3.0.5). Istruzioni per l'installazione.
Documentazione.
- QEMU (versione modificata per il corso) e le istruzioni per l'installazione (v8.2.1-1).
-
Esempi I/O: programmi di esempio sull'utilizzo delle interfacce (tastiera, video, timer, etc.) e le relative istruzioni (v7.4.2).
-
Nucleo a 64 bit e alcune istruzioni (v7.1.2).
- La prima versione del nucleo a 64 bit (con l'esclusione delle gestione della memoria virtuale) e del boot loader sono state realizzate dallo studente Yuri Iozzelli a partire dalle vecchie versioni a 32 bit.
- Lo studente Vincenzo Consales ha portato sul nucleo il file system Minix, implementando anche la primitiva fork() di Unix (sorgenti originali).
- Lo studente Antonio Le Caldare ha esteso il nucleo implementando una completa interfaccia grafica a finestre, sovrapponibili e ridimensionabili.
(sorgenti).
- Lo studente Filippo Storniolo ha sostiuito lo schedulatore del nucleo implementando un sistema time-sharing con priorità dinamica, inclusa
la primitiva nice e il meccanismo di ageing (sorgenti).
- Lo studente Giovanbattista Rolandi ha portato il nucleo sui sistemi multiprocessore, scrivendo il codice per il boostrap dei processori aggiuntivi,
proteggendo il codice del nucleo con un lock globale e garantendo la consistenza dei TLB (sorgenti).
- Lo studente Riccardo Palma ha scritto il driver e le primitive per utilizzare le schede audio CS4231A, con DMA e playback continuo (sorgenti).
Approfondimenti
Contributi degli studenti
- Gli studenti Niccolò Pratesi, Matteo Giugni e Francesco De Lucchini hanno segnalato e corretto varie piccole imprecisioni nelle dispense e sul sito.
- Lo studente Gabriele Frassi ha condiviso i suoi appunti personali su alcuni argomenti del corso: Assembly, nucleo.
- Lo studente Luigi Gjoni ha preparato e condiviso questi schemi concettuali che riassumono tutti gli argomenti del corso.
Vecchio programma (pre A/A 2015/2016)
Tutto il materiale sottostante è relativo al vecchio programma basato sull'architettura a 32 bit.
- Lucidi sulle istruzioni per la manipolazione delle stringhe.
-
Dall'A/A 2011/2012 le lezioni e la prova pratica sono basate
su sistemi Unix-like (FreeBSD, GNU/Linux). In particolare la prova pratica
si svolgerà su una distribuzione di GNU/Linux.
Per gli esercizi di assembler va
benissimo la versione di gcc che viene normalmente fornita con questi sistemi.
-
Il file ser.s (corretto) contenente i programmi di utitilità
tastiera, video e uscita.
-
I sorgenti del nucleo (v4.11).
Approfondimenti (pre A/A 2015/2016)
- Application Binary Interface per l'architettura x86 (le regole per l'allineamento
cominciano a pag. 28 del pdf).
- Slide ed esempi del seminario
sul bootstrap del PC, tenuto dal Dott. Fabio Checconi nell'A.A. 2003/04.
Per ulteriori domande e chiarimenti, potete contattare
fchecchoni_AT_libero.it. (sostituite _AT_ con @)[8].
-
Versione estesa del nucleo (versione
SVN 698). Questo nucleo estende la versione semplificata presentata nel
libro, aggiungendo argomenti più avanzati e nuove
funzialità (per esempio, i terminali virtuali).
Questa versione
verrà aggiornata aggiungendo nuovi eventuali
driver e funzionalità scritte dagli studenti (in
genere come tesina triennale).
Hanno contribuito a questa versione del nucleo:
- Lo studente Antonio Spada, che ha modificato il nucleo in
modo da utilizzare il controllore
delle interruzioni avanzato (I/O APIC), che sostituisce o si affianca
al vecchio PIC nei PC moderni.
(sorgenti originali).
- Lo studente Angelo Castellano, che ha esteso il
nucleo emulando la modalità testo nella modalità grafica,
aggiungendo una barra che mostra visivamente quale è il terminale virtuale attivo.
(sorgenti originali).
- Gli studenti Alessandro Furlanetto e Federico
Bianucci, che hanno modificato il nucleo in modo che ogni terminale
virtuale abbia la propria finestra (finestre non spostabili e non
sovrapponibili).
(sorgenti originali).
- Lo studente Filippo Lauria, che ha esteso il nucleo
aggiungendo il driver per la scheda di rete Realtek RTL8139. (sorgenti originali).
- La studentessa Roberta Murgia, che ha esteso il nucleo
aggiungendo il driver per il controllore USB UHCI, gestendo
connessione, configurazione e disconnesione dei dispositivi.
(sorgenti originali).
- Lo studente Michele Buccoli, che ha esteso il nucleo
aggiungendo il driver della scheda audio Ensoniq ES1370, con play
continuo.
(sorgenti originali).
- Lo studente Giuseppe Pes, che ha esteso il nucleo aggiungendo le primitive POSIX essenziali
per l'accesso in lettura a scrittura, creazione e cancellazione di file e directory per i file system FAT32.
(sorgenti originali).
- Lo studente Daniele Di Proietto, che ha esteso il nucleo aggiungendo il driver per il mouse PS/2 e il
supporto per il disegno del cursore, il cambio di finestra e lo scrolling.
(sorgenti originali).
Contributi degli studenti (pre A/A 2015/2016)
- Lo studente Marco Soricellli ha deciso di rendere disponibili a tutti i suoi
appunti dalle lezioni. Si tratta del vecchio
programma (pre A/A 2015/2016), ma sono ancora in gran parte validi.
- Lo studente Mohamed Machkour ha preparato questa
dispensa in LaTeX integrando i suoi appunti con alcune risposte della mailing list
e ha deciso di renderla disponibile a tutti.
- Lo studente Riccardo Diodati ha trascritto in LaTeX e ordinato
per argomenti le domande e le risposte della mailing list, dall'anno 2005
fino a giugno/luglio del 2007. Potete scaricare il
pdf risultante.
- Gli studenti Luca Bonmassar e Riccardo Vestrini mi hanno
mandato questo schema che raccoglie e collega fra loro i vari
componenti del calcolatore presentati nel libro di testo (processore,
RAM, bus, controllore DMA, controllore delle interruzioni, etc.). Lo
schema è realizzato con Kontour (ora Karbon14) dalla suite
KOffice. Potete prelevare da qui la versione
in pdf;
- Nucleo di "Calcolatori Elettronici. Volume IV" (G. Frosini, B. Lazzerini)
(vecchia versione del materiale ora contenuto in "Architettura dei Calcolatori Volume III")
- Lo studente Fabio Checconi ha reso realmente funzionante
il nucleo descritto in quel libro. Il nucleo realizzato
comprende il driver per la tastiera e per il video,
i processi esterni per la lettura/scrittura delle porte seriali, la multiprogrammazione,
i semafori e il timer. Il nucleo contiene anche il codice per l'allocazione della memoria
dinamica e i terminali virtuali (normalmente non spiegati a lezione).
Inoltre, e' stato realizzato il parser che permette di tradurre i costrutti
'semaphore', 'process', etc.. negli appropriati costrutti C/C++.
Potete scaricare i sorgenti, comprensivi di istruzioni.
- Lo studente Dario Faggioli ha esteso il nucleo aggiungendovi il driver esterno per l'accesso
agli hard disk (accesso ad interruzione di programma) e per l'accesso al floppy disk
(DMA). Potete scaricare i sorgenti, comprensivi di
istruzioni.
- Lo studente Carlo Vallati ha esteso il nucleo aggiungendovi il driver per il controllore
USB UHCI dell'Intel, funzioni per l'accesso e la configurazione tramite il bus PCI, e un
driver di esempio per la stampa su stampanti USB.
Potete scaricare i
sorgenti, comprensivi di istruzioni.
- Lo studente Diego Giardinetto ha esteso il nucleo aggiugendovi il driver per le schede di rete
Ethernet compatibili con NE2000. Qui trovate i sorgenti.
(il file contiene due versioni del nucleo: una configurata per l'invio dei dati e l'altra per la ricezione).
- Lo studente Riccardo Menichini ha esteso il nucleo aggiungendovi il driver le schede audio
compatbili con Sound Blaster 16. Qui trovate i sorgenti.
-
Boot loader utilizzato fino all'A/A 2011/12
per il caricamento del nucleo a partire dal DOS.
Sorgenti.
Hanno contribuito a questa versione:
- Lo studente Valerio di Gregorio, che ha scritto il programma per DOS che esegue
il bootstrap del modulo sistema.
- Lo studente Simone Genovese, che ha modificato il programma di bootstrap e il nucleo
per permettere il ritorno al DOS al termine dell'esecuzione.
- Lo studente Angelo Castellano, che ha esteso il boot loader
in modo da abilitare la modalità grafica VGA 800x600.
- Gli studenti Alessandro Furlanetto e Federico
Bianucci, che hanno esteso il boot loader
in modo da abilitare (opzionalmente) la modalità grafica SVGA
1280x1024x256, con ritorno al DOS in modalità testo in
uscita.
- Nuovo nucleo di Calcolatori Elettronici (vedi sezione Approfondimenti):
- Lo studente Roberto Brüggemann ha esteso il nucleo aggiungendo una gestione dei thread
e della mutua esclusione ispirata al modello di Java.
Sono disponibili i sorgenti.
- Gli studenti Tommaso Latini e Luca Carotenuto hanno esteso il nucleo completando l'infrastruttura USB con la gestione dei diversi tipi di trasferimento e l'allocazione della banda tra i dispositivi connessi.
Sono disponibili i sorgenti.
- Lo studente Antonio La Marra ha esteso il nucleo aggiungendo il driver USB per i dispositivi a blocchi. Sono disponibili i sorgenti.
Per problemi o suggerimenti, inviate un email a g.lettieri@iet.unipi.it inserendo la stringa '[CALCOLATORI]' dentro l'oggetto.